kNN算法简介与实现
1.kNN算法简介
kNN的全程是K Nearest Neighbors,又称K近邻算法。kNN算法是一种有监督学习的分类算法,原理很简单,甚至我们从名字上就能看出大概(k近邻也就是说找到k个邻居)。下面给出kNN算法的实现步骤:
- 1.输入一个待分类数据,确定K值(K值用来确定需要几个“邻居”)
- 2.依次计算输入数据和训练数据距离(比如欧氏距离)
- 3.将距离从小到大排序,获取前k个距离短的数据
- 4.统计这k个数据所属的分类值,输出得分最高的分类作为该待分类数据所属的类别
从实现步骤上来看很简单,实际上也确实是这样,因此kNN算法被称作最简单的分类算法,但是正是因为原理和实现都很简单kNN算法也成为了最常用的分类算法之一。
2.kNN算法的代码实现
# kNN分类器
def classify0(inX, dataSet, label, k):
# 获得dataSet的行数
dataSetSize = dataSet.shape[0]
# 在列向量方向上重复inX共1次(横向),行向量方向上重复inX共dataSetSize次(纵向)
diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet
# 测试数据和训练数据相减后平方
sqDiffMat = diffMat ** 2
# 结果相加后开方
sqDistances = sqDiffMat.sum(axis=1)
distances = sqDistances ** 0.5
# 将距离排序,(argsort)返回数组从小到大的索引值
sortedDistanceIndex = distances.argsort()
# 获取前k个分类结果
classCount = {
}
for i in range(k):
voteIlabel = label[sortedDistanceIndex[i]]
classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
# 将分类结果得分排序
# python3中用items()替换python2中的iteritems()
# key=operator.itemgetter(1)根据字典的值进行排序
# key=operator.itemgetter(0)根据字典的键进行排序
# reverse降序排序字典
sortedClassCount = sorted(classCount.items(),
key=operator.itemgetter(<