机器学习实战 2.1 KNN

作者: 夹小欣 | 来源:发表于2017-10-27 10:32 被阅读12次

    knn的思想是:分别计算每一个测试样本和所有训练样本的特征距离,选取k个最近的训练样本,对他们的分类进行投票,k个样本中所属类别最多的,作为测试样本的类别
    numpy tile函数:A重复B次

    tile([1,2,3],(m,n)) #[1,2,3]重复m行n列
    ipdb> tile([1,2,3],(2,1))
    array([[1, 2, 3],
           [1, 2, 3]])
    

    python argsort()函数返回排序后的索引
    python dict.get(key, default=None),若不存在则返回default值
    python sorted可以自定义比较函数、多列比较,参考博客
    python operate.itemgetter(1,4) 返回值是函数,表示先比较第2列,再比较第5列
    np.array 的加减乘除是在元素一级

    #每次只能输入一个待测数据
    #多个待测数据只能用循环
    def knn(testX, trainX, labels, k):
    #距离用欧式距离
        x0_x1 = tile(testX,(trainX.shape[0],1))-trainX
        x0_x1_2 = x0_x1 ** 2
        x0_x1_2_sqrt = x0_x1_2 **0.5
    #选出最近的k个,从小到大排序的前k个
        k_index = x0_x1_2_sqrt.argsort()
    #投票机制,计算前k个中出现的labels次数,将当前值分类到label最多的当中。
        dic = {}
        for i in range(k):
            dic[lables[i]]=dic.get(lables[i],0)+1
        sortlables =  sorted(dic.iteritems(),key=operator.itemgetter(1),reverse=True)
    return sortlables[0][0]
    

    相关文章

      网友评论

        本文标题:机器学习实战 2.1 KNN

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