我正在使用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])
将权重设置为距离时,模型表现出这样的直观性吗?任何人都可以演示如何分配此权重并帮助更好地理解工作原理吗?
答案 0 :(得分:0)
在与同事讨论时自己找出了答案。是的,当KNN分类器的权重参数设置为距离时,将训练结果设为1很直观,因为当训练数据用于测试训练得分模型时,最接近测试点的点本身就是该点。它们之间的距离为0。现在,由于使用距离倒数来给投票份额赋予权重(权重=距离参数),因此距离0会给最接近的点(该点本身)提供n / 0 = inf分数,因此训练结果为总是正确的,因为对最接近的点进行了无限投票,从而使模型可以预测正确的类别。
这是一个简短的解释,但是可以从scikit学习文档KNN
深入研究该概念。