python3实现knn算法实现分类
knn算法就是算空间两点的距离,来分类代码如下
import numpy as npy
import sys
def knn(k,testdata,traindata,labels):
dif = testdata - traindata
sqdif = dif**2
sumsqdif = sqdif.sum(axis=1)
distance = sumsqdif**0.5
#获取从小到大的数据的下标
sortdistance = distance.argsort()
count = {}
for i in range(0,k):
vote = labels[sortdistance[i]]
count[vote] = count.get(vote,0) + 1
sortcount = sorted(count.items(),key=lambda s: s[1],reverse=True)
return sortcount[0][0]
if __name__ == '__main__':
#训练数据
samples = npy.array([[0, 0, 0], [0, 0.5, 0], [1, 1,0.5],[0, 0.5, 8.5], [0, 0.5, 8], [0, 0.5,9]])
#训练数据对应的分类
samplesTabel = npy.array(['one','one','one','one1','one1','one1'])
#测试数据
test = npy.array([0, 0.5, 2])
#取多少个来比较(不能大于训练数据数量)
frequency = 5
label = knn(frequency,test,samples,samplesTabel)
print(label)