KNN算法注释版,新手小白,有错误欢迎指正
环境:python 3.6
#KNN分类器
def classify(inX, dataSet, labels, k):
#inX为行向量
dataSize = dataSet.shape[0]#求训练集的行数
diffmat = tile(inX ,(dataSize,1)) - dataSet#各元素求差,返回矩阵类型
diffmat = array(diffmat)#转换成array类型,**代表每个元素的平方,mat类型的**表示矩阵的平方
sqdiffmat = diffmat**2 #各元素平方,返回array类型
sqdistance = sqdiffmat.sum(axis=1)#axis=1表示行,整条语句表示行向量相加,返回array类型
distances = sqdistance**0.5#各元素开方,返回array类型
sortedDistIndicies = distances.argsort()#从小到大排序,返回array类型
classCount = {}#定义字典数据类型
for i in range(k):
#取出字典中的key
voteIlabel = labels[sortedDistIndicies[i]]
#classCount中是否有voteIlabel这个key,有则取出key的值并且+1,没有则添加该key并初始化为0,再加1
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
sortedClassCount = sorted(classCount.items(),#可迭代的对象,items()返回可遍历的元组数组
key = operator.itemgetter(1),#按照第二个元素的次序进行排序(下标从0开始)
reverse=True)#降序
return sortedClassCount[0][0]#返回分类的结果
参考资料: http://www.runoob.com/python/python-dictionary.html
https://www.cnblogs.com/yyxf1413/p/6253995.html
https://blog.youkuaiyun.com/ikerpeng/article/details/17026011
https://blog.youkuaiyun.com/yb844154912/article/details/54384217