KNN(最近邻算法)

KNN是最简单的机器学习算法之一。

在模式识别中,K-近邻算法(或近邻的简称)是一种用于分类和回归的非参数方法。[ 1 ]在这两种情况下,输入包含k个最近的训练样本在特征空间中。输出取决于近邻是用于分类或回归:

l 在kNN分类中,输出的是一个分类的关系。一个对象是由其邻居投票进行分类,被分类到最近的K个最近邻对象(k是一个正整数,通常小的)。如果k = 1,那么对象只是分配到单个最近邻。

l 在KNN回归中, 输出该对象的属性值,这个值是k个邻居的平均值。

K-NN是一种基于实例的学习,或懒惰的学习,其中函数是近似的局部和所有计算递延至分类。K-NN算法是其中最简单的机器学习算法。 K-NN算法是最简单的机器学习算法之一。

用于分类和回归,它可以根据分类贡献权重到最近的邻居,所以,附近的邻居有助于平均比更遥远的。例如,一个普通的加权方案是给每个邻居重1 / D,其中D是邻居的距离。

邻居是从一组对象的类(k-NN分类)或对象的属性值(k-NN回归)是已知的。这可以看作是对算法的训练,虽然没有明确的训练步骤是必需的。

一个缺点是K-NN算法是对数据的局部结构敏感。不能与k-均值混为一谈,另一种流行的机器学习技术。

算法

一个KNN分类的示例,测试样本(绿色的园)应该分类到哪一个类别,蓝色的正方形或者红色的三角形。如果k=3,(实线圈) 他会被分到第二类中,因为有两个三角形但是只有一个方形在这个圈里面。如果k=5,(虚线圈)他会被分到类别1(在圈里面有3个正方形,2个三角形)。

训练样本是在多维空间中的一组向量。每个样本有一个分类类别。在算法训练阶段值包括特征向量和训练样本的分类类别。在分类阶段,K是用户自定义的一个常数,和一组未标示的向量(查询或者测试点)指定标签在离查询点最近的K个样本中出现频率最高的那个类,

一种常用的 连续变量 距离度量是 欧氏距离。对于离散变量,如文本分类,另一个度量可以使用,如 重叠度量 (或 汉明距离)。 在微阵列基因表达数据的上下文中 ,例如,在微阵列基因表达数据中,k-近邻还应用Pearson 和 spearman 提出的相关系数。通常情况下,使用距离度量学或者专门的算法k-近邻分类精度可以显著提高,如大边缘最近邻或邻里成分分析。 最基本的一个缺点"多数表决"分类时发生类分布不均衡。那就是,更频繁的类的例子倾向于统治预测的新示例中,因为他们往往是常见的 k 个最近邻居,因为他们的数量很多。一种方法来克服这一问题是重量的分类,考虑到测试距离指向每个其 k近邻。类 (或回归问题中的值) 的每个 k 个最近点乘以正比从那点到测试点距离的逆的重量。另一种方式来克服不均衡是由抽象数据的表示形式。例如在自组织映射(SOM) 中,每个节点是群集的相似点的代表 (中心),不管他们在原始的训练数据中的密度。K-NN可应用于SOM。

参数选择 

K 的最佳选择取决于数据 ;一般来说,k 值越大降低噪声对分类的影响,但使类之间的界限不明显。一个好的 k 可以选择通过各种启发式技术 (请参见参数优化)。将预计选择为最靠近的训练样本的类的特殊情况下(即当 k = 1)称为的最近邻居算法。

属性

k-近邻是用一个统一的核函数的可变带宽,核密度"气球"估计的一个特殊情况。[8][9]

原始版本的算法很容易实现通过计算对所有存储的例子来计算测试用例之间的距离,但对于大量训练样本却是计算密集型操作。使用适当的最近邻搜索算法使 k-近邻在计算上更适用于大型数据集。多年来 ; 提出了很多最近的近邻搜索算法,这些算法通常设法减少距离评价实际执行的数目。

k-近邻有一些强一致性的结果。随着数据量趋于无穷,该算法保证产量错误率没有两次贝叶斯错误率 更糟(给出的数据分布可实现的误差最小率)。k-近邻在一些k值下被保证接近贝叶斯错误率 (k增加通过一个数据点条目的函数)。通过使用接近图,对 k-近邻的各种改进是可能的。

