统计学习-k邻近法
k近邻法(k-nearest neighbor, k-NN)可用于分类与回归. 在分类问题中, 假设给定一个训练数据集, 其中的实例类别已定. 分类时, 对新的实例, 根据其k个最按住的训练实例的类别, 通过多数表决等方式进行预测. 不具备显式的学习过程. k值的选择, 距离的度量以及分类决策规则是k按住法的三个基本要素. 可以通过构造k决策树(kd树)的方式进行优化.
假设给定输入空间\(\mathcal{X} \subseteq \mathbf{R}^n\), 输出空间\(\mathcal{Y} = {c_1, c_2, \cdots, c_K}\), 及\(N\)个实例\(T\). 在预测时, 输入实例\(x\), 输出\(y\). 根据给定距离度量方式, 在训练集\(T\)中找出与\(x\)最邻近的\(k\)个点\(N_k(x)\), 根据分类策规则选取这些点中含有的某个数量最多的类别\(c\)作为输出. 即: \begin{align} \label{eq:max} y = \arg \min_{c_j} \sum_{x_i \in N_k(x)} I(y_i=c_j), i = 1, 2, \cdots, N; j = 1, 2, \cdots, K \end{align}
\(k=1\)称为最近邻算法
\(L_p\)距离: 设特征空间\(\mathcal{X}\)是\(n\)维实数向量空间\(\mathbf{R}^n\), 对于任意两点\(x_i, x_j \in \mathcal{X}\), 其\(L_p\)距离定义为 \begin{align} L_p(x_i, x_j) = \left( \sum_{l=1}^n \left|x_i^{(l)} - x_j{(l)}\right|p\right)^{\frac{1}{p}} \end{align} 其中\(p \geqslant 1\), 当\(p = 2\)时称为欧氏距离, 当\(p = 1\)时称为曼哈顿距离, 当\(p=\infty\), 表示各个元素中差值最大的一个的绝对值.
距离度量: 通常使用欧氏距离, 但是也可以使用\(L_p\)距离或者Minkowski距离等.
k值的选择: 通常采用交叉验证法来选取最优的\(k\)值, 如果过小, 意味着整体模型变得复杂, 容易发生过拟合, 反之则模型变简单.
决策规则: 通常采用多数表决 \eqref{eq:max}, 如果采用0-1损失函数, 则其等价于经验风险最小化.
\(kd\) 树
k维二叉决策树, 不是k近邻树
构造平衡kd树:
输入: k维空间数据集\(T = \{x_1, x_2, \cdots, x_N\}, x_i = (x_i^{(1)}, x_i^{(2)}, \cdots, x_i^{(k)})^T\)
- 开始: 选取第1维数据的中位数(向下取整)作为根结点, 将数据分为三个部分: 左枝为第1维数据中小于中位数的数据集, 右枝为大于, 等于的结点则作为根结点的key
- 重复: 对于深度为\(j\)的结点, 选取第\(l=j(\mod k) + 1\)维数据的中位数作为切分点, 和步骤1一样, 分为三个部分
- 直到左枝或右枝为空集时停止.
搜索平衡kd树:
输入: 一棵平衡kd树, 目标点\(x\)
输出: \(x\)的最近邻
- 找到\(x\)在树中的叶结点位置(如果某一维度与内部结点的此维度相等, 则在右结点为查找) Why? \(O(\lg N)\)
- 假定此叶结点为最近邻
- 向上递归查找
i. 如果该结点保存的实例结点比当前最近点更近, 则更新最近邻
ii. 如果该结点切面与以当前最近邻点的距离为直径, 输入点为球心的超球相交, 则在其另一支中查找更新最近邻(可以通过切面是否相交判断是否两枝均要搜索), 然后以此结点为当前最近邻, 与当前节点的父结点比较大小更新, 同时与父节点另一支比较是否相交, 递归查找
iii. 如果不相交, 则忽略其另一支, 向上继续查找 - 递归结束时, 最近邻即为所求
- 若需要求\(k'\)个最近邻? How to?

浙公网安备 33010602011771号