统计学习方法——第3章 k近邻法

3.1 k近邻法介绍

k近邻法是一种基本的分类与回归方法。对于分类问题,给定训练数据集和实例标签。分类时,对新的实例,根据k个最近邻的训练实例的类别,通过多数表决等方式进行预测。因此,k近邻法不具有显示的学习过程。k近邻法实际上利用训练数据集对特征空间进行划分,并作为分类的“模型”。k值的选择、距离的度量和分类决策规则是k近邻法的三个基本要素

k值的选择

k值的选择对k近邻算法具有较大影响。

如果选择的k值较小,相当于用较小的领域中的训练实例进行预测,“学习”的“近似”误差会减小,只有与输入实例较近的训练实例才会对预测结果起作用,“学习”的“估计”误差会增大,预测结果对近邻的实例点非常敏感。如果邻近的实例的恰巧是噪声,预测就会出错。所以,k值较小,相当于模型整体复杂度较高,容易发生过拟合

如果选择的k值较大,相当于用较大的领域中的训练实例进行预测,“学习”的“近似”误差会增大,大量的训练实例对预测结果起控制作用,结果较远的点也会对预测起作用,“学习”的“估计”误差会减小,预测结果是众多结果的综合效果。。所以,k值较大,相当于模型整体复杂度较低,容易发生欠拟合

距离的度量

k近邻模型的特征空间一般是n维实数向量空间R^nx_{i}, x_{i} \in \mathcal{X}, \quad x_{i}=\left(x_{i}^{(1)}, x_{i}^{(2)}, \cdots, x_{i}^{(n)}\right)^{\mathrm{T}},x_{j}=\left(x_{j}^{(1)}, x_{j}^{(2)}, \cdots, x_{j}^{(n)}\right)^{\mathrm{T}},使用的距离是欧式距离,也可以使用其他距离,如更一般的L_p距离。

设特征空间\mathcal{X}是n维实数向量空间\mathbf {R}^n,x_{i}, x_{i} \in \mathcal{X}, \quad x_{i}=\left(x_{i}^{(1)}, x_{i}^{(2)}, \cdots, x_{i}^{(n)}\right)^{\mathrm{T}},x_{j}=\left(x_{j}^{(1)}, x_{j}^{(2)}, \cdots, x_{j}^{(n)}\right)^{\mathrm{T}},x_ix_j的距离定义为(1 \leq p):

p=2时,称为欧式距离:L_{2}\left(x_{i}, x_{j}\right)=\left(\sum_{l=1}^{n}\left|x_{i}^{(l)}-x_{j}^{(l)}\right|^{2}\right)^{\frac{1}{2}}

p=1时,称为曼哈顿距离:L_{1}\left(x_{i}, x_{j}\right)=\sum_{i=1}^{n}\left|x_{i}^{(l)}-x_{j}^{(l)}\right|

p=\infty时,L_{\infty}\left(x_{i}, x_{j}\right)=\max _{l}\left|x_{i}^{(l)}-x_{j}^{(l)}\right|

二维空间的不同取值与原点的距离为1的点的集合如下:

 

分类决策规则

多数表决规则(majority voting rule):如果分类损失函数为0-1损失函数,分类函数为:

                                                                 f : \mathbf{R}^{n} \rightarrow\left\{c_{1}, c_{2}, \cdots, c_{k}\right\}

则误分类概率:P(Y \neq f(X))=1-P(Y=f(X))

对给定的实例x \in \mathcal{X},其最最近邻的k个训练实例点构成集合N_k(x),如果涵盖的区域N_k(x)的类别是c_j,则误分类率为:

                                                            \frac{1}{k} \sum_{x_{i} \in N_{k}(x)} I\left(y_{i} \neq c_{j}\right)=1-\frac{1}{k} \sum_{x_{k} \in N_{k}(x)} I\left(y_{i}=c_{j}\right)

要使误分类概率最小即经验风险最小,就要使\sum_{x \in V_{f}(x)} I\left(y_{i}=c_{j}\right)最大,所以多数表决规则等价于经验风险最小化。

3.2 k近邻算法--kd树

平衡kd树

输入:k维空间数据集T=\left\{x_{1}, x_{2}, \cdots, x_{N}\right\},其中x_{i}=\left(x_{i}^{(1)}, x_{i}^{(2)}, \cdots, x_{i}^{(k)}\right)^{\mathrm{T}}, \quad i=1,2, \cdots, N;

输出:kd树

(算法描述略)

实例:

构造kd树:

 

最近邻分类:给定点(3, 5)实现最近邻搜索

 1首先从根节点(7,2)出发,将当前最近邻设为(7,2),对该k-d tree作深度优先遍历。以(3,5)为圆心,其到(7,2)的距离为半径画        圆(多维空间为超球面),可以看出(8,1)右侧的区域与该圆不相交,所以(8,1)的右子树全部忽略。
2)接着走到(7,2)左子树根节点(5,4),与原最近邻对比距离后,更新当前最近邻为(5,4)。以(3,5)为圆心,其到(5,4)的距离为半径        画圆,发现(7,2)右侧的区域与该圆不相交,忽略该侧所有节点,这样(7,2)的整个右子树被标记为已忽略。
3)遍历完(5,4)的左右叶子节点,发现与当前最优距离相等,不更新最近邻。所以(3,5)的最近邻为(5,4)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章