#python
#python
Вопрос:
У меня есть набор данных в CSV-файле, и все данные являются числовым атрибутом, я хочу применить k-ближайших соседей в моем наборе данных
У меня в коде какая-то ошибка, и я не знаю, кто может ее исправить.
код: [введите описание изображения здесь][1] [введите описание изображения здесь] [2]
Комментарии:
1. Привет, добро пожаловать в StackOverflow. Пожалуйста, опубликуйте свой код и ошибку в виде текста вместо изображений.
2. Я бы настоятельно рекомендовал numpy. Чистый python работает медленно.
Ответ №1:
похоже, что instance1[x]
и instance2[x]
, где вы применяете вычитание, является string
типом. Вы не можете вычесть 2 строки, поэтому вы можете изменить свой код следующим образом,
distance = pow( ( int(instance1[x])-int(instance2[x]) ),2)
При этом переменная будет считываться как int
тип, поэтому вы можете ее вычесть.
вы также можете заменить int
на float
double
etc
Комментарии:
1. удалите пробел между
iteritems
и()
вsortedVotes
.его buit-in-function.2. Необходимый код является
sortedVotes = sorted ( classVotes.iteritems(), key=operator.itemgetter ( 1 ), reverse=True )
Ответ №2:
Замените переменную, определяющую строку sortedVotes
, на
sortedVotes = sorted ( classVotes.items(), key=operator.itemgetter ( 1 ), reverse=True )
Комментарии:
1. если вы используете python 3,
items()
требуется ….iteritems()
в python3 больше не требуется2.
sortedVotes = sorted ( classVotes.items(), key=operator.itemgetter ( 1 ), reverse=True )
Ответ №3:
import numpy as np
class knn:
def __init__ (self, x, y, k):
self.k = k
self.x_data = x
self.y_data = y
def predict(self, test):
dist = np.sqrt(np.sum((self.x_data-test)**2,axis=1))
closest = np.argpartition(dist, self.k)[0:self.k]
a,b = np.unique(self.y_data[closest],return_counts=True)
return a[np.where(b == b.max())]
x: объекты, y: метка, k: количество соседей
Я надеюсь, что это поможет вам!
Ответ №4:
Вот единственная функция numpy, которая будет работать
Где d
— числовой массив точек данных с формой (n_datapoints, n_features).
И q
представляет собой числовой массив точек запроса с формой (n_queries, n_features).
и K
— это количество соседей, которые вы хотите получить обратно.
n_features относится к количеству измерений в ваших данных.
def calc_k_nearest_neighbors(d, q, K=1):
return d[((d[None, :, :] - q[:, None, :]) ** 2).sum(axis=2).argsort()[:,:K]]
Здесь рассматриваются некоторые сложные концепции python, поэтому, если вы хотите узнать больше, загляните в array broadcasting, np.argsort и представления массивов.