本博文的内容主要是在自学《Machine Learning in Action》的中文版《机器学习实战》的小结,原书中对调用的一些模块的函数并没有做出过多的解释,本文进行了总结和补充。
K-近邻算法就是采用测量不同特征值之间的距离进行分类。
距离采用欧式距离计算公式,计算两个向量点xA和xB之间的距离:
from numpy import *
import operator
def creatDataset():
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(intX,dataSet,labels,k):
#1.1获得dataSet矩阵行数
dataSetSize=dataSet.shape[0]
#1.1tile函数通过给定参数构建数组
diffMat=tile(intX,(dataSetSize,1))-dataSet
#1.1数组中每个元素进行平方
sqDiffMat=diffMat ** 2
#1.1对多维数组第一轴进行相加求和
sqDistances=sqDiffMat.sum(axis=1)
distances=sqDistances ** 0.5 #1.1开平方
#2.1返回排序数组的索引
sortedDistIndicies=distances.argsort()
classCount={}
#3.1
for i in range(k):
#4.1获得从小到大排序后依次的标签
voteIlabel = labels[sortedDistIndicies[i]]
#4.2记录前K个元素中不同标签出现的次数,classCount应为 字典类型
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1
#4.3按标签出现次数从多到少进行排序
sortedClassCount = sorted(classCount.iteritems(),key=operator.itemgetter(1),reverse = True)
#5
return sortedClassCount[0][0]
如果输入参数intX=[0,0],则该程序给出的分类结果因该为B