K-邻近算法
来源:互联网 发布:09外设淘宝店地址 编辑:程序博客网 时间:2024/04/18 13:11
一.k-邻近算法概述
k近邻算法(KDD)采用测量不同特征值之间的距离方法进行分类。
优点:精度高、对异常值不敏感、无数据输入假定
缺点:计算复杂度高、空间复杂度高
适用数据范围:数值型和标称型。
k近邻法模型采用基于特征空间的划分,由距离度量、k值选择、分类决策规则决定。
距离度量:两个实例点相似程度的反映。可以使用欧式距离或者其他距离(Manhattan distance、Minkowski distance)
k值选择:k值对算法产生重大影响,k小,过拟合;k大,模型过于简单。(考虑k=1和k=N两种极端情况)
二.KNN算法
1.伪代码
对未知类编属性的数据集中每个点依次执行一下操作:
(1)计算已知类别数据集中点与当前点之间的距离(采用欧式距离公式:)
(2)按照距离递增次序排列
(3)选取与当前点距离最小的k个点
(4)确定前k个点所在类别出现的频率
(5)返回前k个点出现频率最高的类别作为当前点的预测分类。
2.python版本KDD
环境:win7+python3.4+NumPy函数库
下载numpy地址:http://sourceforge.net/projects/numpy/files/
程序:
def classify(inX,dataSet,labels,k): dataSetSize = dataSet.shap[0]; diffMat = tile(inX,(dataSet,1)) -dataSet #tile函数:在inX列上方重复dataSetSize次,行1次 sqDiffMat = diffMat**2 # **幂运算符 sqDistances = sqDiffMat.sum(axis=1) # sum(axis=1)表示将sqDiffMat每一行相加 distances = sqDistances**0.5 sortedDistIndicies = distances.argsort() #argsort()函数返回值为升序下标值,并非值 classCount={} for i in range(k): voteIlabel = labels[sortedDistIndicies[i]] classCount[voteIlabel] = classCount.get(voteIlabel,0) + 1 #get函数找到key为voteIlabel的,如果没有,则赋值为0 sortClassCount = sorted(classCount.iteritems(), key=operation.itemgetter(1),reverse=True) #iteritems()返回迭代器,key定义排序标准,True:升序 return sortClassCount[0][0];
3.测试分类器
分类器错误率 = 分类器给出错误结果次数/测试执行总次数 (错误率:0~1.0)
三.kd树
kd树提高k近邻搜索效率,减少计算距离次数。
1.构造kd平衡树(依次选择坐标轴对空间划分,选定坐标轴上中位点为切分点)
2.搜索kd树。(分治、回溯)
kd树适合于实例数远大于空间维数是的k近邻搜索
参见http://xiaofeng1982.blog.163.com/blog/static/31572458201210214406792/
0 0
- k-邻近算法
- K-最邻近算法
- K-邻近算法
- K-邻近算法
- 1、k-邻近算法
- k邻近算法
- k-邻近算法学习
- KNN-K邻近算法
- k-邻近算法
- K邻近算法
- k-邻近算法笔记
- K邻近算法
- K邻近算法
- K邻近算法
- K-邻近算法
- K邻近算法(KNN)
- k邻近算法
- 【数据挖掘】k-邻近算法
- datanode 未启动
- android alarm底层理解
- ubuntu上hadoop 0.20.2 伪分布式配置
- 关于getchar()的用法
- Python 简单数据备份脚本
- K-邻近算法
- 汉诺塔:递归
- 利用过滤器filter处理乱码
- ssa/ass字幕格式全解析
- 《UNIX环境高级编程》学习笔记——进程控制(一)
- 有没有一句深刻的话改变了你,并让你一直付诸实践至今
- MIPS汇编
- 字符串反转 -- java实现
- 黑马程序员之java编程基础2