机器学习算法——K邻近算法
2015-09-29 16:37
363 查看
#-*-coding=utf-8-*- __author__ = 'whf' from numpy import * import operator def classify (inx,dataSet,labels,k): #得到数据集的行数 shape方法用来得到矩阵或数组的维数 dataSetSize = dataSet.shape[0] #tile:numpy中的函数。tile将原来的一个数组,扩充成了dataSetSize行1列的数组。diffMat得到了目标与训练数值之间的差值。 diffMat = tile(inx,(dataSetSize,1))-dataSet #计算差值的平方 sqDiffMat = diffMat**2 #计算差值平方和 sqDistances = sqDiffMat.sum(axis = 1) #计算距离 distances = sqDistances**0.5 #得到排序后坐标的序号 argsort方法得到矩阵中每个元素的排序序号 sortedDistIndicies = distances.argsort() classcount = {} for i in range(k): #找到前k个距离最近的坐标的标签 voteIlabel = labels[sortedDistIndicies[i]] #在字典中设置键值对: 标签:出现的次数 classcount [voteIlabel] = classcount.get(voteIlabel,0)+1 #如果voteIlable标签在classcount中就得到它的值加1否则就是0+1 # 对字典中的类别出现次数进行排序,classCount中存储的事 key-value,其中key就是label,value就是出现的次数 # 所以key=operator.itemgetter(1)选中的是value,也就是对次数进行排序 reverse = True表示降序排列 sortedClassCount = sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=True) return sortedClassCount[0][0] group = array([[1.0,1.1],[1.0,1.0],[0,0],[0,0.1]]) labels = ['A','A','B','B'] print classify([0.1,0.1],group,labels,3)
相关文章推荐
- 八大排序算法
- IMAP Tools
- 中序线索二叉树的java版本
- 第二篇 :微信公众平台开发实战Java版之开启开发者模式,接入微信公众平台开发
- ios上 更改 状态栏(UIStatusBar)的颜色,你值得一看、收藏
- [转载]MAC 下将libpomelo连接到cocos2d-x
- Oracle: Network Waits
- 正则表达式判断金额
- 基于AStar算法的RCP布线优化
- DES加密解密算法
- CentOS7下Firewall防火墙配置用法详解
- RobotFrameWork(1) 关键字驱动测试框架
- 看铜梁视窗是怎么无人化运行的【二】
- Linux基础
- 个人博客作业Week2
- ZOJ 3231 Apple Transportation(上下界费用流)
- [C/C++标准库]_[初级]_[使用算法库函数时需要注意自定义BinaryPredicate和UnaryPredicate]
- java 文件上传FTP
- [C/C++标准库]_[初级]_[使用算法库函数时需要注意自定义BinaryPredicate和UnaryPredicate]
- linux操作 常用命令