权重设置为sklearn中的距离的KNN

时间:2018-09-06 19:32:28

标签: python machine-learning scikit-learn knn

我正在使用KNN处理UCI眼动eeg数据,并将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 精度,对于所有k值,其输出为1.0,如下所示:

[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 :(得分:0)

在与同事讨论时自己找出了答案。是的,当KNN分类器的权重参数设置为距离时,将训练结果设为1很直观,因为当训练数据用于测试训练得分模型时,最接近测试点的点本身就是该点。它们之间的距离为0。现在,由于使用距离倒数来给投票份额赋予权重(权重=距离参数),因此距离0会给最接近的点(该点本身)提供n / 0 = inf分数,因此训练结果为总是正确的,因为对最接近的点进行了无限投票,从而使模型可以预测正确的类别。

这是一个简短的解释,但是可以从scikit学习文档KNN

深入研究该概念。