机器学习实战第二章kNN代码清单2-1详细注释
2018-01-16 21:02
197 查看
# -*- coding: cp936 -*- from numpy import * import operator #创建数据集 def createDataSet(): group=array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) labels=['A','A','B','B'] return group,labels #inX:用于分类的输入向量 #dataSet:训练样本集 #labels:标签向量 #k:用于选择最近邻居的数目 def classify0(inX,dataSet,labels,k): dataSetSize=dataSet.shape[0]#shape函数的功能是查看矩阵或数组的维数,也就是说知道有几个训练数据,所以shape[0]表示得到数组的行数,它在这里是4 diffMat=tile(inX,(dataSetSize,1))-dataSet#tile()函数是numpy模块中的函数,它将原来的一个数组,扩充成了4个一样的数组。diffMat得到了目标与训练数值之间的差值 sqDiffMat=diffMat**2#diffMat中的每一个元素(上一行代码计算出来的目标数据集与每个训练数据集的各个特征值(这里只有两个)之间的差值)进行平方 sqDistance=sqDiffMat.sum(axis=1)#把上一行代码中的平方项按’列‘(?sqDiffMat数组的第一列加第二列)进行相加 distance=sqDistance**0.5#开根号,计算出距离啦! sortedDistIndicies=distance.argsort()#升序排列,得到一个升序排列的矩阵,argsort函数返回的是数组值从小到大的索引值 #下面进行选择距离最小的k个点 classCount={}#这是一个字典,用于计数,即用于存储不同标签(labels)出现的次数 for i in range(k): voteIlabel=labels[sortedDistIndicies[i]] #从前面已经排好序的矩阵中选择距离最小的k个点并获得这k个点所对应的标签,也就是前k个点,k是你在使用时具体输入的,书上k是3,所以就提炼出了前3个训练数据集的标签 #sortedDistIndicies[i]是索引值,正好与label的值的索引是对应的 classCount[voteIlabel]=classCount.get(voteIlabel,0)+1#classCount[voteIlabel]是个变量名,别多想,然后voteIlabel是前k个,也就是距离最小的k个训练数据集所对应的标签(labels),现在利用dict.get(key, default=None)函数来统计这k个的标签出现的次数,key就是dict中的键voteIlabel,如果不存在则返回一个0并存入dict(这里的dict就是classCount),如果存在则读取(get)当前值(标签),并在classCount中加1 #最后得到的classCount{}应该是类似这种样子的:classCount{'A':3,'B':0} #排序 sortedClassCount=sorted(classCount.iteritems(),#这里使用了sorted()函数sorted(iterable, cmp=None, key=None, reverse=False),iteritems()将classCount这个dict分解为元组列表(两个),(一个list包含两个tuple):[('B', 2), ('A', 1)] key=operator.itemgetter(1),reverse=True)#operator.itemgetter(1)表示按照第二个元素的次序对元组进行排序,因为编程语言的index(索引)从0开始 return sortedClassCount[0][0]#返回出现次数最多的的标签,这也就是最终的分类(label)结果
相关文章推荐
- KNN算法Python实现(代码来自机器学习实战)及注释
- 机器学习实战+统计学习方法之理解KNN(1.实战代码的详细走读和解析)
- 第二章kNN完整代码注释
- 学习笔记——《机器学习实战》KNN算法实现 约会网站测试,手写数字识别,代码,注释,错误修改
- 机器学习实战 第二章KNN(1)python代码及注释
- Android项目 手机安全卫士(代码最全,注释最详细)之十一 应用程序的主界面
- 《机器学习实战》k-近邻算法概述-程序清单详解kNN.py(未完待续)
- JAVA连接Oracle数据库实代码+详细注释
- 传智博客佟老师jqurey学习笔记,以及例子代码详细注释。
- JAVA连接Oracle数据库实代码+详细注释
- Android项目 手机安全卫士(代码最全,注释最详细)之十 应用程序更新的签名问题
- tensorflow:fully_connected_feed.py代码详细中文注释
- 决策树ID3算法python实现代码及详细注释
- 根据Merge Sort原理, 自己实现的归并排序算法+详细注释+代码(C#,C/C++) [分享]
- hdu 1013 过山车 匈牙利算法(代码+详细注释)
- Matlab蚁群算法解决TSP问题代码超详细注释
- 机器学习代码清单2-5注释
- KMP的原理和代码实现(详细注释|参考多个博客总结|可作为模板)
- 驱动之路五------linux块设备驱动代码详细注释
- Objective-C 【电商APP应用代码-系统分析-详细注释-代码实现】