KNN算法及python问题

来源:互联网 发布:怎样安装办公软件 编辑:程序博客网 时间:2024/05/16 12:45

机器学习实战之KNN

创造数据集

from numpy import *import operatordef createDataSet():    group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])    labels = ['A','A','B','B']return group,labels

创造一个4*2的array,数值可理解为坐标,label就是对应分类

python时间

tile

tile的作用是把一个矩阵复制出一个新的矩阵,如A是一个矩阵

tile(A,1) = Atile(A,2,3)就是把A作为一个元素,复制成新的2*3的矩阵,每一个元素就是一个A

shape

shape是获取矩阵的size的函数

A = [1,2,3;4,5,6;7,8,9]A.shape = (3,3)A.shape[0] = A.shape[1] = A.shape[2] = 3

argsort

argsort是一个排序后获取下标的函数

A = [5,4,3,1,2]B = A.argsort() = [3,4,2,1,0]

itemgetter

itemgetter是operator的一个函数

b=operator.itemgetter(n-1)b成为获取对象第n个元素的函数A = [1,2,3]b(A) = 2

axis

axis是表示矩阵的行列的

a = [1,2,3; 4,5,6]axis默认为0,表示列a.sum() = 21a.sum(axis=0) = [5,7,9] 列求和a.sum(axis=1) = [6,15]  行求和

dict.get

python中的字典dict,获取对应值有两种方式1. key2 = dict[key1] ,但是假如字典不存在key1会发生错误2. key2 = dict.get(key1,default) 当不存在key1,返回默认值default

完整代码及注释

py import *import operatordef 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是待分类的数据,dataSet是已知的数据集,labels是已知数据集的分类,k是算法抽取的最相邻点的数量    dataSetSize = dataSet.shape[0]        #获取dataSet的点的个数    diffMat = tile(inX,(dataSetSize,1)) - dataSet        #tile函数把待分类点组成一个n维向量,再和原有数据集每个点作差        #相当于,得到(x-x1),(x-x2),(x-x3)···    sqDiffMat = diffMat ** 2        #(x-x1)^2 ···    sqDistances = sqDiffMat.sum(axis=1)        #各个维度的差的平方求和    distances = sqDistances ** 0.5        #和开方最终得到欧式距离    sortedDistIndicies = distances.argsort()        #根据求得的距离进行排序,并得到对应的数据集的下标    classCount = {}        #新建字典,放置距离小的数据的标签及其对应数量    for i in range(k):        #放置距离小的前K个点        voteIlabel = labels[sortedDistIndicies[i]]            #根据下标得到当前这个数据点的label        classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1            #字典中label对应值+1    sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)        #根据字典的key2进行排序        sorted classCount    return sortedClassCount[0][0]        #排序产生的是一个列表,列表的元素是一个tuple        #返回出现最多的标签,也就是最终分类结果
原创粉丝点击