【问题标题】:KNN with weight set as distance in sklearnsklearn中权重设置为距离的KNN
【发布时间】:2019-02-12 03:03:55
【问题描述】:

我正在使用 KNN 处理 UCI 眼动脑电图数据,并且我将 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])

当权重设置为距离时,模型的行为是否直观?任何人都可以演示如何分配此权重并帮助更好地理解工作原理吗?

【问题讨论】:

  • 你尝试过其他类型的重量吗?那么准确度有区别吗?考试成绩呢?
  • @VivekKumar 还没有。我试过这个,我的问题是让 1 具有这个权重的训练准确性是否直观?

标签: python machine-learning scikit-learn knn


【解决方案1】:

在与同事讨论时找到了答案。是的,当 KNN 分类器的权重参数设置为距离时,很直观地得到 1 作为训练结果,因为当训练数据用于测试模型的训练分数时,离测试点最近的点成为点本身。它们之间的距离为 0。现在由于距离倒数用于为投票份额(权重 = 距离参数)赋予权重,距离 0 使 n/0 = inf 得分到最近点(点本身),因此训练结果为总是正确的,因为对最近点的无限投票使模型预测正确的类。

这是一个简短的解释,但可以从KNN 的 scikit 学习文档中深入研究这个概念

【讨论】:

    猜你喜欢
    • 2018-10-08
    • 2016-10-18
    • 2020-10-01
    • 2016-12-05
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 2018-09-19
    相关资源
    最近更新 更多