KNN算法学习笔记

kNN算法

k近邻法(kNN),是一种基本分类和回归方法。分类问题中:输入为实例的特征向量,输出为实例的类别。k近邻法对于输入的实例x,根据所给定的距离度量,在训练集中找出与x最近邻的k个点,在这k个点中,根据分类决策规则决定x的类别y。
k近邻法抛不开训练集,因此没有显式的学习过程。
缺点:
(1)没有明显的训练过程,在训练阶段所作的仅仅是将样本保存起来,如果训练集很大,必须使用大量的存储空间。
(2)必须对数据集中的每个数据计算距离值,实际中可能非常耗时。
为了克服缺点,可以使用一些特殊的存储方式存储训练数据——k近邻法的一个实现方法:kd树。

1. k近邻模型

三个基本要素:距离度量,k值选择,分类预测规则;当训练集与三基本要素确定后,其结果唯一确定。
1、距离度量:特征空间中两个实例点的距离是两个实例点相似度的反映,k近邻法使用的距离是欧氏距离,但也可以是其他距离,如Lp距离。
设特征空间X是n维实数向量空间Rn,
xi=(xi1,xi2,……,xin)T,xj=(xj1,xj2,……,xjn)T,xi和xj的Lp距离为:
在这里插入图片描述
P=2时是欧氏距离,p=1时是曼哈顿距离,p=∞时是各个坐标距离的最大值。
使用不同的距离度量所确定的最近邻点是不同的。(数值型数据进行归一化)
在这里插入图片描述
2、k值的选择
k值减小意味着整体模型变复杂,容易过拟合。
k值过大模型变得简单,这时与输入实例不相似的训练实例也会对预测起作用。
一般使用交叉验证的方式来选取最优的k值。
3、分类决策规则:一般使用多数表决,亦等价于经验风险最小化。

2 k近邻法的实现——kd树

1、构造kd树
kd树是一个二叉树,节点记载了【特征坐标、切分轴、指向左支指针、指向右支指针】
特征坐标——线性空间Rn中的一个点(x1,x2,x3……)
切分轴——由一个整数r表示,1<=r<=n,实例有几维特征,切分轴r就等于几。
节点左支和右支也分别为kd树,且满足:如果y是左支的一个特征坐标,那么yr≤xr并且如果Z是右支的一个特征坐标,那么Zr≥Xr。
过程:
首先,给定一个数据样本集S属于Rn和切分轴r,以递归算法构建一个二叉树,每次循环制作一个节点。将S中的所有点以r维坐标的大小进行排列。
再设r=(r+1)mod n,流沿着每一个维度进行分割;到最后每部分剩一个点,将他们记在最底部的节点中,因为不再有未被记录的点,所以不再进行切分。
在这里插入图片描述
在这里插入图片描述
(上图中X(3)应该改为X(1),画图时粗心了)

2、搜索kd树
1、找到叶子节点,看能不能加入到K中
2、回退到父节点,看父节点能不能加入
3、看目标点和回退到的父节点切分线的距离,判断另一个子节点能不能加入到K中

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值