K-近邻算法

对于未知类别属性的数据集中的每个点依次执行一下操作:

(1)计算已知类别中的点与当前点的距离

(2)按照距离递增的次序进行排序

(3)选取与当前点距离最小的K个点

(4)确定前K个点所在类别出现的频率

(5)返回前K个点出现频率最高的类别作为当前预测的分类

基本的算法实现:

 1 from numpy import *
 2 import operator
 3 
 4 def createDataSet():
 5     group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
 6     labels=['A','A','B','B']
 7     return group,labels
 8 
 9 
10 def classify0(inx,dataSet,labels,k):
11     dataSetSize=dataSet.shape[0]
12 
13     diffMat=tile(inx,(dataSetSize,1))-dataSet
14     sqDiffMat=diffMat**2
15     sqDistances=sqDiffMat.sum(axis=1)
16     distance=sqDistances**0.5
17     sortedDisIndicies=distance.argsort()
18     classCount={}
19 
20     for i in range(k):
21         voteIlabel=labels[sortedDisIndicies[i]]
22         classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
23     sortedClassCount=sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse=True)
24     return sortedClassCount[0][0]
View Code

classify0()输入:用于分类的输入向量inx,输入的训练样本集dataSet,标签向量labels,选择最近邻居的数目k

关于sorted:http://www.cnblogs.com/65702708/archive/2010/09/14/1826362.html

归一化数值:

newValue=(oldValue-minVals)/(maxValues-minValues)

原文地址:https://www.cnblogs.com/wolf940509/p/6354175.html