k近邻

K近邻是一种惰性分类算法,它不具有显示的学习过程,实际是使用数据集对空间进行划分来进行分类。算法有三要素:距离度量,k的选择,分类决策规则

距离度量

距离反应实例间的相似度。可以使用余弦距离或者 Minkowski 距离。

cos distance

实例 (x^1) 和 (x^2) 的 cos distance

(L(x^1,x^2)=\frac{x^1*x^2}{|x^1||x^2|})

Minkowski distance

实例 (x^1) 和 (x^2) 的 Minkowski distance

(L(x^1,x^2)=(\sum_{i=1}^{n}{|x_{i}^1-x_{i}^2|^p})^{\frac{1}{p}})

  • 当p=1时,称为曼哈顿距离
  • 当p=2时,称为欧式距离
  • 当(p\to\infty): (L=max_{i}|x_{i}^{1}-x_{i}^{2}|)

k值的选择

k值过小

预测结果对现有数据高度敏感,对噪音敏感。相当于使用复杂模型,泛化能力下降,容易过拟合。

k值过大

不相似数据对预测产生影响,相当于使模型简单化,容易欠拟合。

通常使用交叉验证法来选取合适的k值。

分类决策规则

通常使用多数表决。即预测值为k最近邻中,最多的那一类。

k近邻高效实现

如果对k近邻进行线性扫描的话,时间复制度会随着训练数据量的增加而增加。

kd树

kd树通过作垂直于坐标轴的超平面来划分数据区域。

构造kd树

1)以数据集的全集作为树的根节点。

2)以数据第一维的中位数作为切分点,将父节点数据划分到两个子节点中。

3)对样本数量大于等于2的节点重复(2),对深度为j的节点以 j%n+1 维数据中位数作切分点将数据切分到左右两个子节点中。(其中n为样本数据总维数)

搜索kd树

给定搜索目标点,找其最近邻。从父节点开始,以父节点作为当前节点开始算法。

1)根据当前节点深度对应的维度切分点判断搜索目标对应的子树,前往对应子树。

2)重复(1)直至到达叶节点。

3)判断兄弟节点中有无距离搜索目标更近点。若有,移至兄弟节点,转(1);若无,移至父节点,父节点若不是根节点转(3),若是转(4)

4)最后一次访问的叶节点为最近邻点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值