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

news2024/12/24 10:12:25

文章目录

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

k近邻 / KNN

主要思想

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

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

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

输入:训练集
T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) ⋯   , ( x N , y N ) } 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)}
​ 其中: x i ∈ X ⊆ R n , y ∈ Y = { c 1 , c 2 , ⋯   , c K } 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},实例 x x x

输出:实例 x x x 的所属的类 y y y

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

y = arg ⁡ max ⁡ c j ∑ x i ∈ N k ( x ) I ( y i = c j ) , i = 1 , 2 , ⋯   , N ; j = 1 , 2 , ⋯   , K y=\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

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

模型要素

距离度量

L P L_P LP 距离:特征空间 X \mathcal{X} X 假设为 R n , ∀ x i , x j ∈ 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 \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)^T Rn,xi,xjX,xi=(xi(1),xi(2),,xi(n))T,xj=(xj(1),xj(2),,xj(n))T,则有

L p ( x i , x j ) = ( ∑ l = 1 n ∣ x i ( l ) − x j ( l ) ∣ p ) 1 p , p ≥ 1 L_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=1n xi(l)xj(l) p)p1,p1

欧氏距离(Euclidean distance) p p p = 2
L 2 ( x i , x j ) = ( ∑ I = 1 n ∣ x i ( l ) − x j ( l ) ∣ 2 ) 1 2 L_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=1n xi(l)xj(l) 2)21
曼哈顿距离(Manhattan distance) p p p = 1
L 1 ( x i , x j ) = ∑ l = 1 n ∣ x i ( l ) − x j ( 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=1n xi(l)xj(l)
切比雪夫距离(Chebyshev distance) p p p = ∞ {\infty}
L ∞ ( x i , x j ) = max ⁡ l ∣ x i ( l ) − x j ( l ) ∣ L_{\infty}\left(x_i, x_j\right)=\max _l\left|x_i^{(l)}-x_j^{(l)}\right| L(xi,xj)=lmax xi(l)xj(l)

在这里插入图片描述

分类决策规则

分类函数:
f : R n → { c 1 , c 2 , ⋯   , c K } 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 ∈ X x \in \mathcal{X} xX ,相应的 k k k 邻域 N k ( x ) N_k(x) Nk(x) ,类别为 c j c_j cj ,误分类率:
1 k ∑ x i ∈ N k ( x ) I ( y i ≠ c j ) = 1 − 1 k ∑ x i ∈ N k ( x ) I ( y i = c j ) \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 ⁡ ∑ x i ∈ N k ( x ) I ( y i = c j ) \underset{}{\arg \max } \sum_{x_i \in N_k(x)} I\left(y_i=c_j\right) argmaxxiNk(x)I(yi=cj)

kd树

主要思想

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

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

kd树的构建

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

输出:kd 树

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

kd树的搜索

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

输出: x x x 的最近邻

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

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

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

总结归纳

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/358225.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

5.5 配置路由反射器

5.3.2配置路由反射器 1. 实验目的 熟悉路由反射器的应用场景掌握路由反射器的配置方法2. 实验拓扑 实验拓扑如图5-5所示: 图5-5:配置路由反射器 3. 实验步骤 (1) 配置IP地址 R1的配置 <Huawei>sy…

JVM学习笔记三:运行时数据区之程序计数器

目录 概述 字节码取指令举例 CPU时间片 经典问题 使用PC寄存器存储字节码指令地址有什么用呢&#xff1f; 为什么使用PC寄存器记录当前线程的执行地址呢&#xff1f; 概述 运行时数据区中运行速度最快的存储区域&#xff0c;并且是线程私有的&#xff0c;每一个线程都具…

在线教育有什么优势?

AI 1、便捷性&#xff1a;在线教育可以让学生在家里或者其他任何地方学习&#xff0c;不受时间和地点的限制&#xff0c;可以随时随地学习&#xff0c;极大的方便了学习者。 2、节约成本&#xff1a;在线教育可以节约学习者的时间和金钱&#xff0c;学习者可以节省出去上学的…

【MFC】数据库操作——ODBC(20)

ODBC:开放式数据库连接&#xff0c;是为解决异构数据库&#xff08;不同数据库采用的数据存储方法不同&#xff09;共享而产生的。ODBC API相对来说非常复杂&#xff0c;这里介绍MFC的ODBC类。 添加ODBC用户DSN 首先&#xff0c;在计算机中添加用户DSN&#xff1a;(WIN10下&a…

详解js在事件中,如何传递复杂数据类型(数组,对象,函数)

文章目录 前言一、何谓预编译&#xff0c;变量提升&#xff1f;二、复杂数据类型的传递 1.数组2.对象3.函数总结前言 在JavaScript这门编程语言学习中&#xff0c;如何传参&#xff0c;什么是变量提升&#xff0c;js代码预编译等等。要想成为一名优秀的js高手&#xff0c;这些内…

一个页面分成几块展示

每一项占用一个div,里面展示的是具体的图文内容,页面底部展示的是当前页码和总数,实现效果如下: 代码如下: <div class"header"></div><div class"main-content"><divclass"equipment-item"v-for"item in equipmentL…

OpenCV-PyQT项目实战(8)项目案例03:鼠标定位

欢迎关注『OpenCV-PyQT项目实战 Youcans』系列&#xff0c;持续更新中 OpenCV-PyQT项目实战&#xff08;1&#xff09;安装与环境配置 OpenCV-PyQT项目实战&#xff08;2&#xff09;QtDesigner 和 PyUIC 快速入门 OpenCV-PyQT项目实战&#xff08;3&#xff09;信号与槽机制 …

信创引领丨呼叫中心加速适配国产化

随着信创产业的高速发展&#xff0c;企业服务软件高度适配国产操作系统成为大势所趋。早在2020年&#xff0c;佳信客服平台就正式通过“华为云鲲鹏云服务”平台系统的兼容性测试与认证&#xff0c;成为鲲鹏凌云伙伴&#xff0c;也意味着佳信客服平台正式与国产硬件平台及操作系…

【Kubernetes 企业项目实战】07、最新一代微服务网格 Istio 入门到企业实战(下)

目录 一、istio 核心资源解读 1.1 Gateway 总结&#xff1a; 1.2 VirtualService 1.2.1 VirtualService 主要由以下部分组成 1.2.2 virtualservice 配置路由规则 1.2.3 路由规则优先级 1.2.4 多路由规则解读 1.3 DestinationRule 二、istio 核心功能演示 2.1 断路器…

【离散数学】1. 数理逻辑

1.数理逻辑 2. 集合论 3. 代数系统 4. 图论 离散数学&#xff1a;研究离散量结构及相互关系的学科 数理逻辑集合论代数系统图论 逻辑&#xff1a;研究推理的科学 数学方法&#xff1a;引进一套符号系统的方法 数理逻辑是用数学方法研究形式逻辑的科学&#xff0c;即使用符号化…

vue环境总结

因将node.js升级后&#xff0c;打包运行出错了。后来加班重新改好。 一、用nvm管理可以用命令将node和npm对应安装 1.首先在控制台输入where node查看之前本地安装的node的路径 2.将node目录删除或者卸载 二、1.安装nvm 从官网下载安装包 https://github.com/coreybutler/nvm…

JDK定时器Timer原理

前言 前些时间想到利用redis实现延时队列&#xff0c;但是底层的定时器不止如何实现好些&#xff0c;故此研究了一下jdk的Timer。 Timer是一个用于执行定时任务的类&#xff0c;可以单次执行或按指定时间间隔循环执行&#xff08;直到主动cancel或线程被杀掉&#xff09;。Ti…

大数据之---Nifi-Nifi模板_具体使用方法---大数据之Nifi工作笔记0009

然后我们来看看,如果好不容易设计了一个流程,那么是可以通过 使用模板来让流程复用的 可以看到可以创建模板,一会说怎么用具体,上面已经 写清楚了,如何创建模板 我们看一下左侧的operate,这里可以看到这里就可以创建模板 可以看到小手那个地方,点击就可以创建模板了 可以看到…

python k8s库,read_namespaced_config_map:maximum recursion depth exceeded

使用背景 在python中&#xff0c;调用了gevent库&#xff0c;同时引用了官方的k8s库接口&#xff1a; GitHub - kubernetes-client/python: Official Python client library for kubernetesOfficial Python client library for kubernetes. Contribute to kubernetes-client/…

Node.js安装配置及Angular CLI的安装

NodeJS的安装node.js官网下载地址: https://nodejs.org/en/download/在node.js的官网上面下载适合自己机型的&#xff0c;如果是Windows系统的话&#xff0c;建议下载对应的 Windows Installer (.msi) 。下载完成后&#xff0c;双击打开安装&#xff0c;安装路径最好自定义&…

Melis4.0[D1s]:1.启动流程(与adc按键初始化相关部分)跟踪笔记

文章目录1.启动流程1.1 最先进入的文件&#xff1a;head_s.S1.2 start_kernel()函数所在的文件&#xff1a;init.c1.3 input_init()函数所在文件&#xff1a;sys_input.c1.4 INPUT_LKeyDevInit()所在文件&#xff1a;keyboarddev.c1.5 esINPUT_RegLdev()所在文件&#xff1a;in…

LVS负载均衡

文章目录前言一、LVS模式-DR二、ipvsadm配置参数三、DR模式的部署server1:调度器&#xff08;VS&#xff09;server2:真实服务器&#xff08;RS&#xff09;server3:真实服务器&#xff08;RS&#xff09;真实服务器(server2和server3)屏蔽客户端测试&#xff1a;纯代码步骤演示…

SpringCloud保姆级搭建教程六---ElasticSearch

es下载地址&#xff1a;https://www.elastic.co/cn/downloads/elasticsearch 最新版本或者 https://github.com/elastic/elasticsearch 7.17.9kibana下载地址&#xff1a;https://github.com/elastic/kibana 各个版本jdk8 对应的es应该是7.*版本&#xff0c;最新的es应该对应的…

【论文及代码详解】BEIT: BERT Pre-Training of Image Transformers

记录下论文《BEIT: BERT Pre-Training of Image Transformers》&#xff0c;这是一篇将Transformer应用于图像领域&#xff0c;并使用自监督方法进行参数初始化的文章。 论文链接 整体概要 由于网络整体流程图没有标注好模型的运行过程&#xff0c;结合论文的描述&#xff1a…

收藏,核心期刊的投稿、审稿、出刊流程详解

学术期刊论文&#xff08;核心和普刊&#xff09;的发表流程总的来说其实是一样的&#xff0c;整个流程包括&#xff1a;1写作-2选择刊物-3投稿-4审稿-5返修或拒稿-6录用-7出刊-8上网检索。 其中1和2其实顺序是可以调换的&#xff0c;可以选择好刊物再写作&#xff0c;根据刊物…