применить k-ближайших соседей в наборе данных в python

#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 и представления массивов.