度量学习

K-近邻邻居分类性能往往可以通过 (监督) 的度量学习显著改善。流行的算法是Neighbourhood components analysis 和 Large margin nearest neighbor 。监督度量学习算法使用的标签信息来学习一种新的度量或伪度量。

特征提取

当对输入的数据和算法是太大,无法进行处理,它被怀疑是出现了冗余 (例如使用英尺和米同时测量) 然后输入的数据将变为一个精简的特征的集合 (也称为特征矢量)。将输入的数据转换为特征的集合称为特征提取。如果提取的特征都经过精心挑选预期功能集将从输入数据提取相关信息,以执行所需的任务,使用这减少的特征的集合而不使用全尺寸输入。应用 k-近邻算法在特征空间中的变换数据之前进行原始数据进行特征提取。

示例使用 k-近邻包括人脸识别典型的计算机视觉计算中特征提取和尺寸减少的处理步骤 (通常使用 OpenCV 实现):

  1. Haar face detection   小波人脸检测
  2. Mean-shift tracking analysis 均值漂移跟踪分析
  3. PCA 或 Fisher 线性判别分析投影到特征空间,其次是 k-近邻分类

降维

对于高维数据 (例如,用 10 多个维度数目) 通常是采用 降维来避免维数灾难对k-近邻算法的影响。

在 k-近邻上下文中的维数灾难基本上意味着欧几里德距离是高维度是无益的,因为所有向量都是几乎等距搜索查询向量 (想象更多或更少躺在一个圆上,查询点为中心的多个点 ; 从查询到的搜索空间中的所有数据点的距离是几乎相同)。

特征提取和维数约简可以组合使用主成分分析 (PCA)、 线性判别分析 (LDA)或典型相关分析 (CCA) 技术作为一个预处理步骤,紧接着由 k-NN处理降维后的特征向量。在机器学习这一过程也称为低维嵌入。

非常高维数据集 (例如当执行相似性搜索视频直播、 DNA 数据或高维时间序列上),从 VLDB 工具箱 运行使用局部性敏感散列算法( locality sensitive hashing )的快速近似 k-近邻搜索,"随机投影"(random projection ),"草图" (sketches )或其他高维相似性搜索技术可能是唯一可行的方案。

聚类边界

最近邻规则实际上隐式计算决定边界。它还有可能来显式地计算决定边界,这样的计算复杂度是边界复杂度。

数据约简

数据约简是处理庞大的数据集工作的最重要问题之一。通常情况下,要准确的分类只需要部分数据点。这些数据被称为原型,可以通过如下方法找到:

1.类-异常值的选择,训练按 k-近邻 (对于给定的 k) 分类的不正确的数据

2.将其余的数据分成两组: (i) 用于决定分类的一些原型点 (ii) 通过K-NN原型分类正确的点,然后删除这些点。

类-异常值的选择

训练示例包围其他类的实例被称为类异常。类异常的原因包括:

随机误差

l 此类 (一个孤立的例子,而不是群集) 的训练示例很少

l 缺少重要特征 (类分隔在其他方面,我们不知道)

l 对于小数据量的类会打不过数据量很大的类(不平衡)

异常点对于K-近邻类产生噪声。他们可以检测到并分离供将来分析。给定两个自然数、 k > r > 0,训练的例子称为( k- r) NN 类异常,如果其 k 近邻包含超过r个其他类的例子。

CNN用于数据约简

凝聚最近邻 (CNN,哈特算法) 是设计来减少 k-近邻分类算法数据集的。它在训练数据中选择数据集原型 U ,这样 1NN 使用U可以与 1NN使用整个数据集  一样准确地分类。

对于训练集 X,CNN 以迭代方式工作:

  1. 扫描 X中的元素,从 U 中寻找其最近的原型, 具有一个和x不同的标签
  2. 从 X中删除 x 并将其添加到 U
  3. 重复扫描,直到没有更多的原型添加到U。

使用U分类而不是X。不是原型的点被称为"吸收"点。

它是有效扫描依次降低训练示例的边界比率。训练示例的边界比率 x 被定义为

a(x) = | |x‘-y||/ ||x-y||

| |x-y||是x到最近的拥有不同颜色示例 y的距离, | |x‘-y||是从 y 到其最近标签为x的最近的一点节点的距离。

计算边界比例

                             

