KNN的Python实现(需添加库numpy和operator)

来源:互联网 发布:c语言 矩形 rect 编辑:程序博客网 时间:2024/06/09 19:22

一、KNN算法伪代码:对位置类别属性的数据集中的每个点一次执行如下操作:

      (1)计算已知类别数据点与当前点的距离

      (2)按照距离递增次序排序

      (3)选取与当前距离最小的k个点

      (4)确定前K个点所在类别的出现频率

      (5)返回前K个点出现频率最高的类别作为当前点的预测分类

二、代码调试:

代码KNN.py:

from numpy import *import operatordef createDataSet():    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])    labels = ['A','A','B','B']    return group,labelsdef classify0(inX,dataSet,labels,k):    dataSetSize = dataSet.shape[0]    diffMat = tile(inX,(dataSetSize,1)) - dataSet    sqDiffMat = diffMat**2    sqDistances = sqDiffMat.sum(axis=1)    distances = sqDistances**0.5    sortedDistIndicies = distances.argsort()    classCount={}    for i in range(k):        voteIlabel = labels[sortedDistIndicies[i]]        classCount[voteIlabel] = classCount.get(voteIlabel,0)+1    sortedClassCount = sorted(classCount.iteritems(),                              key=operator.itemgetter(1),reverse=True)    return sortedClassCount[0][0]

函数解析:

from numpy import *

group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])

dataSetSize=group.shape[0]


shape

shape[0]返回一维长度,shape[1]返回二维长度。


tile

diffMat = tile([0,0],(dataSetSize,1))-group

tile 函数就是把,第一个参数(矩阵[3,5])按照4行,5列重排。


argsort()

从小到大排序,并返回(最小到最大)依次的索引。


{}字典,键值对,第一个参数是键,第二个参数是值


get

a.get(k,c)参数k(键),在a中,返回k键的值:a[b];键k不在a中,返回c


sorted()

sorted 是按照第二个参数进行排序,reverse=True时逆序,false顺序(从小到大)。

参考文献:[美]Peter Harrington著,李锐 李鹏 曲亚东 王斌 译.Machine Learning in Action (机器学习实践),人民邮电出版社,2013年6月第一版,2015年9月北京低11次印刷


0 0