ML k-邻近分类算法

ML

概述

k-邻近算法采用测量不同特征值之间距离的方法分类。

  • 优点:精度高,对异常值不灵敏,无数据输入假定。
  • 缺点:计算复杂度高,空间复杂度高。
  • 适用数据范围:数值型和标称型。

工作原理:存在一个训练样本集,并且其中每个数据都存在标签,即我们知道样本集中每一个数据和标签的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后提取样本集中特征最相似(最邻近)数据的分类标签。一般来说,只选择数据样本集中前k个最相似的数据,这就是kNN中k的来源。

k-邻近算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
dataSetSize = dataSet.shape[0]
diffMat = tile(inX, (dataSetSize, 1)) - dataSet
sqDiffMat = diffMat ** 2
sqDistance = sqDiffMat.sum(axis=1)
distances = sqDistance ** 0.5
sortedSqDistance = distances.argsort()
classCount = {}
for i in range(k):
voteIlabel = labels[sortedSqDistance[i]]
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
return sortedClassCount[0][0]