1:算法简单描述
给定训练数据样本和标签,对于某测试的一个样本数据,选择距离其最近的k个训练样本,这k个训练样本中所属类别最多的类即为该测试样本的预测标签。简称kNN。通常k是不大于20的整数,这里的距离一般是欧式距离。
2:python代码实现
创建一个kNN.py文件,将核心代码放在里面了。
(1) 创建数据
#创造数据集
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
(2) 构照kNN分类器
#第一个kNN分类器 inX-测试数据 dataSet-样本数据 labels-标签 k-邻近的k个样本
def classify0(inX,dataSet, labels, k):
#计算距离
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 = {}
#选择距离最小的k个点
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0)+1
#排序
sortedClassCount = sorted(classCount.iteritems(), key = operator.itemgetter(1),reverse = True)
return sortedClassCount[0][0]
代码讲解:(a)tile函数 tile(inX, i);扩展长度 tile(inX, (i,j)) ;i是扩展个数,j是扩展长度。如:
(b) python代码路径,需要导入os文件,os.getcwd()显示当前目录,os.chdir(‘’)改变目录,listdir()显示当前目录的所有文件。此外如果修改了当前.py文件,需要在python shell中重新加载该py文件(reload(kNN.py)),以确保更新的内容可以生效,否则python将继续使用上次加载的kNN模块。如: