K最近邻(k-Nearest Neighbor,KNN)分类算法可以说是最简单的机器学习算法了。它采用测量不同特征值之间的距离方法进行分类。它的思想很简单:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。
其算法描述如下:
1)计算已知类别数据集中的点与当前点之间的距离;
2)按照距离递增次序排序;
3)选取与当前点距离最小的k个点;
4)确定前k个点所在类别的出现频率;
5)返回前k个点出现频率最高的类别作为当前点的预测分类。
对于机器学习而已,Python需要额外安装三件宝,分别是Numpy,scipy和Matplotlib。前两者用于数值计算,后者用于画图。安装很简单,直接到各自的官网下载回来安装即可。安装程序会自动搜索我们的python版本和目录,然后安装到python支持的搜索路径下。反正就python和这三个插件都默认安装就没问题了。
一般实现一个算法后,我们需要先用一个很小的数据库来测试它的正确性,否则一下子给个大数据给它,它也很难消化,而且还不利于我们分析代码的有效性。
首先,我们新建一个kNN.py脚本文件,文件里面包含两个函数,一个用来生成小数据库,一个实现kNN分类算法。代码如下:
from numpy import * import operator def createDataSet(): group=array([[1.0,0.9],[1.0,1.0],[0.1,0.2],[0.0,0.1]]) labels=[‘A‘,‘A‘,‘B‘,‘B‘] return group,labels #[1.2,1.0] def kNNClassify(newInput,dataset,labels,k): numSamples=dataset.shape[0] diff=tile(newInput,(numSamples,1))-dataset squaredDiff=diff**2 squaredDist=sum(squaredDiff,axis=1) distance=squaredDist**0.5 sortedDistIndices=argsort(distance) print sortedDistIndices classCount={} for i in xrange(k): for j in xrange(4): if sortedDistIndices[j]==i: voteLabel=labels[j] print voteLabel classCount[voteLabel]=classCount.get(voteLabel,0)+1
然后我们在命令行中这样测试即可:
import kNN from numpy import * dataSet,labels=kNN.createDataSet() testX=array([1.2,1.0]) k=3 kNN.kNNClassify(testX,dataSet,labels,3)
http://blog.csdn.net/zouxy09/article/details/16955347#reply
原文:http://www.cnblogs.com/lcbg/p/6491900.html