k-近邻算法 python实现
必要的注释已经写在code里面了;
import operator from numpy import* def init(): grp=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) lab=['A','A','B','B'] return grp,lab def Classify(inX,dataset,lab,k): # 用于分类的向量inX;数据集dataset;属性向量lab;k近邻 datasize=dataset.shape[0]# 行大小 difmt=tile(inX,(datasize,1))-dataset # tile: 将inX复制成一个 行大小为datasize,列大小为1的矩阵 ######------ 计算欧几里得距离 ------####### sqrdif=difmt ** 2 sqrdist=sqrdif.sum(axis=1) distance=sqrdist** 0.5 ########################################## sortedDisIndex=distance.argsort() # 排序后获得索引值 classcnt={} for i in range(k):# 取前k个 vtlab=lab[sortedDisIndex[i]] classcnt[vtlab]=classcnt.get(vtlab,0)+1 sortedClasscnt=sorted(classcnt.items(),key=operator.itemgetter(1),reverse=True) # sorted:itemgetter(1)按照第二关键字排序,即按照个数从大到小排序(因为reverse=True) return sortedClasscnt[0][0] grp,lab=init() ans=Classify([0,0],grp,lab,3) print(ans)
EPFL - Fighting