距离度量
距离反应实例间的相似度。可以使用余弦距离或者 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)最后一次访问的叶节点为最近邻点。