K-近邻算法

来源:互联网 发布:工行 大数据应用 编辑:程序博客网 时间:2024/06/07 21:09

文章结构

一、算法思想

二、代码及注解(代码来源于书中)


一、算法思想

       K-近邻算法是一种分类方法,其基本思想是:给定一堆  样本(特征) - 标签  数据集,对于新的只有特征的测试样本,选择有标签数据集中与测试样本距离最近的K个样本,然后取这K个样本中样本数量最多的标签作为测试样本的标签。

二、代码及注解(代码来源于书中)


2.1 kNN算法

def classify0(inX,dataset,labels,k):            #inX:用于分类的输入向量    dataSetSize = dataSet.shape[0]              #样本数据集的大小(个数),一行表示一个样本,不同列表示不同特征    diffMat = tile(inX,(dataSetSize,1)) - dataset         #将待测试样本复制,复制后的矩阵行列等于训练样本集,这样利用矩阵减法运算    sqDiffMat = diffMat ** 2                        #特征差值的平方    sqDistances = sqDiffMat.sum(axis=1)             #对特征差值的平方求和    distances = sqDistances ** 0.5    sortedDisrIndicies = distances.argsort()                                                              #按距离从小到大的是顺序排列,输出结果距离数据值对应的索引    classCount = {}                                    #用来存储前k个样本的索引和标签    for i in range(k):        voteIlabel = labels[sortedDisrIndicies[i]]       #找到上上面索引列表对应的标签        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1                                                      #如果classCount中有索引对应的标签,则该标签(字典键)对应的值+1        sortedClassCount = sorted(classCount.iteritems(),key = operator.itemgetter(1),reverse = True)                     #iteritems用于生成列表从而排序;itemgetter(1) 表示对列表按第1th属性排序;降序(某个标签个数)排列    return sortedClassCount[0][0]                       #返回数量最多的标签       
    
2.1.1 函数
(1)tile()  复制函数
     函数格式tile(A,reps)  // A待复制矩阵 ;reps:复制格式
(2)sum(axis=1)    //按第1轴求和(按列)
     sum(sxis=0)    //按第0轴求和(按行)
(3)argsort(x)    //将X中的元素从小到大排列,并返回元素对应的索引值
     argsort(-x)     //将X中的元素从大到小排列,并返回元素对应的索引
(4)dict.get(key, default=None)  //返回元胞键对应的值,如果元胞中没有相应的键,则返回默认值      
(5)iteritems         //将字典以列表的形式输出
原创粉丝点击