热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

《统计学习方法》:第三章K近邻算法

kNNkNN是一种基本分类和回归方法。对新实例进行分类时,通过已经训练的数据求出k个最近实例,通过多数表决进行分类。故k邻近算法具有不显式的学习过程。三个基本要素:k值选择,距离度

k -- NN

k--NN 是一种基本分类和回归方法。对新实例进行分类时,通过已经训练的数据求出 k 个最近实例,通过多数表决进行分类。故 k 邻近算法具有不显式的学习过程。

三个基本要素:k 值选择,距离度量,分类决策规则。

1. k 近邻算法

原理:给定一个训练集,对于新输入的实例,在训练集中找到与其相似的 k 个实例,这 k 个实例的多数属于某一类,就将该实例归属到这一类。

输入:训练数据集 \(T = \{(x_1,y_1),(x_2,y_2),...,(x_3,y_3)\}\)

其中,\(x_i \in X \subseteq R^n\) 为实例的特征向量, \(y_i \in Y = \{c_1,c_2,...,c_k\}\) 为实例的类别, \(i = 1,2,3,...,N\);实例特征向量 \(x\)

输出:实例 \(x\) 所属的类 \(y\)

(1) 在训练集找出与 \(x\) 最相似的 k 个点,涵盖这 k 个点的 \(x\) 领域记作 \(N_k(x)\)

(2) 在 \(N_k(x)\) 中根据分类决策规则(如多数表决)决定 \(x\) 的类别 \(y\)

? \(y = argmax_{c_j} \sum_{x_i \in N_k(x)} I(y_i = c_j),\) \(i = 1,2,...,N; j = 1,2,...,K\)

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

k 近邻算法的特殊情况:k = 1 时,称为最近邻算法。

k 近邻法没有显示的学习过程。

2. k 近邻模型

2.1 模型

在特征空间中,对每个训练实例点 \(x_i\) ,距离该点比其他点更近的所有点组成一个区域叫做单元(cell)。每个训练实例点拥有一个单元,所有训练实例点的单元构成对特征空间的一个划分。

2.2 距离度量

特征空间中两个实例点的距离是两个实例点相似程度的反映。距离有欧氏距离、\(L_p\) 距离(\(L_p\) distance)或 Mainkowski 距离。

设特征空间 \(X\)\(n\) 维实数向量空间 \(R^n\)\(x_i,x_j \in X\)\(x_i = (x_i^{(1)},x_i^{(2)},...,x_i^{(n)})^T\)\(x_j = (x_j^{(1)},x_j^{(2)},...,x_j^{(n)})^T\),则 \(x_i,x_j\)\(L_p\) 定义为:

\(L_p(x_i,x_j) = (\sum_{l = 1}^n |x_i^{(l)} - x_j^{(l)}|^p)^{\frac{1}{p}}\)\(p \geq 1\)

\(p = 2\) 时称为欧氏距离,\(p = 1\) 时称为曼哈顿距离

\(p = \infty\) 时是各个坐标距离的最大值,即:\(L_{\infty} = \max_l |x_i^(l) - x_j^(l)|\)

2.3 k 值的选择

  1. 较小的 k 值:相当于用较小的领域中的训练实例进行预测。

    优点:学习的近似误差(approximation error)会减小;

    缺点:学习的估计误差(estimation error)会增大,预测结果对近邻的实例点非常敏感。模型变复杂,容易发生过拟合。

  2. 较大的 k 值:相当于用较大领域中的训练实例进行预测。

    优点:学习的估计误差会减小;

    缺点:学习的近似误差会变大,与输入实例距离较远(不相似)的训练实例也会起预测作用。模型变简单。

k 值一般取较小的数值。

近似误差可以理解为模型估计值与实际值之间的差距。

估计误差可以理解为模型的估计系数与实际系数之间的差异。

2.4 分类决策规则

对于多数表决规则,若分类的损失函数是 0 - 1 损失函数,分类函数为:\(f:R^n \rightarrow \{c_1,c_2,...,c_K\}\)

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

对于给定实例 \(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)\) 最大。

综上,多数表决规则等价于经验风险最小化。

3. k 近邻法的实现:kd 树

3.1 构造 kd 树

kd 树是一种对 k 维空间中的实例点进行存储以便对其进行快速检索的树形数据结构,其每个结点对应一个 k 维超矩形区域。

构造:

输入: k 维空间数据集 \(T = \{x_1, x_2,...,x_N\}\),其中 \(x_i = (x_i^{(1)},x_i^{(2)},...,x_i^{(k)})^T\)\(i = 1,2,3,...,N\)

(1) 根节点的构造:选择 \(x^{(1)}\) 作为坐标轴,求出所有实例点中 \(x^{(1)}\) 的中位数,并以其为根节点对数据集进行划分。小于切分的的实例点成为左子结点,大于的成为右子节点。

(2) 重复:对于深度为 j 的结点,选择 \(x^{(l)}\) 为坐标轴,\(l = j \mod k + 1\),并以 \(x^{(l)}\) 的中位数作为切分点进行切分。

(3) 直到两个子区域没有实例存在时停止。

3.2 搜索 kd 树

输入:已构造的 kd 树,目标点 \(x\)

输出:\(x\) 的最近邻(以最近邻为例)

(1) 从根结点出发,用类似于查找二叉搜索树的方法找到一个叶结点。

(2) 以该叶节点为“当前最近结点”

(3) 递归向上回退,每个结点执行以下操作:

? (a) 若该结点保存的实例比当前最近点到目标的距离最小,则更新它为“当前最近点”。

? (b) 检查该结点的另一子结点对应的区域是否与以目标点为球心,以目标点与“当前最近点”距离为半径的超球体相交。若相交则移动到该子结点进行递归;否则回退。

(4) 当回退到根节点是结束。

kd 树更适合训练实例数远大于空间维数的 k 邻近搜索,复杂度为 \(O(logN)\)

更具体的实现可参考书上的例 3. 3

4. 代码实现

[https://github.com/a74731248/statistical_learning_method/tree/master/k-nearest neighbor](https://github.com/a74731248/statistical_learning_method/tree/master/k-nearest neighbor)

《统计学习方法》:第三章 K 近邻算法


推荐阅读
  • 本文介绍了lua语言中闭包的特性及其在模式匹配、日期处理、编译和模块化等方面的应用。lua中的闭包是严格遵循词法定界的第一类值,函数可以作为变量自由传递,也可以作为参数传递给其他函数。这些特性使得lua语言具有极大的灵活性,为程序开发带来了便利。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 如何用UE4制作2D游戏文档——计算篇
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了如何用UE4制作2D游戏文档——计算篇相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了C#中生成随机数的三种方法,并分析了其中存在的问题。首先介绍了使用Random类生成随机数的默认方法,但在高并发情况下可能会出现重复的情况。接着通过循环生成了一系列随机数,进一步突显了这个问题。文章指出,随机数生成在任何编程语言中都是必备的功能,但Random类生成的随机数并不可靠。最后,提出了需要寻找其他可靠的随机数生成方法的建议。 ... [详细]
  • 生成对抗式网络GAN及其衍生CGAN、DCGAN、WGAN、LSGAN、BEGAN介绍
    一、GAN原理介绍学习GAN的第一篇论文当然由是IanGoodfellow于2014年发表的GenerativeAdversarialNetworks(论文下载链接arxiv:[h ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
author-avatar
笑如夏风_503
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有