Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scikit learn 为什么scikit中的KNN算法不能按预期工作?_Scikit Learn_Knn - Fatal编程技术网

Scikit learn 为什么scikit中的KNN算法不能按预期工作?

Scikit learn 为什么scikit中的KNN算法不能按预期工作?,scikit-learn,knn,Scikit Learn,Knn,我正在使用scikit learn用python构建一个简单的KNN模型。我在UCI的wine数据集上测试了它,我注意到.predict()函数返回的结果不是大多数邻居类 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 majo

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

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())
输出如下所示:

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()函数,并从返回的列表中选择majority类,就像它应该做的那样。第三列是邻居列表

如您所见,来自
KNeighborsClassifier
的predict()做了一些不同的事情


kneighbors分类器的实现有什么问题吗?

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

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