机器学习实战之KNN分类器实现
1 # -*- coding: UTF-8 -*- 2 import numpy as np 3 import operator 4 5 def createDataSet(): 6 #四组二维特征 7 group = np.array([[1,101],[5,89],[108,5],[115,8]]) 8 #四组特征的标签 9 labels = ['爱情片','爱情片','动作片','动作片'] 10 return group, labels 11 12 13 def classify0(test, group, labels, k): 14 #得到作差后的新数组 15 diffmat=test-group 16 sqdiffmat=diffmat**2 17 #sum()所有元素相加,sum(0)所有列相加得到新的列表,sum(1)所有行相加 18 dis1=sqdiffmat.sum(axis=1) 19 dis=dis1**0.5 20 #返回一个列表的顺序排序索引 21 sorted_disindex=dis.argsort() 22 23 classCount={} #创建空字典 24 for i in range(k): 25 #取出前k个元素的类别 26 votelabel = labels[sorted_disindex[i]] 27 #dict.get(key,default=None),字典的get()方法,返回指定键的值,如果值不在字典中返回默认值。 28 #计算类别次 29 classCount[votelabel]=classCount.get(votelabel,0) + 1 30 # #key=operator.itemgetter(1)根据字典的值进行排序 31 #key=operator.itemgetter(0)根据字典的键进行排序 32 #reverse降序排序字典 33 sortedclassCount = sorted(classCount.items(),key=operator.itemgetter(1),reverse=True) 34 return sortedclassCount[0][0] 35 36 37 if __name__ == '__main__': 38 #创建数据集 39 group, labels = createDataSet() 40 #测试集 41 test = [101,20] 42 #kNN分类 43 test_class = classify0(test, group, labels, 3) 44 #打印分类结果 45 print(test_class)