K-近邻算法是分类数据最简单有效的算法,使用算法时必须有接近实际数据的训练样本数据。K-近邻算法必须保存全部数据集,如果数据集很大,必须使用大量的存储空间。必须对数据集中的每个数据计算距离值,实际使用非常耗时。
from numpy import *
import operator
构建数据集
def createDateSet():
group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]])
labels=['A','A','B','B']
return group,labels
K-近邻算法代码
inX用于分类的输入向量,dataSet输入训练样本集,labels标签,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={}
for i in range(k):
voteIlabel=labels[sortedDistIndicies[i]]
classCount[voteIlabel]=classCount.get(voteIlabel,0)+1
sortedClassCount = sorted(classCount.items(),
key=operator.itemgetter(1), reverse=True)
# 返回第一个元素(最高频率)标签key
return sortedClassCount[0][0]
group,labels=createDateSet()
print(classify0([0,0],group,labels,3))