资讯详情

《机器学习实战》学习——kNN算法代码

实战学习机器学习——kNN算法

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  def classify0(inX, dataSet, labels, k):     #四个输入参数,inX输入向量用于分类;输入训练样本集;标签向量;k值。其中标签向量的元素数目与矩阵dataSet的行数相同     #array都点运算,matrix是矩阵运算     dataSetSize = dataSet.shape[0]#输出矩阵行数     diffMat = tile(inX, (dataSetSize,1)) - dataSet#先相减     sqDiffMat = diffMat**2#再平方     sqDistances = sqDiffMat.sum(axis=1)#再求和     distances = sqDistances**0.5#再开方     sortedDistIndicies = distances.argsort()#再排序     classCount = { 
        }#建立空字典     for i in range(k)
       
        :
        #距离最小的前三个 voteIlabel 
        = labels
        [sortedDistIndicies
        [i
        ]
        ]
        #得到每一个的标签值 classCount
        [voteIlabel
        ] 
        = classCount
        .get
        (voteIlabel
        ,
        0
        ) 
        + 
        1
        #记录标签值出现了几次,存在字典里 
        """ classCount.get(voteIlabel,0)返回字典classCount中voteIlabel元素对应的值,若无,则进行初始化,因为开始是空字典, #得到的第一个键没有值,所以得到的是默认值0,然后加一将其重新赋给这个键。接着查看第二个出现的标签值,如果跟上一个一样,那么 get的值就是1,此时再加一变成2;如果不一样,则重新得到一个键,并赋值为1.这样就达到了统计次数的目的 """ sortedClassCount 
        = 
        sorted
        (classCount
        .items
        (
        )
        ,key
        =operator
        .itemgetter
        (
        1
        )
        ,reverse
        =
        True
        ) 
        """ sorted(对象,排序值,reverse=True/False),将字典classCount分解为元组列表 若classCount = {‘A’:1,‘B’:2,‘C’:3},则分为 [‘A’,’B’,’C’] 与 [1, 2, 3]两组,items=([‘A’,’B’,’C’] ,[1, 2, 3]) operator.itemgetter(1)作用是读取元组items内的第2列(索引值为1),reverse=True降序排列 sorted返回值是对象按照要求重新排列之后的相同的类型,只是改了个数据 """ 
        return sortedClassCount
        [
        0
        ]
        [
        0
        ]
        #返回排列之后的元组的第一个元素中的第一个元素 
       

import numpy as np
k = np.matrix([[1, 2, 3, 4],
             [5, 6, 7, 8],
             [9, 10, 11, 12]])
print(np.shape(k))       # 输出(3,4)表示矩阵为3行4列
print(k.shape[0])        # shape[0]输出3,为矩阵的行数
print(k.shape[1])        # 同理shape[1]输出列数

  1. tile函数

tile(inx, (datasetsize, 1)):将矩阵inx纵向复制datasetsize份(成了datasetsize行),再横向复制一份。

#title(对象矩阵,([m,] k )):title函数是个复制函数,作用是将对象矩阵作为一个单元进行横向和纵向复制,形成一个m*k的矩阵。注意的是,当()只有一个数值时,只会横向复制。

2.sum函数

sqdiffmat.sum(axis=1):矩阵sqdiffmat的各行相加

sum(对象,axis=0/1)或者对象.sum(axis=0/1): axis=0代表对象的所有元素进行相加返回一个结果值;axis=1表示同行的元素相加,每行返回一个值,通常默认的,且不用写出来。

  1. argsort函数

distances.argsort():对distances进行从小到大排序,返回的是每个值在distances中的索引位置。如排序后得到[3,2,0,1],最小的是排序对象的索引号为3的元素。

  1. 关于数组numpy中的array和matrix在《机器学习实战》书中附录处有简单清楚的介绍。

标签: lb32lbm船舱液位传感器nmb悬臂梁传感器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台