zoukankan      html  css  js  c++  java
  • K-近邻(KNN)算法

    1,KNN算法对未知类别属性的数据集中的每个点依次执行以下操作:

    1. 计算已知类别数据集中的点与当前点之间的距离;
    2. 按照距离递增排序;
    3. 选取与当前点距离最小的k个点;
    4. 确定前k个点所在类别的出现频率;
    5. 返回前k个点出现频率最高的类别作为当前点的预测分类;

    2,代码:

    from numpy import *
    import operator
    
    
    def createDataSet():
        group = array([[1.0, 1.1], [1.0, 1.0], [0, 0], [0, 0.1]])
        labels = ['A', 'A', 'B', 'B']
        return group, labels
    
    
    def classify0(inX, dataSet, labels, k):
        dataSetSize = dataSet.shape[0]    //计算行数,shape[1]时计算列数
        diffMat = tile(inX, (dataSetSize, 1)) - dataSet  //俩点之间的距离,坐标相减 tail(a,(b,c)) b为控制行数,c为控制列数
        sqDiffMat = diffMat ** 2   //平方
        sqDistances = sqDiffMat.sum(axis=1)   //axis=1为列相加,0时为行相加
        distances = sqDistances ** 0.5   //开根号
        sortedDistIndicies = distances.argsort()  //将元素按从小到大的顺序返回下标
        classCount = {}
        for i in range(k):
            voteIlabel = labels[sortedDistIndicies[i]]
            classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1   //get(k,v)方法,有就返回k,没有就返回v
        sortedClassCount = sorted(classCount.iteritems(),   
                                  key=operator.itemgetter(1), reverse=True)  //定义函数key获取classcount索引为1的序列,即取classcount序列的每个元素第2个值排序
        return sortedClassCount[0][0]  //调用索引为0可得出分类类别

    3,sort函数:

    sorted函数包括四个参数即:
    sorted(iterable,cmp,key,reverse)
    1.iterable表示可迭代对象,包括list,str,tuple,dict,file,以及自定义
    2.cmp表示自定的比较函数
    3.key对比的关键词
    4.reverse表示排列次序,true为降序排列,false为升序排列
    在给出的knn算法中应用如下:
    sortedclasscount=sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=ture)
          因为之前的代码我们得到了一个字典classcount,其包括了标签与计数,即classcount=['a':5,'b':3]
    由于classcount是字典,参见sorted第一个参数的定义,所以通过iteritems函数,转化为可迭代的对象。cmp这里没有定义,不解释。
          key定义为对比用的关键词,即排序的参照,knn算法是选择k中出现频率最高的那一个分类,所以对应classcount索引为1的数字,则通过key=operator.itemgetter(1),定义函数key获取classcount索引为1的序列。
         reverse=ture表示降序排列
    这样即通过sorted函数将字典classcount按照计数器次数从大到小排列出来了,只要调用索引为0即可得出分类类别

  • 相关阅读:
    Everything
    图片在下载过程中由模糊逐渐变清晰的技巧
    Windows下Critical Section、Event、Mutex、Semaphores区别
    二维Cookie操作(JS和ASP)
    ASP.net利用urlMappings重写URL路径(URL映射)
    GHOST (以硬盘为单位和以分区分区为单位还原)>个人观点:)
    简单计算器
    ASP操作COOKIE
    擦亮自己的眼睛去看SQLServer之谈谈锁机制
    SQL SERVER2008跟踪标志
  • 原文地址:https://www.cnblogs.com/huxinga/p/9428714.html
Copyright © 2011-2022 走看看