【机器学习】k近邻算法
2021-05-01 01:28
标签:label int created port 字典 k近邻 shape reverse 索引 k临近算法(解决分类问题): 已知数据集,以及该数据对应类型 给出一个数据x,在已知数据集中选择最接近x的k条数据,根据这k条数据的类型判断x的类型 具体实现: 【机器学习】k近邻算法 标签:label int created port 字典 k近邻 shape reverse 索引 原文地址:https://www.cnblogs.com/LPworld/p/13222313.htmlfrom 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,lables,k):
dataSetSize=dataSet.shape[0] #dataset是4*2的二维数组,shape[0]=4,shape[1]=2
diffMat=tile(inX,(dataSetSize,1))-dataSet #tile(inX,(dataSetSize,1))=[inX,inX,inX,inX],1代表每行inX重复一次
sqDiffMat=diffMat**2 #数组中每个值都**2
sqDistances=sqDiffMat.sum(axis=1) #sum(axis=?)第?个维度的相加,可理解为第?层[]里的元素相加
distances=sqDistances**0.5 #数组中每个值都**0.5
sortedDistIndicies=distances.argsort() #argsort()从小到大返回索引
classCount={} #花括号{}:代表dict字典数据类型
for i in range(k):
voteIlabel=labels[sortedDistIndicies[i]] #前i小的类型
classCount[voteIlabel]=classCount.get(voteIlabel,0)+1 #dict.get(key, default=None) key找不到返回default
sortedClassCount=sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) #按字典第2个值排序,True表示从大到小排序
return sortedClassCount[0][0] #{(B,2),(A,1)} [0][0]代表B
group,labels=createDataSet()
print(classify0([0,0],group,labels,3))