zoukankan      html  css  js  c++  java
  • 机器学习实战学习笔记 一 k-近邻算法

    k-近邻算法很简单,这里就不赘述了,主要看一下python实现这个算法的一些细节。下面是书中给出的算法的具体实现。

    def clssify(inX,dataset,label,k):
        #计算距离
        datasetSize = dataset.shape[0]
        diffMat = tile(inX,(dataSize,1))-dataset
        sqdiffMat = diffMat ** 2
        distance = sqdiffMat.sum(axis = 1)
        sorteddistance = distance.argsort()
        labelcount = {}
        for i in range(k):
            label_index = label[sorteddistance[i]]
            labelcount[label_index] = 
        sortedlabel = sorted(labelcount.iteritems(),key = operator.itemgetlabelcount.get(label_index,0)+1ter(0),reverse = True)
        return sortedlabel[0][0]
    

      我学习python没多长时间,一句一句来学习这段代码,发现收获不小。首先来看第一句,dataset.shape[0]返回的是dataset这个array的行数。

    tile这个函数非常牛逼啊,我只说它在这个里面是什么意思,我们知道inX是个向量,而dataset是个矩阵,两者之间要进行相减的运算,需要把这个向量也补成一个和dataset有相同行数列数的矩阵,怎么个补法呢。这就要看tile()的第二个参数了,也就是上面的(datasetsize,1),这个参数的意思就是把inX补成有datasetsize行数的矩阵。

    假如inX是(1,2) datasetsize =3 那么经过tile()转换后产生了一个这样的矩阵([1,2],[1,2],[1,2])

    然后和dataset相减就是根据矩阵的减法进行的。接下来看sqdiffMat.sum(axis = 1)这句,假如sqdiffMat是([1,2],[0,1],[3,4])关注下axis这个参数,它影响了你对矩阵求和时候的顺序,axis=0是按照行求和,axis=1是按照列进行求和,因此这样的求和结果就是([4,7])。至于argsort()这个函数的作用很简单,就是把向量中每个元素进行排序,而它的结果是元素的索引形成的向量。例子如下:

    distance是这么个东西------([1,4,3])

    经过distance.argsort()之后的结果是([0,2,1])

    另外需要主意的一点是sorted()函数返回的是一个list。

  • 相关阅读:
    Jquery 总结的几种常用操作
    Mybatis 一对多
    HTML 子父窗口 iframe 超时 返回首页
    Struts 标签
    Spring + Mybatis 基于注解的事务
    机器学习实战-数据探索(变量变换、生成)
    机器学习实战-数据探索(变量变换、生成)
    Pandas matplotlib 无法显示中文 Ubuntu16.04
    Pandas matplotlib 无法显示中文 Ubuntu16.04
    Intel MKL FATAL ERROR: Cannot load libmkl_avx2.so or libmkl_def.so.
  • 原文地址:https://www.cnblogs.com/lianwl/p/3314964.html
Copyright © 2011-2022 走看看