K-近邻算法

文章结构

一、算法思想

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


一、算法思想

       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         //将字典以列表的形式输出
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值