#python #pandas #numpy #iteration #knn
#python #панды #numpy #итерация #knn
Вопрос:
у меня есть набор данных Iris, и я хочу рассчитать расстояние между всеми строками, то есть 0 и 1, 0 и 2 ….. , 1 и 2, 1 и 3 …. для KNN. мой код:
import numpy as np
from sklearn import datasets
import pandas as pd
#1 Handle the data
iris = datasets.load_iris()
x = iris.data[:, :4]
y = iris.target.reshape((150,1))
def shuffle(x,y,percentage):
iris_data = np.concatenate((x,y), axis=1)
shuffling = iris_data[np.random.permutation(len(iris_data))]
train, test = np.split(shuffling,[int(percentage*len(iris_data))])
x_train = train[:, :4]
y_train = train[:, -1]
x_test = test[:, :4]
y_test = test[:, -1]
return [iris_data, x_train, y_train, x_test, y_test]
shuf = shuffle(x,y,0.7)
x_train= shuf[1]; y_train= shuf[2]
x_test= shuf[3]; y_test= shuf[4]
#2 Distance function
def distance(x, x_test, y, y_test):
cont= 0
dist = {}
for i in range(x.shape[0]):
for j in range(x.shape[0]):
cont = (x[i] - x_test[j])**2
dist[i] = (np.sqrt(cont), y[i])
return dist
но я получаю словарь с массивами numpy (4,) вместо массива скаляров.
я пытался использовать itertools.combinations, но у меня есть некоторые ошибки.
еще один вопрос: как я могу сохранить свои выходные данные в dataframe с расстояниями и метками вместо dict (dist = {}) ?
Спасибо