当前位置: 首页 > news >正文

机器学习算法原理之k近邻 / KNN

文章目录

      • k近邻 / KNN
        • 主要思想
        • 模型要素
          • 距离度量
          • 分类决策规则
      • kd树
        • 主要思想
        • kd树的构建
        • kd树的搜索
      • 总结归纳

k近邻 / KNN

主要思想

假定给定一个训练数据集,其中实例标签已定,当输入新的实例时,可以根据其最近的 kkk 个训练实例的标签,预测新实例对应的标注信息。

具体划分,kkk 近邻又可细分为分类问题和回归问题。

分类问题:对新的实例,根据与之相邻的 kkk 个训练实例的类别,通过多数表决等方式进行预测。
回归问题:对新的实例,根据与之相邻的 kkk 个训练实例的标签,通过均值计算进行预测。

输入:训练集
T={(x1,y1),(x2,y2)⋯,(xN,yN)}T=\left\{\left(x_1, y_1\right),\left(x_2, y_2\right) \cdots,\left(x_N, y_N\right)\right\} T={(x1,y1),(x2,y2),(xN,yN)}
​ 其中:xi∈X⊆Rn,y∈Y={c1,c2,⋯,cK}x_i \in \mathcal{X} \subseteq \mathbf{R}^n, y \in \mathcal{Y}=\left\{c_1, c_2, \cdots, c_K\right\}xiXRn,yY={c1,c2,,cK},实例 xxx

输出:实例 xxx 的所属的类 yyy

  • 根据给定的距离度量,计算 xxxTTT 中点的距离;
  • TTT 中找到与 xxx 最邻近的 kkk 个点,涵盖这 kkk 个点的 xxx 的邻域记作 Nk(x)N_k(x)Nk(x)
  • Nk(x)N_k(x)Nk(x) 中根据分类决策规则(如多数表决)决定 xxx 的类别 yyy

