<span style="font-size:12px;">from numpy import *
import operator
def classify0(inX,dataSet,labels,k): #inX:用于分类的输入向量;dataSet:输入的训练样本集;labels:标签向量(labels的数目与dataSet行数相同);k:选择的最近邻居的数目
dataSetSize=dataSet.shape[0] #dataSet.shape[0]:读取dataSet矩阵第一维度的长度
diffMat=tile(inX,(dataSetSize,1))-dataSet #tile():重复某个数组,这里(dataSetSize,1),是一个元组让inX这个数组重复dataSetSize个变为一个矩阵 分别减去dataSet的
sqDiffMat=diffMat**2
sqDistances=sqDiffMat.sum(axis=1) #sum(axis=1)将矩阵的每一行向量相加
distances=sqDistances**0.5 #计算距离
sortedDistIndicies=distances.argsort() #argsort()返回数组中从小到大的索引值,确定前k个距离的元素所在的分类
classCount={}
for i in range(k):
voteIlabel=labels[sortedDistIndicies[i]] #输入k总是正整数,sorted()产生一个新的列表,存放前k个距离元素的分类 放到vootellabel中
classCount[voteIlabel]=classCount.get(voteIlabel,0)+1#在classCount字典中存放这个分类数组,再查看字典中是否有相同的分类,没有返回0,有就返回那个类+1
机器学习实战笔记(二):K邻近算法
最新推荐文章于 2024-08-11 22:50:26 发布