Python:K-近邻算法

来源:互联网 发布:英文小说推荐 知乎 编辑:程序博客网 时间:2024/05/20 06:56

-----------------------------------------------------------------------------------------------直接把注释全部去掉跑即可,每个方法都有说明-------------------------------------------------------------------------

#K-近邻算法

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;


'''

intX 目标:[1,1]
dataSet 参考值
labels 参考值 对于的目标值
k:前K值
欧氏距离算法
'''
def classify0(intX, dataSet, labels, k):
    #矩阵第一维度的长度

    dataSetSize  =dataSet.shape[0];

    #tile行重复intX,dataSetSize次,列0次
    diffMat = tile(intX, (dataSetSize, 1)) - dataSet;
    # 2的次方
    sqDiffMat = diffMat ** 2;
    #矩阵求和
    sqDistances =sqDiffMat.sum(axis=1);
    #开方
    distances = sqDistances ** 0.5;
    #argsort()函数是将x中的元素从小到大排列,提取其对应的index(索引)
    sortedDistIndicies = distances.argsort();
    classCount = {};
    for i in range(k):

      #获取的距离对于的参考值的目标值分类存在字典classCount
      voteIlabel = labels[sortedDistIndicies[i]];
      #get(voteIlabel, 0)获取不到voteIlabel就设置默认值为0
      classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
      '''
      参数解析:
      cmp:比较函数,比较什么参数由key决定。例如:cmp(e1, e2) 是具有两个参数的比较函数,返回值:负数(e1 < e2);0(e1 == e2);正数( e1 > e2)。
      key:用列表元素的某个属性或函数作为关键字。
      reverse:排序规则,可以选择True或者False。
      operator.itemgetter(1): 取对象的第1个域的值
      '''
      sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)
      pass

    return sortedClassCount[0][0];

-----------------------------------------------------------------------------------------------直接把注释全部去掉跑即可-------------------------------------------------------------------------

上面是理论知识,接下来有时间会更新实战

原创粉丝点击