学习笔记:机器学习实战之KNN

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.csdn.net/ikerpeng/article/details/17026011

                  https://blog.csdn.net/yb844154912/article/details/54384217

猜你喜欢

转载自blog.csdn.net/folk_/article/details/80550761