统计学习方法学习笔记-03-k近邻法
首先叙述近邻算法,然后讨论近邻模型及三个基本要素,最后讲述近邻法的一个实现方法,树,介绍构造和搜索树的算法。
k近邻算法
输入:训练数据集,其中,为实例的特征向量,,;实例特征向量
输出:实例所属的类
- 根据给出的距离度量,在训练集中找到和最近的个点,涵盖这个点的的邻域记作
- 在中根据分类决策规则(如多数表决)决定的类别:
为指示函数,当时为1,否则为0
k近邻模型的三要素
近邻法使用的模型实际上对应着对特征空间的划分,模型三要素为距离度量、值的选择和分类决策规则
距离度量
特征空间中两个实例点的距离是两个实例点相似程度的反映。设特征空间是维实数向量空间,
- 距离:
- 欧式距离Euclidean distance:
- 曼哈顿距离Manhattan distance:
- 各个坐标距离的最大值:
k值的选择
- 较小的值:学习的近似误差会减小,估计误差会增大,预测结果会对邻近的实例点非常敏感,如果该点恰好是噪声,预测就会出错,也就是说值的减小会使模型变得复杂,容易发生过拟合。
- 较大的值:学习的近似误差会增大,估计误差会减小,也就是说值的增大会使模型变得简单
- 一般使用交叉验证法来确定该值
分类决策规则
- 多数表决majority voting rule:如果分类的损失函数为0-1损失函数,分类函数为:
那么误分类的概率是
对于给定的实例,其最邻近的个训练实例点构成集合,如果涵盖的区域的类别是,那么误分类率是:
要使误分类率最小即经验风险最小,就要使最大,所以多数表决规则等价于经验风险最小化。
k近邻法的实现:kd树
目的:对训练数据进行快速近邻搜索
构造树
输入:维空间数据集,其中
输出:平衡树
- 构造根节点,使根节点对应于维空间中包含所有实例点的超矩形区域;
- 对于深度为的树结点,选择为切分的坐标轴,,以该结点的区域中的所有实例点的坐标的中位数为切分点,将该结点对应的超矩形区域切分为两个子区域,对应两个子结点,左子结点对应坐标小于切分点的子区域,右子结点对应坐标大于切分点的子区域,将落在切分超平面上的实例点保存在该结点;
- 重复第二步,直到两个子区域内没有实例点时终止;
搜索树
输入:已构造的树,目标点;
输出:的最近邻;
更适用于训练实例数远大于空间维数的情况,平均计算复杂度为
- 在树中找到包含目标点的叶结点:从根节点出发,递归的向下访问树。若目标点的当前维的坐标小于切分点的坐标,则移动到左子结点,否则移动到右子结点,直到子结点为叶结点为止
- 以此叶结点为当前最近点
- 递归的向上回退,在每个结点进行以下操作:如果该结点保存的实例点比当前最近点距离目标更近,则以该实例点为当前最近点;当前的最近点一定存在于该结点一个子结点对应的区域,检查该子结点的父节点的另一个子结点对应的区域是否有更近的点,具体的,检查另一个子结点对应的区域是否与以目标点为球心,以目标点与当前最近点间的距离为半径的超球体相交,如果相交,可能在另一个子结点对应的区域内存在距目标点更近的点,移动到另一个子结点,接着递归的进行最近邻搜索,如果不相交,向上回退,
- 当回退到根结点时,搜索结束,当前最近点即为的最近邻点
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)