机器学习实战笔记一_Python3

程序清单2-1

个人程序注释+Python3 部分代码改造(针对iteritems只支持python2的情况)

[html]  view plain  copy
  1. from  numpy import *  
  2. import operator#运算符模块  
  3.   
  4. def createDataSet():  
  5.     group = array([[1.0,1.1],[1.0,1.0],[0,0],[0, 0.1]])  
  6.     labels = ['A','A','B','B']  
  7.     return group,labels  
  8.   
  9. group,labels=createDataSet()  
  10.   
  11. def classify0(inX, dataSet, labels, k): #inX: 待测试数据 ;  dataSet: 训练样本集  
  12.     dataSetSize = dataSet.shape[0]      #to get the rows of the matrix  
  13.     # to get the Xi-Yi of the dataSet  
  14.     diffMat = tile(inX, (dataSetSize,1)) - dataSet      #a=[1 2],b=[2 3];tile(a,b) to generate 2*3 matrix when  
  15.                                                         #the element all is a [1 2]  
  16.     sqDiffMat = diffMat**2  
  17.     sqDistances = sqDiffMat.sum(axis=1)         #使每行的元素相加,得到测试样本与各训练样本distance**2  
  18.                                                 #axis=0,按列相加;axis=1,按行相加;  
  19.     distances = sqDistances**0.5  
  20.     sortedDistIndicies = distances.argsort()    #将distance中的元素从小到大排列,  
  21.                                                 # 提取其对应的index(索引),然后输出到 sortedDistIndicies  
  22.    #声明一个dict:{key:value1,key2:value2}  
  23.     classCount={}  
  24.     for i in range(k):  
  25.         voteIlabel = labels[sortedDistIndicies[i]]  
  26.         #classCount= {'B': 2, 'A': 1},初始化后,classCount每得到一个相同的voteIlabel,就+1  
  27.         classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1       #当我们获取字典里的值的时候,一个是通过  
  28.                                                                         # 键值对,即dict['key'],另一个就是dict.get()方法  
  29.                                                                         # dict.get(voteIlabel,0) = 0, 此处0 to be initiated,  
  30.                                                                         #  之后就没有作用了。  
  31.     #items方法是可以将字典中的所有项,以列表方式返回。 iteritems方法与items方法相比作用大致相同,只是它的返回值不是列表,而是一个迭代器  
  32.     #Python3 中没有iteritems函数,需要用values()代替,并用list转为列表  
  33.     # sortedClassCount = sorted((key_label, value_num), key=operator.itemgetter(1), reverse=True)  
  34.     #python3中无法使用iteritems,需要对上面这句话改造,我们通过得到两个list,得到出现频率最高的label  
  35.     key_label=list(classCount.keys())  
  36.     value_num=list(classCount.values())  
  37.     #label出现频率由小到大排列,并返回索引index  
  38.     sortedvalue_num_indicies = argsort(value_num)  
  39.     #返回频率最大的label  
  40.     return key_label[len(sortedvalue_num_indicies)-1]  
[html]  view plain  copy
  1. group,labels = createDataSet()  
  2. a=classify0([0,0], group,labels,3)  
  3. print(a)  

编辑运行,得'A'


##############################################################

转自:https://blog.csdn.net/shunquanlan9446/article/details/79725964

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值