ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

统计学习方法学习笔记-03-k近邻法

2022-09-14 17:02:59  阅读:75  来源: 互联网

标签:03 结点 kd 近邻 学习 cdots 实例 sum


首先叙述\(k\)近邻算法,然后讨论\(k\)近邻模型及三个基本要素,最后讲述\(k\)近邻法的一个实现方法,\(kd\)树,介绍构造和搜索\(kd\)树的算法。

k近邻算法

输入:训练数据集\(T = \{(x_1,y_1),(x_2,y_2),\cdots,(x_N,y_N)\}\),其中,\(x_i \in \mathcal{X} \subseteq R^n\)为实例的特征向量,\(y_i \in \mathcal{Y} = \{c_1,c_2,\cdots,c_K\}为实例的类别\),\(i = 1,2,\cdots,N\);实例特征向量\(x\)
输出:实例\(x\)所属的类\(y\)

  • 根据给出的距离度量,在训练集中找到和\(x\)最近的\(k\)个点,涵盖这\(k\)个点的\(x\)的邻域记作\(N_k(x)\)
  • 在\(N_k(x)\)中根据分类决策规则(如多数表决)决定\(x\)的类别\(y\):

\[y = arg\ \mathop{max}\limits_{c_j}\sum_{x_i \in N_k(x)}I(y_i = c_j),i = 1,2,\cdots,N;j = 1,2,\cdots,K \]

\(I\)为指示函数,当\(y_i = c_j\)时\(I\)为1,否则为0

k近邻模型的三要素

\(k\)近邻法使用的模型实际上对应着对特征空间的划分,模型三要素为距离度量、\(k\)值的选择和分类决策规则

距离度量

特征空间中两个实例点的距离是两个实例点相似程度的反映。设特征空间\(\mathcal{X}\)是\(n\)维实数向量空间\(R^n\),\(x_i,x_j \in \mathcal{X},x_i = (x_i^{(1)},x_i^{(2)},\cdots,x_i^{(n)})^T,x_j = (x_j^{(1)},x_j^{(2)},\cdots,x_j^{(n)})^T\)

  • \(L_p\)距离:

\[L_p(x_i,x_j) = \left(\sum_{l=1}^n|x_i^{(l)} - x_j^{(l)}|^p \right)^{\frac{1}{p}} \]

  • 欧式距离Euclidean distance:\(p = 2\)

\[L_2(x_i,x_j) = \left(\sum_{l=1}^n|x_i^{(l)} - x_j^{(l)}|^2 \right)^{\frac{1}{2}} \]

  • 曼哈顿距离Manhattan distance:\(p = 1\)

\[L_1(x_i,x_j) = \sum_{l=1}^n|x_i^{(l)} - x_j^{(l)}| \]

  • 各个坐标距离的最大值:\(p = \infty\)

\[L_{\infty}(x_i,x_j) = \mathop{max}\limits_l|x_i^{(l)} - x_j^{(l)}| \]

k值的选择

  • 较小的\(k\)值:学习的近似误差会减小,估计误差会增大,预测结果会对邻近的实例点非常敏感,如果该点恰好是噪声,预测就会出错,也就是说\(k\)值的减小会使模型变得复杂,容易发生过拟合。
  • 较大的\(k\)值:学习的近似误差会增大,估计误差会减小,也就是说\(k\)值的增大会使模型变得简单
  • 一般使用交叉验证法来确定该值

分类决策规则

  • 多数表决majority voting rule:如果分类的损失函数为0-1损失函数,分类函数为:

\[f:R^n \rightarrow \{c_1,c_2,\cdots,c_k\} \]

那么误分类的概率是

\[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(y_i \neq c_j) = 1 - \frac{1}{k}\sum_{x_i \in N_k(x)}I(y_i = c_j) \]

要使误分类率最小即经验风险最小,就要使\(\sum_{x_i \in N_k(x)}I(y_i = c_j)\)最大,所以多数表决规则等价于经验风险最小化

k近邻法的实现:kd树

目的:对训练数据进行快速\(k\)近邻搜索

构造\(kd\)树

输入:\(k\)维空间数据集\(T = \{x_1,x_2,\cdots,x_N\}\),其中\(x_i = (x_i^{(1)},x_i^{(2)},\cdots,x_i^{(k)})^T,i = 1,2,\cdots,N\)
输出:平衡\(kd\)树

  • 构造根节点,使根节点对应于\(k\)维空间中包含所有实例点的超矩形区域;
  • 对于深度为\(j\)的树结点,选择\(x^{(l)}\)为切分的坐标轴,\(l = j(mod\ k) + 1\),以该结点的区域中的所有实例点的\(x^{(l)}\)坐标的中位数为切分点,将该结点对应的超矩形区域切分为两个子区域,对应两个子结点,左子结点对应坐标\(x^{(l)}\)小于切分点的子区域,右子结点对应坐标\(x^{(l)}\)大于切分点的子区域,将落在切分超平面上的实例点保存在该结点
  • 重复第二步,直到两个子区域内没有实例点时终止;

搜索\(kd\)树

输入:已构造的\(kd\)树,目标点\(x\);
输出:\(x\)的最近邻;
更适用于训练实例数远大于空间维数的情况,平均计算复杂度为\(O(\log N)\)

  • 在\(kd\)树中找到包含目标点\(x\)的叶结点:从根节点出发,递归的向下访问\(kd\)树。若目标点\(x\)的当前维的坐标小于切分点的坐标,则移动到左子结点,否则移动到右子结点,直到子结点为叶结点为止
  • 以此叶结点为当前最近点
  • 递归的向上回退,在每个结点进行以下操作:如果该结点保存的实例点比当前最近点距离目标更近,则以该实例点为当前最近点;当前的最近点一定存在于该结点一个子结点对应的区域,检查该子结点的父节点的另一个子结点对应的区域是否有更近的点,具体的,检查另一个子结点对应的区域是否与以目标点为球心,以目标点与当前最近点间的距离为半径的超球体相交,如果相交,可能在另一个子结点对应的区域内存在距目标点更近的点,移动到另一个子结点,接着递归的进行最近邻搜索,如果不相交,向上回退,
  • 当回退到根结点时,搜索结束,当前最近点即为\(x\)的最近邻点

标签:03,结点,kd,近邻,学习,cdots,实例,sum
来源: https://www.cnblogs.com/eryoyo/p/16693672.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有