K近邻法

K近邻是一种机器学习模型,可以用分类或者回归。下面以分类任务为例介绍。

基本思想(分类)

给定一个有类别标注的样本集,现在有一个测试样本 ,然后预测该测试样本应该属于哪一个类别。用K近邻法就是在训练数据集中找到距离测试样本最近的K个样本,然后看看这K个样本中哪一个类别的样本最多了,然后将该类别作为测试样本的分类结果。

思想很简单,这里的难点和重点在于如何找到距离测试样本最近的K个样本。最简单的想法就是将所有数据以此过一遍,得到K个最近邻。但是这种方法在样本数较大和样本维度较高时效率比较底下。根据查找算法的规律,如果数据有序排列,查找效率会大大提升,而 k d kd kd树是一种将高维数据有序存放的方法。

k d kd kd

这里的 k k k仅仅指样本的维度是 k k k维。注意和K近邻的K区分。
如何构造kd树呢,首先要明白kd树是二叉树。

k d kd kd树构造方法:

1)首先选择第一个维度,找到训练样本集第一个维度的值的中位数。过该中位数画超平面将数据集划分为两个子集,分别对应左右子节点,左边子集的第一个维度的值都小于该中位数,右边子集的第一个维度的值都大于该中位数。
2)对于左边的子集,选择第二个维度的值的中位数,过该中位数画招平面将数据集划分为两个子集,分别对应左右子节点,左边子集的第二个维度的值都小于该中位数,右边子集的第二个维度的值都大于该中位数。
3)这样递归的划分所有的子集,构建子节点,直到子集仅包含一个样本不包含任何样本,此时该子集为叶子节点。

需要注意的是,在确定切分点所在维度时,如果最后一个维度划分完,但某子集依然可以划分,则重新开始用第一个维度选切分点。因此该二叉树前k层节点(层数索引从0开始)恰好对应样本的 k k k个维度,第 k k k层节点用第一个维度作为划分坐标轴。因此第 l l l层节点选择的维度等于 l l l除以 k k k的余数加1。

k d kd kd树查找方法:

目的:给定 k d kd kd树,和待分类的测试样本。
1)比较测试样本的第一个维度的值和根节点的样本的第一个维度的值。如果小于根节点的第一个维度的值,则进入到左子字节,如果大于根节点的第一个维度的值,进入到右子节点。
2)在当前的子节点,比较测试样本的第二个维度的值和根节点的样本的第二个维度的值,递归上述过程,直到样本被划分到某叶节点。
3)从叶节点开始往根节点回溯剪纸,逐步更新k个最近的节点。剪枝操作能减少大量对比操作,剪枝的标准是,在当前子节点,以测试样本样本为中心,以最短距离为半径画圆,如果圆和同父母的另外的子节点所对应的超矩形空间有交集,则搜索父母节点和其另外的子节点对应的子集,并更新邻近节点。否则回溯到父母节点,重复该步骤,直到根节点。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值