《统计学学习方法》阅读笔记2:k近邻算法

牧云@^-^@ 提交于 2020-03-04 21:24:57

k近邻法

1、k近邻算法

输入: 训练集数据
T={(x1,y1),(x2,y2),...,(xN,yN)}T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\}
其中,xiXRnx_i \in X \subseteq R^n 是实例的特征向量,yiY={c1,c2,...,cK}y_i \in Y = \{c_1,c_2,...,c_K\} 是实例的类别,i=1,2,...,Ni=1,2,...,N
输出:实例 xx 所属的类 yy
(1)根据给定的
距离度量
,在训练集 TT 中找出与 xx 最邻近的 kk 个点,涵盖这 kk 个点的 xx 的邻域记作 Nk(x)N_k(x)
(2)在 Nk(x)N_k(x) 中根据分类决策规则决定(如多数表决) xx 的类别 yy
y=arg maxcjxiNk(x)I(yi=cj), i=1,2,...,N;j=1,2,...,Ky= \underset{c_j}{arg\ max} \sum_{x_i \in N_k(x)} I(y_i=c_j),\ i=1,2,...,N; j=1,2,...,K
其中 II 是指示函数,当 yi=cjy_i=c_jII 为1,否则 II 是0。

2、k近邻模型

模型三要素:度量距离、k值、分类决策规则

  • 距离度量
    距离反应了两个实例点之间相似程度。常见距离有 LpL_p 距离、Minkowski距离、欧式距离。
    XXn 维实数向量空间 RnR^nxi=(xi(1),xi(2),...,xi(n))Tx_i=(x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T
    • LpL_p距离定义为:
      Lp(xi,xj)=(l=1nxi(l)xj(l)p)1p L_p(x_i,x_j)=(\sum_{l=1}^{n}|x_i^{(l)}-x_j^{(l)}|^p)^{\frac{1}{p}}
    • 曼哈顿距离,上式中 p=1p=1
    • 欧式距离,上式中 p=2p=2
    • p=p=\infty 时是各个坐标距离的最大值,即
      L(xi,xj)=maxlxi(l)xj(l)L_{\infty}(x_i,x_j)=\underset{l}{max}|x_i^{(l)}-x_j^{(l)}|
  • k值选择
    k值的选择对结果产生重大影响
    k值 近似误差 估计误差 模型复杂度 说明
    k值较小 减小 增大 模型复杂化 对近邻点敏感,容易过拟合
    k值较大 增大 减小 模型简单化 邻域中不相似的点干扰分类结果
    注: 近似误差,可以理解训练集的训练误差。估计误差,可以理解为对测试集的测试误差。
    在应用中一般 kk 选择较小的值,使用交叉验证法选取最优值。
  • 分类决策规则
    多数表决规则(等价于经验最小化)

3、k近邻的实现:kd

平衡 kd 树构造算法
输入:k 维空间数据集 T={x1,x2,...,xN}T=\{x_1,x_2,...,x_N\}
输出:kd
(1)开始构造根节点,根节点包含所有样例点的超矩形;选择 x(1)x^{(1)} 为坐标轴,以 T 中所有实例 x(1)x^{(1)}中位数为切分点,将根节点对应的超矩形切分为两个子区域。切分由过 x(1)x^{(1)} 中位数的点且垂直于 x(1)x^{(1)} 轴的超平面实现。
以根节点生成深度为1的左、右结点:左子树对应 x(1)x^{(1)} 的坐标小于切分点的子区域,右子树对应 x(1)x^{(1)} 大于切分点的子区域。
将落在超平面上的点放在根节点中。
(2)重复:深度的为 j 的结点,选择 xlx_{l} 为切分的坐标轴,其中 l=j mod k +1l=j\ mod\ k\ + 1 。选择 x(l)x^{(l)}中位数作为切分点。
(3)直到两个顶点之间没有实例存在时停止,从而形成 kd 树。

kd 树邻近搜索
输入:kd 树;目标点 x
输出:x 的最近邻点
(1)在 kd 树中搜索包含 x叶子结点
(2)以此叶结点为当前最近叶结点;
(3)递归回退,进行如下操作:
(a)若该结点保存的实例比当前最近结点更靠近目标点,则以该实例为“当前最近点”;
(b)当前最近点一定存在于该结点一个子结点对应的区域内。检查该结点的父结点的另一个子结点对应的区域是否有更近的点。具体来说就是检出另一个结点对应的区域是否与以目标点为中心、目标点到“当前最近点”间的距离为半径的超球体相交。
若相交则移动到另一个结点,接着递归搜索最近邻搜索。
(4)当回退到根节点,搜素结束。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!