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相关推荐

  1. Nearest Neighbor Algorithm

    Nearest Neighbor Algorithm 邻近算法(Nearest Neighbor)的思想实际上十分简单,就是将测试图片和储存起来的训练集一一进行相似度计算,计算出最相近的图片,这张图片 ...

  2. K Nearest Neighbor 算法

    K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...

  3. K NEAREST NEIGHBOR 算法(knn)

    K Nearest Neighbor算法又叫KNN算法,这个算法是机器学习里面一个比较经典的算法, 总体来说KNN算法是相对比较容易理解的算法.其中的K表示最接近自己的K个数据样本.KNN算法和K-M ...

  4. 文献记录(part81)--Clustering-based k -nearest neighbor classification for large-scale data with ...

    学习笔记,仅供参考,有错必纠 文章目录 Clustering-based k -nearest neighbor classification for large-scale data with ne ...

  5. 机器学习之深入理解K最近邻分类算法(K Nearest Neighbor)

    [机器学习]<机器学习实战>读书笔记及代码:第2章 - k-近邻算法 1.初识 K最近邻分类算法(K Nearest Neighbor)是著名的模式识别统计学方法,在机器学习分类算法中占有 ...

  6. 机器学习——K近邻算法(KNN)(K Nearest Neighbor)

    参考视频与文献: python与人工智能-KNN算法实现_哔哩哔哩_bilibili 机器学习--K近邻算法(KNN)及其python实现_清泉_流响的博客-CSDN博客_python实现knn 机器 ...

  7. kNN算法(k近邻算法,k Nearest Neighbor)

    主要内容: 1.认识kNN算法 2.kNN算法原理 3.应用举例 4.kNN改进方法 1.认识knn算法 "看一个人怎么样,看他身边的朋友什么样就知道了",kNN算法即寻找最近的K ...

  8. 【资源分享】今日学习打卡--k近邻法 (k Nearest Neighbor Method)

    他来了他来了,他带着礼物走来了. 今天继续学习打卡 今天给大家分享的是k近邻法,是监督学习中的最基本的分类问题模型. 博主从自己看的几个比较好的视频中,分享了一些自己认为比较好的视频.希望能在大家和博 ...

  9. [转]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 ...

最新文章

  1. 神经网络python实例分类_Python使用神经网络进行简单文本分类
  2. The 2007 Microsoft Office System RTM is ready to rock !
  3. 微信小程序开发简易教程一
  4. linux mplayer_移植mplayer播放器到EK200开发板的步骤浅析
  5. Problem b(BZOJ-2301/HAOI-2011)
  6. 2019-07-22
  7. JAVA学习(三):Java基础语法(变量、常量、数据类型、运算符与数据类型转换)...
  8. 牛腩新闻发布系统总结
  9. IT项目管理 第三章
  10. 【武汉加油!中国加油!】挑战七天 实现机器视觉检测有没有戴口罩系统——第四五六七天
  11. iOS 音乐播放器(二)
  12. LTE下行传输机制--PBCH
  13. java生成base64条形码
  14. 搭建Longhorn
  15. 固态硬盘是什么接口_5分钟教会你怎么区分M.2固态硬盘接口和协议
  16. (4.6.14)android 插桩基本概念plugging or Swap
  17. 爬虫技术:携程爬虫阳光问政数据
  18. MATLAB:镜像图片
  19. 机器学习中的范数理解(L0,L1,L2)
  20. 如何将旧Mac的数据迁移到新的MacBook Pro

热门文章

  1. 通过堡垒机/跳板机实现文件在本地Mac与服务器之间的互传
  2. 解决sublime汉化后部分中文显示为繁体字
  3. fastjson将date转换成了long
  4. VB6 加载控件Windows Common Controls 6.0(mscomctl.ocx)失败提示“对象库未注册”
  5. 量子计算机是否存在相对论,从量子到宇宙——颠覆人类认知的科学之旅
  6. 中止执行后超过2年_在法院中止执行后怎么办
  7. 【CVPR2020视频超分辨率】Zooming Slow-Mo: Fast and Accurate One-Stage Space-Time Video Super-Resolution 阅读笔记
  8. VC写的双人版俄罗斯方块
  9. 5k显示器和4k显示器有什么区别
  10. Material Design学习之 Camera