统计学习方法笔记五---KNN(K近邻)
来源:互联网 发布:知乎日报变成读读日报 编辑:程序博客网 时间:2024/05/16 01:57
前言
k邻近算法(k-nearest)是一种判别模型,解决分类问题和回归问题,以分类问题为主,在此我们也主要介绍分类问题中的k近邻算法。
k近邻算法的输入为实例的特征向量,对应予特征空间中的点;输出为实例的类别,可以取多类,(前面我们介绍的三种方法主要是解决二分类问题)。
k近邻算法假设给定一个训练数据集,其中的实例类别已定。分类时,对新的实例,根据其k个最近邻的训练实例的类别,通过多数表决等决策方法进行类别预测。因此,k近邻算法不具有显示的学习过程。
k近邻算法实际上利用训练数据集对特征向量空间进行划分,并作为其分类的“模型”。k值的选择、距离度量以及分类决策规则是k近邻算法的三个基本要素。
算法概述
k近邻算法还是比较容易理解的,在此我们不做具体解释,后面我们只对一些细节进行说明。
直接贴图:
模型
k近邻模型实质上是一个空间划分模型。根据训练样本自身的特征,通过距离公式计算,将训练数据集组成空间整体划分成M个字空间(M为类别数)。利用测试集进行测试评估模型的好快,以调整k的选择或者距离方法的选择。在此,经常使用交叉验证的方法。
距离度量
特征空间中两个实例点的距离是两个实例点相似程度的反映。在此我们介绍一些我们经常用到的一些距离公式:
直接上图:
上图表明,不同的距离计算方法,对于同一个点(远点)计算得到的最近邻点事不同的,下面的例子也可以证明:
k值的选择
k值的选择会对k近邻算法的结果产生重大影响。
如果k值选择的较小,则会有:
1)优点:“学习”的近似误差会减小,只与输入实例较近的实例才会对预测结果起作用。2)缺点:“学习”的估计误差会增大,预测结果会对近邻的实例点非常敏感,因为k值较小,邻近点比较少(也就是说能够投票的人比较少),所以敏感(投票结果只倚重这几个人,如果这几个人都是一派人士,最终结果可想而知了)。如果邻近的实例点恰巧是噪音,预测就会出错。
k值的减小意味着整体模型变得比较复杂(划分较多),容易发生过拟合。
如果选择的k值较大,则会有:
1)优点:可以减少学习的估计误差,因为能够投票的人数较多,更具有说服力,所以投票结果会比较符合实际情况(预测误差较小)。2)缺点:增大了近似误差。因为投票的人多了,每个人都会有投票误差,所以总误差就会增大。这时候,与输入实例比较远的(不相似的)训练实例也会对预测结果起作用,使得预测发生错误。
k值的增大意味着模型变得简单。如果k=N,那么无论输入什么,都将简单的预测它属于在训练实例中最多的类,(此时,我想到一个词,人多势众)。这个时候,模型过于简单,完全忽略了实例中大量的有用信息,只考虑了类别数量,这是不可取的。
分类决策规则
k近邻算法中的分类决策规则往往是多数表决,即由输入实例的k个近邻的训练实例中的多数类决定输入实例的类别。
kd树
实现k近邻算法的时候,主要考虑的问题是如何对训练数据进行快速k近邻搜索,这点在特征空间的维数大以及训练数据容量大的时候,很重要!
k近邻算法最简单的实现方法是线性扫描(linear scan),这时候需要计算输入实例与每一个训练实例的距离,当训练集很大的时候,计算非常耗时,这种方法是不可行的。
为了提高k近邻搜索的效率,可以考虑使用特殊的结构和存储训练数据,以减少计算距离的次数,具体的方法很多,kd树便是其中的一种,其思路还是比较简单易理解的。我不打算在此复述。
kd树是二叉树,表示对k维空间的一个划分(partition).构造kd树相当于不断地使用垂直于坐标轴的超平面将k维空间切分,构造一系列的k维超矩形区域。kd树的每一个节点对应于一个k维超矩形区域。
直接贴图:
给出实例,加深理解:
最终形成的kd树为:
kd搜索
根据上一部分构造出的kd树,进行搜索获得k近邻节点,利用kd树可以省去对大部分数据点的搜索,不需要一一计算进行比较,从而减少计算量,提高算法效率。
以最近邻为例(k=1),给定一个目标点,搜索其最近邻。首先找到包含目标点的叶节点(最小的包含目标点的超矩形区域);然后从该叶节点出发,依次回退到父节点;不断查找与目标节点最邻近的节点,当确定不可能存在更近的节点时终止。这样搜索就被限制在空间的局部区域上,效率大为提高。
在此直接贴图:
给出例子,加深理解:
《完》
所谓的不平凡就是平凡的N次幂。 -------By Ada
- 统计学习方法笔记五---KNN(K近邻)
- 统计学习方法---KNN(K近邻)
- 统计学习方法笔记-K近邻(k-NN)
- 统计学习方法阅读笔记:k近邻法
- 《统计学习方法》笔记(3):k近邻
- 统计学习方法笔记:K近邻法
- [统计学习方法]K近邻法
- 统计学习方法-----k近邻法
- 统计学习方法:k近邻法
- 统计学习方法---k近邻法
- 统计学习方法笔记(三):K近邻法
- 《统计学习方法》笔记(四)--k近邻法
- 统计学习方法笔记(三)K近邻算法
- 统计学习方法第三章笔记——k近邻法
- 《统计学习方法》笔记——K近邻模型
- 统计学习方法笔记,第三章,k近邻法
- 《李航:统计学习方法》--- K近邻算法(KNN)原理与简单实现
- KNN K~近邻算法笔记
- 安装centos后需要安装的package
- JDBC基础入门
- 数据库导出表结构
- SpringBoot运行NoSuchMethodError
- Hello Kotlin(一)初次见面
- 统计学习方法笔记五---KNN(K近邻)
- window环境下python安装numpy、scipy、matplotlib等科学计算包
- RAC学习应用篇--基础应用篇(二)--signal
- Linux常用命令大全
- 角色移动动画偏移问题
- 关于python中的查询数据库内容中用到的fetchone()函数和fetchall()函数
- 解决Eclipse中maven项目无法添加到tomcat下的问题
- 【bzoj1430】小猴打架
- 数据结构课程设计——猴子吃桃问题