KNN с весом, установленным как расстояние в склеарне - PullRequest
0 голосов
/ 06 сентября 2018

Я работаю с данными EEG о движении глаз UCI с помощью KNN, и я установил параметр weights равным distance. Ниже мой код:

test_scores = []
train_scores = []
for i in range(1,7):

    knn = KNeighborsClassifier(i,weights="distance")

    knn.fit(X_train,y_train)

    test_scores.append(knn.score(X_test,y_test))
    train_scores.append(knn.score(X_train,y_train))

Теперь для точности train он дает выход 1,0 для всех значений k, как это:

[1.0, 1.0, 1.0, 1.0, 1.0, 1.0]

Обновление # 1 То же самое с этим примером

from sklearn.datasets import load_boston
from sklearn.neighbors import KNeighborsRegressor
from sklearn.preprocessing import scale

boston = load_boston()

y = boston.target
X = scale(boston.data)
print(X.shape)
knn = KNeighborsRegressor(n_neighbors=5, weights='distance')
knn.fit(X[:-100,:], y[:-100])
knn.score(X[:-100,:], y[:-100])

Может ли модель вести себя так, когда вес установлен на расстоянии? Кто-нибудь может продемонстрировать, как будет назначен этот вес, и помочь лучше понять работу?

1 Ответ

0 голосов
/ 03 октября 2018

Узнал ответ на этот вопрос сам, обсуждая его с коллегами. Да, интуитивно понятно получить 1 в качестве результата обучения, когда весовой параметр классификатора KNN установлен на расстояние, потому что когда данные обучения используются для проверки модели на результат обучения, ближайшая точка к точке тестирования становится самой точкой. Расстояние между ними равно 0. Теперь, так как обратное расстояние используется для определения веса доли голоса (вес = параметр расстояния), расстояние 0 дает n / 0 = показатель inf для ближайшей точки (самой точки), следовательно, результат обучения всегда корректно из-за бесконечного голосования за ближайшую точку, заставляющую модель предсказывать правильный класс.

Это краткое объяснение, но концепцию можно подробно изучить из документации по scikit learn для KNN

...