#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算法实现代码实现借鉴了大牛博客,并加入了详细的代码注释
最新推荐文章于 2025-09-03 10:33:40 发布
5040

被折叠的 条评论
为什么被折叠?



