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

来源:互联网 发布:万网域名注册白金词 编辑:程序博客网 时间:2024/05/17 04:21

因为python刚入门,所以很多不会的,一边学习一边记录机器学习上的代码。
numpy库tile()函数: 可以在各个维度重复array。

>>>from numpy import tile>>>> tile([1,2],2)//x轴打印两遍array([1, 2, 1, 2])>>>tile([1,2],(2,1))//y轴两遍,x轴一遍array([[1, 2],       [1, 2]])>>> tile([1,2],(2,2,3))array([[[1, 2, 1, 2, 1, 2],        [1, 2, 1, 2, 1, 2]],       [[1, 2, 1, 2, 1, 2],        [1, 2, 1, 2, 1, 2]]])

shape[0]返回矩阵第一维度长度。

python中sum函数的用法
用于相加:

>>> L=[1,2,3,4,5]>>> sum(L)15>>> sum(L,1)16>>> sum(L,-5)0

python中numpy.sum的用法

>>> from numpy import *>>> import numpy as mp>>> mp=array([[0,1,2],[2,3,4]])>>> mparray([[0, 1, 2],       [2, 3, 4]])>>> mp.sum(axis=1)//axis=1 表示行相加array([3, 9])>>> mp.sum(axis=0)//axis=0 表示列相加array([2, 4, 6])

def classify0(inX,dataSet,labels,k):    dataSetSize=dataSet.shape[0]#获取第一维度的长度    diffMat=tile(inX,(dataSetSize,1))-dataSet#求inX和dataSet之间的距离    sqDiffMat=diffMat**2#平方    sqDistances=sqDiffMat.sum(axis=1)#第一列相加    distances=sqDistances**0.5#开方    sortedDistIndicies=distances.agsort()#agsort是排序,将元素从小到大排序并返回下标,比如([3,2,1])返回的下标是([2,1,0])    classCount={}    for i in range(k):        voteIlabel=labels[sortedDistIndicies[i]]        classCount[voteIlabel]=classCount.get(voteIlabel,0)+1#get是字典中的用法,如果不存在就返回后面的值(0),这行代码的意思就是算离目标点距离最近的k个点的类别,这个点是哪个类别哪个类别就加1,选择距离最近的k个点sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)#key=operator.itemgetter(1)的意思是按照字典里的第一个排序,{A:1,B:2},要按照第1个(AB是第0个),即‘1’‘2’排序。reverse=True是降序排序return sortedClassCount[0][0]//返回距离最近的点

这里写图片描述