1,KNN算法对未知类别属性的数据集中的每个点依次执行以下操作:

  1. 计算已知类别数据集中的点与当前点之间的距离;
  2. 按照距离递增排序;
  3. 选取与当前点距离最小的k个点;
  4. 确定前k个点所在类别的出现频率;
  5. 返回前k个点出现频率最高的类别作为当前点的预测分类;

2,代码:

from numpy import *
import operator def createDataSet():
group = array([[1.0, 1.1], [1.0, 1.0], [, ], [, 0.1]])
labels = ['A', 'A', 'B', 'B']
return group, labels def classify0(inX, dataSet, labels, k):
dataSetSize = dataSet.shape[] //计算行数,shape[1]时计算列数
diffMat = tile(inX, (dataSetSize, )) - dataSet //俩点之间的距离,坐标相减 tail(a,(b,c)) b为控制行数,c为控制列数
sqDiffMat = diffMat ** 2 //平方
sqDistances = sqDiffMat.sum(axis=) //axis=1为列相加,0时为行相加
distances = sqDistances ** 0.5 //开根号
sortedDistIndicies = distances.argsort() //将元素按从小到大的顺序返回下标
classCount = {}
for i in range(k):
voteIlabel = labels[sortedDistIndicies[i]]
classCount[voteIlabel] = classCount.get(voteIlabel, ) + 1 //get(k,v)方法,有就返回k,没有就返回v
sortedClassCount = sorted(classCount.iteritems(),
key=operator.itemgetter(), reverse=True) //定义函数key获取classcount索引为1的序列,即取classcount序列的每个元素第2个值排序
return sortedClassCount[][] //调用索引为0可得出分类类别

3,sort函数:

sorted函数包括四个参数即:
sorted(iterable,cmp,key,reverse)
1.iterable表示可迭代对象,包括list,str,tuple,dict,file,以及自定义
2.cmp表示自定的比较函数
3.key对比的关键词
4.reverse表示排列次序,true为降序排列,false为升序排列
在给出的knn算法中应用如下:
sortedclasscount=sorted(classcount.iteritems(),key=operator.itemgetter(1),reverse=ture)
      因为之前的代码我们得到了一个字典classcount,其包括了标签与计数,即classcount=['a':5,'b':3]
由于classcount是字典,参见sorted第一个参数的定义,所以通过iteritems函数,转化为可迭代的对象。cmp这里没有定义,不解释。
      key定义为对比用的关键词,即排序的参照,knn算法是选择k中出现频率最高的那一个分类,所以对应classcount索引为1的数字,则通过key=operator.itemgetter(1),定义函数key获取classcount索引为1的序列。
     reverse=ture表示降序排列
这样即通过sorted函数将字典classcount按照计数器次数从大到小排列出来了,只要调用索引为0即可得出分类类别

最新文章

  1. 常用linux手头命令
  2. jquery中ajax用return来返回值无效
  3. (实用篇)PHP中单引号与双引号的区别分析
  4. LeetCode Implement pow(x, n).
  5. 测量行业(RTK)相关的小知识总结
  6. HDU 2602 Bone Collector --01背包
  7. C#绘图双缓冲
  8. ajax 留言板
  9. firefox常用扩展、脚本
  10. EditText属性详解
  11. Unity NGUI实现技能CD效果
  12. Trie和Ternary Search Tree介绍
  13. SQL_Server 学习笔记(一)
  14. NOIP2016换教室
  15. 输入正整数n,求各位数字和
  16. centos7中bash: maven: 未找到命令... 解决办法
  17. Java中随机数生成的问题
  18. OutputStreamWriter与InputStreamReader(转换流)的编码解码
  19. Ribbon
  20. Practice1小学四则运算(改进)

热门文章

  1. 视频播放截图及简要文字介绍——Thunder团队
  2. c++反射概念-简单介绍
  3. Hadoop 版本 生态圈 MapReduce模型
  4. Windows网络编程系列教程之四:Select模型
  5. 3dContactPointAnnotationTool开发日志(二)
  6. centOS 6.5命令方式配置静态IP
  7. [CLR via C#]异常和状态管理
  8. 【Python】python动态类型
  9. 在Ubuntu系统下编译arcsim仿真器
  10. 【bzoj1634】[Usaco2007 Jan]Protecting the Flowers 护花 贪心