k-近邻算法(以下简称kNN)是分类算法中比较简单的一种,KNN算法的一般流程为:(1)收集数据,如从文件中导入数据(2)准备数据,将数据转化为适合计算的格式,如矩阵的形式(3)分析数据(4)测试数据,计算分类的错误率(5)应用算法,给定输入,得到相应的输出,指出改数据属于哪一种分类。
kNN算法的过程如下:
(1)计算数据集中各点与当前点(给定数据)之间的距离;
(2)按照距离的递增次序排序;
(3)选取与当前点距离最小的k个点
(4)统计前k个点所在的类别出现的频率
(5)返回频率最高的点所在的类别,此类别为当前点的预测分类
具体实现代码如下:
def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[0] #返回矩阵的行数
diffMat = tile(inX, (dataSetSize,1)) - dataSet
sqDiffMat = diffMat**2
sqDistances = sqDiffMat.sum(axis=1)#计算两点间的距离
sortedDistIndicies = distances.argsort()
#按照距离从小到大的顺序对下标排序
classCount={}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
#统计分类出现的频率,并且按照从高到低排序
# iteritems()是python2.x中的,在python3.x废除了在这里用items
return sortedClassCount[0][0]