k Nearest Neighbor Algorithm
k Nearest Neighbor Algorithm
k Nearest Neighbor(kNN) algorithm算法和k-Means算法一样,都是简单理解,但是实际效果出人意料的算法之一。正式由于其算法思想简单,很多人可能会认为在工程中用途有限,实际上kNN和k-Means两种算法正是凭借其算法思想入选 Top Ten Data Mining Algorithm(http://www.cs.umd.edu/~samir/498/10Algorithms-08.pdf),成为值得深入学习和思考的算法。
kNN算法是最简单的机器学习算法之一,采用空间向量模型分类;在概念空间上为相同或者相似类别的数据,彼此的相似度比较高;而借由计算已知类别数据和未知数据的相似程度,来计算位置数据的分类,是典型的监督算法(Supervised Algorithm)。
kNN在分类数据时,使用到了相似度的概念,而kNN正式按照相似度对位置数据分类;那么衡量数据相似度的度量就是一种很重要的标准,如欧式空间可以使用Euclidean Distance(L2)、City-Block Distance(L1)等,文本数据使用TF-IDF等。关于距离或者相似度的概念,这里有篇比较全的文章, http://isilic.iteye.com/blog/1816986,大家可以参考下距离的特征,以及使用距离的场景。
算法思路:
如果一个样本在特征空间中的K个最相似的样本中大多数都属于某类别,则该样本页数于该类别。在该算法中,所选择的邻居是已经正确分类的对象,在决定测试数据的分类时,依赖邻近的一个或者多个样本来决定测试数据的类别。从原理上来看,kNN算法依赖于极限定理;但是在具体决策上,至于少数相邻的样本数据有关。
如果样本数据集空间分布有交叉或者重叠,kNN方法较其它方法更为合适;因为kNN是Instance-Based算法,而不是靠判别(discriminative)来确定数据类别。
从上面的算法描述可以看出来,kNN算法具有下列特性:
1:Lazy Learning Algorithm:接到测试样例才会进行kNN算法计算,并且会搜索所有的样本数据,最终给出直接分类,没有其它的信息可用。
2:Non-parameter:直接计算,基于实例(Instance Based),
3:Majority Vote:邻近节点的属于某类别的多数决定。
和Eager Learning算法相比,需要保存样例在内存中,存储数据量比较大,内存要求高;在训练阶段计算比较少,测试样例计算量都集中在测试阶段,计算要求高。
简单提下Lazy Learning Algorithm,这类算法在训练阶段有优势,但是在测试阶段计算量比较大;常用的其它的Lazy Algorithm的称呼还有Memory-Based、Exemplar-Based、Case-Based、Experience-Based等,含义都比较简单形象。
参数选择
k参数对于算法的性能影响巨大:较大的k值能够避免噪声数据的影响,但是也会使分类之间变得难以区分。一般的比较好的k值都是通过启发式技术得到,最为特殊的例子就是当k=1时称为是最邻近算法(Nearest Neighbor Algorithm)。另外kNN算法的精确度受到样本数据无关属性、噪声数据的英标比较大,尤其是特征属性和数据重要性分类无关时。所以kNN算法的大部分精力都放在特征选取(Feature Selecting or Scaling)上,当然这个就是另外比较高深的问题了;两种比较常用的做法是通过evolutionary algorithms优化特征缩放和利用训练数据的Mutual Information来缩放特征。
kNN用于回归:
kNN算法用于回归时,可以找出K个邻近的数据点,将这些数据的属性平均的赋给该样本,就可以得到该样本的属性;更为通用的方法是将距离不同的样本赋予不同的权重值(Weithted)。
kNN用于分类
分类思想如上,当k=1时相当于Nearest Neighbor Search。当然对于分类也可以使用权重(Weighted)算法。
下面我们看下对于带权重的kNN(Weighted kNN)几种算法思路,都用到了Gradient Descent算法:
Instance-Weighted kNN:基于实例的权重kNN
该算法有两个假设:首先所有的属性石都是数字后者是可以衡量的;其次样本属性值离散。
将数据分组,使用交叉验证(cross validation)的思路:
使用全部数据(whole dataset)时:
Attribute-Weighted kNN:基于实例样本属性的权重kNN
使用cross validation,将权重添加到样本数据属性上,注意Attribute和Instance的区别
当使用全部数据集合(whole set)时:
Backward Elimination
反向消除是通过估计反复对数据集合操作,如果删除某个样本属性后,精确度降低,就将该属性再添加进距离度量,直到获得最为合适的属性;在后来的计算过程中就是用这些属性,降低计算复杂度,但是训练过程倒是复杂了不少。
Curse of Dimensionality
1:距离和样本的维度有关,通常是和样本的所有维度有关,样本的维度对于距离的影响是一样的
2:相似性并不考虑样本属性对于最终分类结果的影响;并且在很大程度上分类错误是因为很多无关属性的计算,属性计算越多,维度灾难发生的可能性越大。
3:和距离、相似性相关的算法都会有维度灾难问题(Curse of Dimensionality)
数据搜索:
1:Brute-Force,遍历暴力搜索,这个最为简单,但是性能最差,数据稍微有点数量级别提升,就无法进行。
2:Index-Tree,索引树结构,包括以前提到的 kd-tree ,还有其它结构的索引结构,R tree、B Tree等。通过索引结构能够大大提升搜索的效率,对于kNN的实用是个很重要的一环。
综上,kNN的实用有几个关键点:
1:数据清理,包括Scaling、Outliar检测等。
2:数据特征选择
3:搜索数据结构优化
如果预处理好这些问题,kNN算法的优势还是比较明显的,不会比其它分类算法差;既有kNN算法的优点,又不失数据准确性。
k Nearest Neighbor Algorithm相关推荐
- Nearest Neighbor Algorithm
Nearest Neighbor Algorithm 邻近算法(Nearest Neighbor)的思想实际上十分简单,就是将测试图片和储存起来的训练集一一进行相似度计算,计算出最相近的图片,这张图片 ...
- K Nearest Neighbor 算法
K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...
- K NEAREST NEIGHBOR 算法(knn)
K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...
- 文献记录(part81)--Clustering-based k -nearest neighbor classification for large-scale data with ...
学习笔记,仅供参考,有错必纠 文章目录 Clustering-based k -nearest neighbor classification for large-scale data with ne ...
- 机器学习之深入理解K最近邻分类算法(K Nearest Neighbor)
[机器学习]<机器学习实战>读书笔记及代码:第2章 - k-近邻算法 1.初识 K最近邻分类算法(K Nearest Neighbor)是著名的模式识别统计学方法,在机器学习分类算法中占有 ...
- 机器学习——K近邻算法(KNN)(K Nearest Neighbor)
参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...
- kNN算法(k近邻算法,k Nearest Neighbor)
主要内容: 1.认识kNN算法 2.kNN算法原理 3.应用举例 4.kNN改进方法 1.认识knn算法 "看一个人怎么样,看他身边的朋友什么样就知道了",kNN算法即寻找最近的K ...
- 【资源分享】今日学习打卡--k近邻法 (k Nearest Neighbor Method)
他来了他来了,他带着礼物走来了. 今天继续学习打卡 今天给大家分享的是k近邻法,是监督学习中的最基本的分类问题模型. 博主从自己看的几个比较好的视频中,分享了一些自己认为比较好的视频.希望能在大家和博 ...
- [转]Data mining with WEKA, Part 3: Nearest Neighbor and server-side library
原文地址: http://www.ibm.com/developerworks/opensource/library/os-weka3/index.html by : Michael Abernet ...
最新文章
- 神经网络python实例分类_Python使用神经网络进行简单文本分类
- The 2007 Microsoft Office System RTM is ready to rock !
- 微信小程序开发简易教程一
- linux mplayer_移植mplayer播放器到EK200开发板的步骤浅析
- Problem b(BZOJ-2301/HAOI-2011)
- 2019-07-22
- JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)...
- 牛腩新闻发布系统总结
- IT项目管理 第三章
- 【武汉加油!中国加油!】挑战七天 实现机器视觉检测有没有戴口罩系统——第四五六七天
- iOS 音乐播放器(二)
- LTE下行传输机制--PBCH
- java生成base64条形码
- 搭建Longhorn
- 固态硬盘是什么接口_5分钟教会你怎么区分M.2固态硬盘接口和协议
- (4.6.14)android 插桩基本概念plugging or Swap
- 爬虫技术:携程爬虫阳光问政数据
- MATLAB:镜像图片
- 机器学习中的范数理解(L0,L1,L2)
- 如何将旧Mac的数据迁移到新的MacBook Pro
热门文章
- 通过堡垒机/跳板机实现文件在本地Mac与服务器之间的互传
- 解决sublime汉化后部分中文显示为繁体字
- fastjson将date转换成了long
- VB6 加载控件Windows Common Controls 6.0(mscomctl.ocx)失败提示“对象库未注册”
- 量子计算机是否存在相对论,从量子到宇宙——颠覆人类认知的科学之旅
- 中止执行后超过2年_在法院中止执行后怎么办
- 【CVPR2020视频超分辨率】Zooming Slow-Mo: Fast and Accurate One-Stage Space-Time Video Super-Resolution 阅读笔记
- VC写的双人版俄罗斯方块
- 5k显示器和4k显示器有什么区别
- Material Design学习之 Camera