机器学习实战之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)

 

posted @ 2018-11-19 14:56  Parallax  阅读(117)  评论(0编辑  收藏  举报