【统计学习方法】第三章 k近邻法

基础概念

k近邻法是一种基本的分类与回归方法,这里只讨论分类问题中的k近邻法。

 

第三章 k近邻法

 

1.k近邻算法

算法描述:首先给定一个训练集,对于待分类的输入数据,在训练集中找到与该输入数据最邻近的k个样本,这k个样本中哪个类别最多,就把待分类数据分给这个类。
k近邻法没有显式的学习过程。
 

2.k近邻模型

k近邻法的三个基本要素:(当这三个要素确定后,任何一个新的输入实例,它所属的类别唯一确定)

  1. 距离度量
    距离度量是用来衡量样本之间距离的,不同的距离度量,所确定的最近邻点是不一样的。

  2. k值的选择
    k太大或太小都不好。如果太小,预测结果会对近邻的实例点很敏感,模型复杂,容易过拟合;如果太大,较远处的(不相似的)实例点也会起作用。(最极端情况,k=N,无论输入什么,都被分到训练集中最多的类,模型过于简单)

    k值的一般选取原则:一般取一个比较小的值,通常采用交叉验证来选取最佳k值。

  3. 分类决策规则
    一般采取多数表决规则,(多数表决规则等价于经验风险最小化)
     

3.k近邻法的实现:kd树

3.1 构造kd树

kd树是一个二叉树,平衡kd树是每次对半分(从中位数处切)
例题:给定训练集 T = {(2,3),(5,4),(9,6),(4,7),(8,1),(7,2)},构造平衡kd树。
解法步骤:

  1. 分别在坐标系中标出这六个点,分别记为A~F,如图所示
  2. 在x1方向上,选择中位数处的节点,将x1方向一分为二,如下图红线所示,F节点作为根节点。左半空间变成了左子树,右半空间变成了右子树。
  3. 在x2方向上,对于左半空间(左子树),选择中位数处的点B,在x2方向上切一刀,如红线所示,B节点作为根节点的左节点;右半空间同理,选择C点,在x2方向上切一刀,选择C点作为根节点的右子节点。
  4. 对于节点B来说,它的下半部分即为它的左子树,上半部分是它的右子树,所以A为B的左节点,D为B的右节点。切法如下图红线所示。

    5.这样就能构造出一个kd平衡树:
    在这里插入图片描述

3.2 搜索kd树

需要解决的问题是:对于一个给定的kd树,如何用它来进行k近邻搜索。这里只讲最近邻,k近邻也是同理的。
例子:如下图,S点是待分类点,求S的最近邻。

步骤:

  1. 先在kd树中找到S点所属的叶节点D(S落在D的区域内)
  2. 以D作为S的最近邻,以S为圆心,D为半径画圆,真正的最近邻一定在圆的内部。
  3. 回溯的过程。返回D的父节点B,在B的另一子节点F的区域内搜索最近邻,没有找到(因为F区域与圆无交点),继续往上回溯到父节点A,在节点A的另一子节点C的区域内找,节点C与圆相交,而且该区域内存在节点E,比D点更近,所以成为新的最近邻近似。
  4. 最后得到点E是点S的最近邻。

最后,关于kd树,这里分享两个比较好的链接:
5. https://www.jianshu.com/p/ffe52db3e12b (这个链接写的超级好)
6. https://leileiluoluo.com/posts/kdtree-algorithm-and-implementation.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值