如何在python中列出KNN中每个实例的所有邻居列表

时间:2017-05-10 23:10:29

标签: python knn

我对python知之甚少但是对于我的班级我必须进行KNN分类,我需要得到所有邻居(不仅仅是通过多数投票预测的那些)并获得每个邻居的百分比(百分比)发生的机会)。例如我的火车数据如下:

zip          lat    long
77339   73730.689   -990323.6834
77339   73731.699   -990323.6834
77345   71679.54137 -998244.7071
77346   71679.54137 -998245.7071

我的测试数据是:

77388   55410.72694 -994507.7348    
77389   60816.86756 -990211.3075    
77396   68641.10762 -997071.3902    
77380   48762.26134 -978612.6912    

其中zip是预测所需的类。我为火车和测试集制作了两个文件。我的目标是获取每个测试实例的邻居列表。所以,如果大多数投票说测试集中的zip 77388的预测拉链是77380(k = 3),那么我想知道77380以及该拉链的其他邻居的百分比是多少(其他2个邻居可能是77388) ,77389)。

我借助此链接http://alexhwoods.com/k-nearest-neighbors-in-scikit-learn/尝试了以下代码。

import pandas as pd
import numpy as np
train =pd.read_csv('C:\\train.csv')
test =pd.read_csv('C:\\test.csv')

from sklearn.neighbors import KNeighborsClassifier
cols=['lat','long']
cols2=['tweetzip']

trainArr=train.as_matrix(cols) #trainArr= has training numeric feature (location)
trainRes=train.as_matrix(cols2) # trainRes= contains the correct zip for training data
testArr=test.as_matrix(cols) ##testArr= has location of test data
testRes=test.as_matrix(cols2) # ##testRes= has correct tweetzip for test tada

knn =KNeighborsClassifier(n_neighbors=3,weights='uniform')
knn.fit(trainArr,trainRes.ravel())
output=knn.predict(testArr)
knn.kneighbors(testArr, return_distance=False) ### is it the same as previous line?

tweezip=[]
predictzip=[]
correct=0.0
for i in range(len(output)):
    if testRes[i][0]==output[i]:
        correct+=1

tweezip.append(testRes[i][0])
predictzip.append(output[i])

print tweezip
print predictzip
print 'correct',correct/len(output)

我试图找到一些但却找不到对我有帮助的东西。谢谢。

1 个答案:

答案 0 :(得分:0)

graphlab可以轻松实施,免费用于学术学习。关于ML的结帐课程,包括聚类和graphlab here

的介绍

我发现machine learning mastery上的这个链接也更容易理解和实现,只是用python编写的更简单的应用程序。