k近邻

来源:互联网 发布:解除防沉迷软件 编辑:程序博客网 时间:2024/04/28 00:26
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 0
原创粉丝点击