首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么scikit中的KNN算法不能像预期的那样工作?

为什么scikit中的KNN算法不能像预期的那样工作?
EN

Stack Overflow用户
提问于 2019-04-25 02:58:09
回答 1查看 436关注 0票数 1

我正在使用scikit learn在python中构建一个简单的KNN模型。我在UCI的葡萄酒数据集上测试了它,我注意到.predict()函数返回的结果不是大多数邻居类。

代码语言:javascript
复制
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())

输出如下所示:

代码语言:javascript
复制
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的predict()做了一些不同的事情。

是不是有什么关于KNeighborsClassifier的实现我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-25 03:32:10

使用knn.kneighbors()时,如果不使用X参数,它将使用用于拟合模型的训练数据(self中的内容),并从可能的邻居集中排除当前点。但是,当您使用knn.predict时,它不能排除该点,因为它不知道它是相同的点(可能是具有相同特征的其他葡萄酒)。在构建自己的predictor时,请尝试使用knn.kneighbors(wine)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55836858

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档