美文网首页
K-近邻算法(KNN)

K-近邻算法(KNN)

作者: 梦vctor | 来源:发表于2018-10-16 17:22 被阅读0次

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

    工作原理:存在一个样本数据集合,也称为训练样本集,并且样本集中每个数据都存在标签,即我们知道样本集中每一数据与所属分类的对应关系。输入没有标签的新数据后,将新数据的每个特征与样本集中数据对应的特征进行比较,然后算法提取样本集中特征最相似数据(最邻近)的分类标签。

    一般来说,只选择样本数据集中前k个最相似的数据,这就是k-邻近算法中k的出处,通常k是不大于20的整数。最后,选择k个最相似数据中出现次数最多的分类,作为新数据的分类。

    from numpy import *     #导入科学计算包numpy
    import operator     #运算符模块
    
    def createDataSet():    #创建数据集和标签
        group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
        labels=['A','A','B','B']    #label包含的元素个数等于group矩阵行数
        return group,labels
    
    def classify0(inX,dataSet,labels,k):
        dataSetSize=dataSet.shape[0]
        diffMat=tile(inX,(dataSetSize,1))-dataSet
        sqDiffMat=diffMat**2
        sqDistances=sqDiffMat.sum(axis=1)
        distances=sqDistances**0.5              #距离计算
        sortedDistIndicies=distances.argsort()
        classCount={}
        for i in range(k):
            voteIlabel=labels[sortedDistIndicies[i]]
            classCount[voteIlabel]=classCount.get(voteIlabel,0)+1       #选择距离最小的K个点
        sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)     #排序
        return sortedClassCount[0][0]
    

    Debug:AttributeError: module 'KNN' has no attribute 'classify0'
    python2和python3不兼容,将iteritems()改为items(),然后重启PyCharm
    结果:

    >>> import kNN
    Traceback (most recent call last):
     File "<stdin>", line 1, in <module>
    ModuleNotFoundError: No module named 'kNN'
    >>> import KNN
    >>> group,labels=KNN.createDataSet()
    >>> group
    array([[1. , 1.1],
          [1. , 1. ],
          [0. , 0. ],
          [0. , 0.1]])
    >>> labels
    ['A', 'A', 'B', 'B']
    >>> KNN.classify0([0,0],group,labels,3)
    'B'
    >>> KNN.classify0([1.1,0.5],group,labels,3)
    'A'
    

    相关文章

      网友评论

          本文标题:K-近邻算法(KNN)

          本文链接:https://www.haomeiwen.com/subject/pcmhzftx.html