from numpy import *
import operator
from os import listdir
def classify0(inX, dataSet, labels, k): #inx 是输入的数据杭矩阵,dateset是已经知道标签的数据集,lables是该标签,k是距离最精需要比较的个数
dataSetSize = dataSet.shape[0] #获取训练数据的个数,在这里也是行数
diffMat = tile(inX, (dataSetSize,1)) - dataSet #将inx复制了datesetsize行,与训练矩阵相-
sqDiffMat = diffMat**2 #将diffmat矩阵中的每个数平方
sqDistances = sqDiffMat.sum(axis=1) #axis=1,将各自行中的数据求和,得到多行一列矩阵
distances = sqDistances**0.5
sortedDistIndicies = distances.argsort() #从小到大排序,返回的是他们的索引
classCount={} #字典,key为v哦忒喇叭了,值为出现的次数
for i in range(k): #统计前k个距离最近的数据,统计相应标签出现的频次,并返回标签频次最高的训练数据的标签
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1#.get()函数当voteilable存在时,返回他的值,不存在时返回默认的0
sortedClassCount = sorted(classCount.iteritems(), key=operator.itemgetter(1), reverse=True)#key=1,以字典的值降序排列
return sortedClassCount[0][0]
机器学习-KNN算法代码详解
最新推荐文章于 2024-05-09 19:20:18 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)