统计学习方法 李航 k近邻算法

k近邻算法

一.k近邻算法基本描述

给定一个训练数据集,对新的输入实例,在训练数据集中找到与该实例最相近的k个实例,这k个实例的多数属于某个类,就把该输入实例分为这个类.

FmdG60.png

二.k近邻模型

该模型有三个基本要素:距离度量,k值的选择,分类决策规则.当这三个要素确定后,便能对于任何一个新的输入实例,给出唯一确定的分类.这里用图片说明更清楚,对于训练集中的每一个样本,距离该点比其他点更近的所有点组成一片区域,叫做单元.每个样本都拥有一个单元,所有样本的单元最终构成对整个特征空间的划分,且对每个样本而言,它的标签就是该单元内所有点的标记.这样每个单元的样本点的标签也就是唯一确定的.(我感觉这图片真的很形象)

FmwTPJ.png

下面来简要说下这三个基本要素

三.三要素

1.距离度量

当然,一般都是用的欧式距离,但也应该了解还有那些距离度量方法:
如lp距离:
Fm0RWd.png

而欧式距离就是p=2时的特殊情况
Fm0gFe.png

还有曼哈顿距离,即p=2时的lp距离
Fm02JH.png

和p=无穷时,
Fm0fSA.png

2.k值的选择

k值过小
  • 近似误差减小,估计误差增大
  • 易受噪声影响
  • 易发生过拟合
k值过大
  • 近似误差增大,估计误差减小
  • 忽略有效信息

3.分类决策规则

最主要用的一般是多人表决,当然,还有加权表决等

四.k近邻算法的实现:kd树

其实我们已经可以实现k近邻算法了,即线性扫描,但当数据量很大时,会非常耗时,所以我们需要一种数据结构来存储训练数据,来优化算法,这里介绍的就是kd树.

1.构造kd树

FnEi9A.png
FnEChd.png
这里书上讲的挺抽象的,我来解释下,其实就是循环地以每个特征的中位数所对应的那个样本作为分割点来构造二叉树,直至所有的样本全都包含在树中

FnENEF.png

2.搜索kd树

这里书中仅讲了最近邻的搜索,并未说明k近邻,没什么意义,所以我不打算实现它,关于k近邻的完整实现则可以看我的另一篇博客.
FnEGuV.png
FnE3j0.png
这里同样很抽象,但书中的例子却很清晰,你可以先看下例子,然后再回去看算法描述.

FnEUN4.png

五.补充

k近邻算法,除了kd树来实现,还有BBF,球树.
网上kd树都是实现的最近邻搜索,
k近邻搜索可参考这道HDU4347http://acm.hdu.edu.cn/showproblem.php?pid=4347
另外这篇博客对此题的原理解释的很清楚https://blog.csdn.net/javays1/article/details/50369176

六.参考

转载于:https://www.cnblogs.com/w-j-c/p/10045956.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值