边界比是在 [0,1] 区间,因为 | |x‘-y||永远不会超过 | |x-y||。这种排序优先考虑到类的边界列入 prototypes U 集合中。不同的标签比 x 点被称为 x 的外部。计算边界比率是右图所示。数据点标签的颜色: 初始点是 x 和它的标签是红色的。外部点是蓝色和绿色。接近外部点 x 是 y。最接近 y 红点是 x‘。边框比 (x) = | |x‘-y||/||x-y||是属性的初始点 x。

下面是 CNN 在一系列的数字说明。有三类 (红色、 绿色和蓝色)。图 1: 最初有 60 个点中的每个类。图 2 显示了 1NN 分类图: 按 1NN 分类的每个像素使用的所有数据。图 3 显示了 5NN 分类图。白色区域对应的非机密的地区,那里 5NN 投票绑 (例如,如果有两个绿色,两个红色和 5 最近邻之间的一个蓝点)。图 4 显示了减少的数据集。十字架是类离群值选定的 (3,2) 的神经网络规则 (所有这些实例三近邻属于其他类) ;正方形是原型,并吸收的点的空圆圈。左下角显示的类异常、 原型和所有三类吸收的点的数量。原型数目变化从15%到 20%在此示例中的不同类别。图 5 显示了与原型 1NN 分类图是非常相似,与初始数据集。

                          

图1 数据集                                                                 1NN分类图

                                   

5NN分类图                                 降低数据的图

基于元组的1NN分类

k-近邻回归

在 k-近邻回归 k-近邻算法用于估计连续变量。这样一种算法使用加权的平均的 k个最近邻居,他们之间的距离的倒数加权。这种算法如下所示:

1.计算从查询示例的到标志示例的欧几里德或马氏距离。

2.通过距离增加来决定例子的标签。

3.找到最近邻,基于 RMSE 启发式最优数的 k。这样做是使用交叉验证。

4.与 k-近邻的多元邻居计算反距离加权平均。

时间: 2024-09-30 19:43:57

KNN(最近邻算法)的相关文章

机器学习---K最近邻(k-Nearest Neighbour,KNN)分类算法

K最近邻(k-Nearest Neighbour,KNN)分类算法 1.K最近邻(k-Nearest Neighbour,KNN) K最近邻(k-Nearest Neighbour,KNN)分类算法,是一个理论上比较成熟的方法,也是最简单的机器学习算法之一.该方法的思路是:如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别.用官方的话来说,所谓K近邻算法,即是给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最邻近的K个实

后端程序员之路 12、K最近邻(k-Nearest Neighbour,KNN)分类算法

K最近邻(k-Nearest Neighbour,KNN)分类算法,是最简单的机器学习算法之一.由于KNN方法主要靠周围有限的邻近的样本,而不是靠判别类域的方法来确定所属类别的,因此对于类域的交叉或重叠较多的待分样本集来说,KNN方法较其他方法更为适合.该算法的功能有:从目标区域抽样计算欧式或马氏距离:在交叉验证后的RMSE基础上选择启发式最优的K邻域:计算多元k-最近邻居的距离倒数加权平均. 机器学习(一)——K-近邻(KNN)算法 - oYabea - 博客园http://www.cnblo

KNN(k-nearest neighbor的缩写)又叫最近邻算法

机器学习笔记--KNN算法1 前言 Hello ,everyone. 我是小花.大四毕业,留在学校有点事情,就在这里和大家吹吹我们的狐朋狗友算法---KNN算法,为什么叫狐朋狗友算法呢,在这里我先卖个关子,且听我慢慢道来. 一 KNN算法简介 KNN(k-nearest neighbor的缩写)又叫最近邻算法.是1968年由Cover和Hart提出的一种用于分类和回归的无母数统计方法.什么叫无母统计方法呢,这里作个补充:无母统计方法又称非参数统计学,是统计学的一个分支,适用于母群体情况未明,小样

浅谈对机器学习算法的一些认识(决策树,SVM,knn最近邻,随机森林,朴素贝叶斯、逻辑回归)