y=arg⁡max⁡cj∑xi∈Nk(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\left(y_i=c_j\right), \quad i=1,2, \cdots, N ; j=1,2, \cdots, K y=cjargmaxxiNk(x)I(yi=cj),i=1,2,,N;j=1,2,,K

kkk 近邻法(k-nearest neighbor,k-NN)不具有显性的学习过程(无优化算法,无训练过程),实际上利用训练数据集对特征向量空间进行划分,以其作为分类的“模型”。

模型要素

距离度量

LPL_PLP 距离:特征空间 X\mathcal{X}X 假设为 Rn,∀xi,xj∈X,xi=(xi(1),xi(2),⋯,xi(n))T,xj=(xj(1),xj(2),⋯,xj(n))T\mathbf{R}^n, \forall x_i, x_j \in \mathcal{X}, x_i=\left(x_i^{(1)}, x_i^{(2)}, \cdots, x_i^{(n)}\right)^T, x_j=\left(x_j^{(1)}, x_j^{(2)}, \cdots, x_j^{(n)}\right)^TRn,xi,xjX,xi=(xi(1),xi(2),,xi(n))T,xj=(xj(1),xj(2),,xj(n))T,则有

Lp(xi,xj)=(∑l=1n∣xi(l)−xj(l)∣p)1p,p≥1L_p\left(x_i, x_j\right)=\left(\sum_{l=1}^n\left|x_i^{(l)}-x_j^{(l)}\right|^p\right)^{\frac{1}{p}}, \quad p \geq 1 Lp(xi,xj)=(l=1nxi(l)xj(l)p)p1,p1

欧氏距离(Euclidean distance) ppp = 2
L2(xi,xj)=(∑I=1n∣xi(l)−xj(l)∣2)12L_2\left(x_i, x_j\right)=\left(\sum_{I=1}^n\left|x_i^{(l)}-x_j^{(l)}\right|^2\right)^{\frac{1}{2}} L2(xi,xj)=(I=1nxi(l)xj(l)2)21
曼哈顿距离(Manhattan distance) ppp = 1
L1(xi,xj)=∑l=1n∣xi(l)−xj(l)∣L_1\left(x_i, x_j\right)=\sum_{l=1}^n\left|x_i^{(l)}-x_j^{(l)}\right| L1(xi,xj)=l=1nxi(l)xj(l)
切比雪夫距离(Chebyshev distance)ppp = ∞{\infty}
L∞(xi,xj)=max⁡l∣xi(l)−xj(l)∣L_{\infty}\left(x_i, x_j\right)=\max _l\left|x_i^{(l)}-x_j^{(l)}\right| L(xi,xj)=lmaxxi(l)xj(l)

在这里插入图片描述

分类决策规则

分类函数:
f:Rn→{c1,c2,⋯,cK}f: \mathbf{R}^n \rightarrow\left\{c_1, c_2, \cdots, c_K\right\} f:Rn{c1,c2,,cK}
0-1 损失函数:
L(Y,f(X))={1,Y≠f(X)0,Y=f(X)L(Y, f(X))= \begin{cases}1, & Y \neq f(X) \\ 0, & Y=f(X)\end{cases} L(Y,f(X))={1,0,Y=f(X)Y=f(X)
误分类概率:
P(Y≠f(X))=1−P(Y=f(X))P(Y \neq f(X))=1-P(Y=f(X)) P(Y=f(X))=1P(Y=f(X))
给定实例 x∈Xx \in \mathcal{X}xX ,相应的 kkk 邻域 Nk(x)N_k(x)Nk(x) ,类别为 cjc_jcj ,误分类率:
1k∑xi∈Nk(x)I(yi≠cj)=1−1k∑xi∈Nk(x)I(yi=cj)\frac{1}{k} \sum_{x_i \in N_k(x)} I\left(y_i \neq c_j\right)=1-\frac{1}{k} \sum_{x_i \in N_k(x)} I\left(y_i=c_j\right) k1xiNk(x)I(yi=cj)=1k1xiNk(x)I(yi=cj)
最小化误分析率,等价于:
arg⁡max⁡∑xi∈Nk(x)I(yi=cj)\underset{}{\arg \max } \sum_{x_i \in N_k(x)} I\left(y_i=c_j\right) argmaxxiNk(x)I(yi=cj)

kd树

主要思想

kd 树是一种对 kkk 维空间中的实例点进行储存以便对其进行快速检索的树形数据结构。

本质:二叉树,表示对 kkk 维空间的一个划分。
构造过程:不断地用垂直于坐标轴的超平面kkk 维空间切分,形成 kkk 维超矩形区域。
kd 树的每一个结点对应于一个 kkk 维超矩形区域。

kd树的构建

输入: kkk 维空间数据集:
T={x1,x2,⋯,xN}T=\left\{x_1, x_2, \cdots, x_N\right\} T={x1,x2,,xN}
​ 其中,xi=(xi(1),xi(2),⋯,xi(k))Tx_i=\left(x_i^{(1)}, x_i^{(2)}, \cdots, x_i^{(k)}\right)^Txi=(xi(1),xi(2),,xi(k))T

输出:kd 树

  • 开始:构造根结点。
    • 选取 x(1)x^{(1)}x(1) 为坐标轴,以训练集中的所有数据 x(1)x^{(1)}x(1) 坐标中的中位数(数据集为偶数时,中位数+1)作为切分点,将超矩形区域切割成两个子区域,将该切分点作为根结点。
      由根结点生出深度为 1 的左右子结点,左结点对应坐标小于切分点,右结点对应坐标大于切分点。
  • 重复:
    • 对深度为 jjj 的结点,选择 x(l)x^{(l)}x(l) 为切分坐标轴(切分应垂直于坐标轴),l=j(modk)+1l = j(\ mod \ k) + 1l=j( mod k)+1 ,以该结点区域中所有实例 x(1)x^{(1)}x(1) 坐标的中位数作为切分点,将区域分为两个子区域。
      生成深度为 j+1j+1j1 的左、右子结点。左结点对应坐标小于切分点,右结点对应坐标大于切分点。
  • 直到两个子区域没有实例时停止。

kd树的搜索

输入:已构造的 kd 树,目标点 xxx

输出:xxx 的最近邻

  • 寻找“当前最近点“
    • 从根结点出发,递归访问 kd 树,找出包含 xxx 的叶结点(kd 树的每一个结点对应一个超矩形区域);
    • 以此叶结点为"当前最近点";
  • 回溯
    • 若该结点比“当前最近点”的距离目标更近,更新“当前最近点”;
    • 当前最近点一定存在于该结点一个子结点对应的区域,检查子结点的父结点的另一子结点(子结点的兄弟结点)对应的区域是否有更近的点。
  • 当回退到根结点时,搜索结束,最后的“当前最近点”即为 xxx 的最近邻点。

目标点的最近邻一定在以目标点为中心并通过当前最近点的超球体的内部

如果父结点的另一个子结点的超矩形区域与超球体相交,那么在相交的区域内寻找与目标点更近的实例点

总结归纳

  • 较小的 kkk 值,学习的近似误差减小,但估计误差增大,敏感性增强,而且模型复杂,容易过拟合。
    较大的 kkk 值,减少学习的估计误差,但近似误差增大,而且模型简单。
  • kkk 的取值可通过交叉验证来选择,一般低于训练集样本量的平方根。
  • 分类决策规则使用 0-1 损失函数,因为分类问题只有分类正确和分类错误两种可能。
  • kd 树构建时对于超平面的划分,二位空间划分为矩形,三维空间划分为长方体。
  • 构建完成的 kd 树,类似于二叉排序树,每一层代表着一个维度。
  • kd 树的搜索,类似于二叉排序树的搜索过程。
  • kkk 近邻算法对于高维数据的处理略显缓慢,此时可以考虑数据降维以及 kd 树。
  • kd 树更适用于训练实例数远大于空间维数时的 kkk 近邻搜索。
http://www.lryc.cn/news/13715.html

相关文章:

  • 【期末复习】例题说明Prim算法与Kruskal算法
  • AtCoder Beginner Contest 290 A-E F只会n^2
  • springMvc源码解析
  • 采用aar方式将react-native集成到已有安卓APP
  • Tomcat目录介绍,结构目录有哪些?哪些常用?
  • Elasticsearch也能“分库分表“,rollover实现自动分索引
  • 6 大经典机器学习数据集,3w+ 用户票选得出,建议收藏
  • Logview下载
  • macos 下载 macOS 系统安装程序及安装U盘制作方法
  • c++动态内存分布以及和C语言的比较
  • 软考高级信息系统项目管理师系列之三十一:项目变更管理
  • 【Vue3源码】第二章 effect功能的完善补充
  • CHAPTER 2 Web Server - apache(httpd)
  • 【Vagrant】下载安装与基本操作
  • 常用类(五)System类
  • Navicat Premium 安装 注册
  • 回溯算法总结
  • ccc-pytorch-基础操作(2)
  • 独居老人一键式报警器
  • 软考案例分析题精选
  • 基于SpringBoot+vue的无偿献血后台管理系统
  • 详解js在事件中,如何传递复杂数据类型(数组,对象,函数)
  • 高并发架构 第一章大型网站数据演化——核心解释与说明。大型网站技术架构——核心原理与案例分析
  • VPP接口INPUT节点运行数据
  • RabbitMQ学习(九):延迟队列
  • TCP并发服务器(多进程与多线程)
  • 第1章 Memcached 教程
  • 【2022.12.9】Lammps+Python 在计算g6(r)时遇到的问题
  • MySQL使用C语言连接
  • JavaScript随手笔记---比较两个数组差异