Я строю простую модель KNN в python, используя scikit learn.Я протестировал его на наборе данных вина из UCI и заметил, что результаты, возвращаемые функцией .predict()
, не являются классом большинства соседей.
knn = KNeighborsClassifier(n_neighbors=3,weights='uniform')
knn.fit(wine,class_wine)
predictions = list(knn.predict(wine))
# S is array I've made that chooses majority class from neighbors of each instance
a = list(zip(predictions,list(S)))
for i in range(0,len(wine)):
if(predictions[i]!=S[i]):
print(predictions[i],S[i],class_wine[knn.kneighbors()[1][i].tolist()].tolist())
Вывод выглядит следующим образом:
1.0 3.0 [3.0, 2.0, 3.0]
1.0 2.0 [1.0, 2.0, 2.0]
1.0 2.0 [1.0, 2.0, 2.0]
1.0 3.0 [3.0, 1.0, 3.0]
3.0 2.0 [2.0, 3.0, 2.0]
Первый столбец - это прогноз с помощью алгоритма scikit, второй столбец - это мой алгоритм, использующий функцию kneighbors (), и из возвращенного списка он выбирает большинство.класс, как и положено.Третий столбец - это список соседей.
Как вы можете видеть, предикат () из KNeighborsClassifier
делает что-то по-другому.
Есть ли что-то в реализации KNeighborsClassifier
Я пропустил?