一.决策树 定下一个最初的质点,从该点出发.分叉.(由于最初质点有可能落在边界值上,此时有可能会出现过拟合的问题. 二.SVM  svm是除深度学习在深度学习出现之前最好的分类算法了.它的特征如下: (1)它既可应用于线性(回归问题)分类,也可应用于非线性分类; (2)通过调节核函数参数的设置,可将数据集映射到多维平面上,对其细粒度化,从而使它的特征从二维变成多维,将在二维上线性不可分的问题转化为在多维上线性可  分的问题,最后再寻找一个最优切割平面(相当于在决策数基础上再寻找一个最优解),因此

机器学习之利用KNN近邻算法预测数据

前半部分是简介, 后半部分是案例 KNN近邻算法: 简单说就是采用测量不同特征值之间的距离方法进行分类(k-Nearest Neighbor,KNN) 优点: 精度高.对异常值不敏感.无数据输入假定 缺点:时间复杂度高.空间复杂度高 1.当样本不平衡时,比如一个类的样本容量很大,其他类的样本容量很小,输入一个样本的时候,K个临近值中大多数都是大样本容量的那个类,这时可能就会导致分类错误.改进方法是对K临近点进行加权,也就是距离近的点的权值大,距离远的点权值小. 2.计算量较大,每个待分类的样本都

图说十大数据挖掘算法(一)K最近邻算法

如果你之前没有学习过K最近邻算法,那今天几张图,让你明白什么是K最近邻算法. 先来一张图,请分辨它是什么水果 很多同学不假思索,直接回答:"菠萝"!!! 仔细看看同学们,这是菠萝么?那再看下边这这张图. 这两个水果又是什么呢? 这就是菠萝与凤梨的故事,下边即将用菠萝和凤梨,给大家讲述怎么用一个算法来知道这是个什么水果的过程,也就是什么是K最近邻算法. (给非吃货同学们补充一个生活小常识,菠萝的叶子有刺,凤梨没有.菠萝的凹槽处是黄色的,而凤梨的凹槽处是绿色的,以后千万不要买错哦!!!)

K近邻(k-Nearest Neighbor,KNN)算法,一种基于实例的学习方法

1. 基于实例的学习算法 0x1:数据挖掘的一些相关知识脉络 本文是一篇介绍K近邻数据挖掘算法的文章,而所谓数据挖掘,就是讨论如何在数据中寻找模式的一门学科. 其实人类的科学技术发展的历史,就一直伴随着数据挖掘,人们一直在试图中数据中寻找模式, 猎人在动物迁徙的行为中寻找模式 农夫在庄稼的生长中寻找模式 政客在选民的意见上寻找模式 恋人在对方的反应中寻找模式 企业家的工作是要辨别出机会,寻找出那些可以转变为有利可图的生意的行为中的一些模式,也即所谓的成功的模式,并且利用这些机会 科学家的工作是理

KNN分类算法实现手写数字识别

需求: 利用一个手写数字"先验数据"集,使用knn算法来实现对手写数字的自动识别: 先验数据(训练数据)集: ?数据维度比较大,样本数比较多. ? 数据集包括数字0-9的手写体. ?每个数字大约有200个样本. ?每个样本保持在一个txt文件中. ?手写体图像本身的大小是32x32的二值图,转换到txt文件保存后,内容也是32x32个数字,0或者1,如下: 数据集压缩包解压后有两个目录:(将这两个目录文件夹拷贝的项目路径下E:/KNNCase/digits/) ?目录trainingD

R语言学习-KNN临近算法

概念 1.监督学习:从给定标注的训练数据中学习出一个函数,根据这个函数为新数据进行标注. 2.无监督学习:从给定无标注的训练数据中学习出一个函数,根据这个函数为所有数据标注. KNN分类算法:通过对已知类别训练数据集的分析,从中发现分类规则,以此预测新数据的类别,分类算法属于监督学习的类型. KNN概念: 1.训练集:用来训练模型或确定模型参数的数据. 2.测试集:用来验证模型准确性的数据. 3.交叉验证:一般使用70%的数据作为训练集,剩下30%的数据作为测试集,测试集的测试结果使用交叉表形式

高维数据的快速最近邻算法FLANN

1.     简介 在计算机视觉和机器学习中,对于一个高维特征,找到训练数据中的最近邻计算代价是昂贵的.对于高维特征,目前来说最有效的方法是 the randomized k-d forest和the priority search k-means tree,而对于二值特征的匹配 multiple hierarchical clusteringtrees则比LSH方法更加有效. 目前来说,fast library for approximate nearest neighbors (FLANN)