#coding ='utf-8' import numpy as np import operator def Knn_Classify(testdta, traindata, labels, k): datasize = traindata.shape[0] diffMat = np.tile(testdta, (datasize, 1)) - traindata sqDiff = diffMat ** 2 sqDistance = sqDiff.sum(axis=1) distance = sqDistance ** 0.5 #计算欧氏距离 sorteddiatcaneindex = distance.argsort() #排序并返回索引 classcount = {} #选择距离最近的K个值 for i in range (k): votelabel = labels[sorteddiatcaneindex[i]] #根据索引取最近的几个值 classcount[votelabel] = classcount.get(votelabel, 0) + 1 #根据字典来统计每个类有多少个值 sortedclasscount = sorted(classcount.items(), key=operator.itemgetter(1), reverse=True) #排序 return sortedclasscount[0][0] #选出个数最多的类别返回 #定义一个生成“训练样本集”的函数,包含特征和分类信息 def createDataSet(): group=np.array([[1, 1.1], [1, 1], [0, 0], [0, 0.1], [1, 1.2]]) labels=['A', 'A', 'B', 'B', 'A'] return group,labels #主程序入口 #缺点是要计算测试数据与每一个训练数据的距离,如果数据量很大或者需要处理的维度高计算量就很庞大了 if __name__=='__main__': testdata = [2, 2] group, labels = createDataSet() out = Knn_Classify(testdata, group, labels, 2) print(out)
KNN算法实现代码实现借鉴了大牛博客,并加入了详细的代码注释
最新推荐文章于 2022-10-27 15:39:43 发布