K-近邻(KNN)算法
2024-09-21 13:07:03
1,KNN算法对未知类别属性的数据集中的每个点依次执行以下操作:
- 计算已知类别数据集中的点与当前点之间的距离;
- 按照距离递增排序;
- 选取与当前点距离最小的k个点;
- 确定前k个点所在类别的出现频率;
- 返回前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即可得出分类类别
最新文章
- 常用linux手头命令
- jquery中ajax用return来返回值无效
- (实用篇)PHP中单引号与双引号的区别分析
- LeetCode Implement pow(x, n).
- 测量行业(RTK)相关的小知识总结
- HDU 2602 Bone Collector --01背包
- C#绘图双缓冲
- ajax 留言板
- firefox常用扩展、脚本
- EditText属性详解
- Unity NGUI实现技能CD效果
- Trie和Ternary Search Tree介绍
- SQL_Server 学习笔记(一)
- NOIP2016换教室
- 输入正整数n,求各位数字和
- centos7中bash: maven: 未找到命令... 解决办法
- Java中随机数生成的问题
- OutputStreamWriter与InputStreamReader(转换流)的编码解码
- Ribbon
- Practice1小学四则运算(改进)
热门文章
- 视频播放截图及简要文字介绍——Thunder团队
- c++反射概念-简单介绍
- Hadoop 版本 生态圈 MapReduce模型
- Windows网络编程系列教程之四:Select模型
- 3dContactPointAnnotationTool开发日志(二)
- centOS 6.5命令方式配置静态IP
- [CLR via C#]异常和状态管理
- 【Python】python动态类型
- 在Ubuntu系统下编译arcsim仿真器
- 【bzoj1634】[Usaco2007 Jan]Protecting the Flowers 护花 贪心