from numpy import *
import operator
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
def classify0(inX,dataSet,labels,k):
dataSetSize = dataSet.shape[0]
diffMat = tile(inX(dataSetSize,1)) - dataSet //将inX复制为4行,使inX成为与dataSet
//一样的4行一列矩阵,并减去dataSet,形
//成(Xa-Xb),(Ya-Yb)的形式
//平方(Xa-Xb),(Ya-Yb)
sqDiffMat = diffMat**2
//(Xa-Xb)^2+(Ya-Yb)^2,axis=1为矩阵元素在列方向上相加
sqDistances = sqDiffMat.sum(axis=1)
//对上一步结果开平方,得到欧氏距离
distances = sqDistances**0.5
//对元素从小到大排序,该方法返回的是元素的下角标
sortedDistIndicies = distances.argsort()
//定义空字典
classCount = {}
//在前k个元素内操作
for i in range(k):
//取每个元素对应的类别
voteIlabel = labels[sortedDistIndicies[i]]
//字典中每个item为[key:value]形式,统计key出现的次数,即value的值,每出现一次value+1
classCount[voteIlabel] = classCount.get(voteIlabel,0)+1
//将字典中的item按第二个元素的大小对元组进行排序,此处为从大到小
sortedClassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True)
//取最大值即为程序认为最可能正确的分类结果
return sortedClassCount[0][0]
k-近邻算法代码注释(一)
最新推荐文章于 2024-02-17 10:39:44 发布