线性分类器(KNN,SVM损失,交叉熵损失,softmax)

news2024/12/22 21:42:05

KNN

工作机制

k-近邻算法的工作机制可以分为两个主要阶段:训练阶段和预测阶段。

训练阶段

在训练阶段,k-近邻算法并不进行显式的模型训练,而是简单地存储训练数据集。每个样本由特征向量和对应的标签组成。此阶段的主要任务是准备好数据,以便在预测阶段进行有效的相似性比较。

预测阶段

在预测阶段,k-近邻算法的工作流程如下:

  1. 输入待分类样本:接收一个待分类的样本,其特征向量为 xx。
  2. 计算距离:计算待分类样本与训练集中所有样本之间的距离。常用的距离度量方法包括欧氏距离、曼哈顿距离和闵可夫斯基距离。
  3. 选择k个最近邻:根据计算得到的距离,选择距离待分类样本最近的k个训练样本。
  4. 投票机制
    • 分类任务:对这k个样本的类别进行投票,选择出现次数最多的类别作为预测结果。
    • 回归任务:对这k个样本的值进行平均,得到预测值。
距离度量函数

距离度量是k-近邻算法的关键部分,影响着算法的性能和预测结果。以下是几种常用的距离度量方法:

  • 欧氏距离:最常用的距离度量,适用于连续特征。计算公式为: d ( x , y ) = ∑ i = 1 n ( x i − y i ) 2 d(x,y)=\sqrt{\sum_{i=1}^n(x_i-y_i)^2} d(x,y)=i=1n(xiyi)2
  • 曼哈顿距离:适用于特征值较小或特征之间差异较大的情况。计算公式为: d ( x , y ) = ∑ i = 1 n ∣ x i − y i ∣ d(x,y)=\sum_{i=1}^n|x_i-y_i| d(x,y)=i=1nxiyi
  • 闵可夫斯基距离:是欧氏距离和曼哈顿距离的推广,参数p决定了距离的类型。计算公式为: d ( x , y ) = ( ∑ i = 1 n ∣ x i − y i ∣ p ) 1 p d(x,y)=(\sum_{i=1}^n|x_i-y_i|^p)^{\frac{1}{p}} d(x,y)=(i=1nxiyip)p1
     选择合适的距离度量对于k-近邻算法的效果至关重要,通常需要根据具体问题进行实验和调整。
超参数K的选择

k值的选择直接影响k-近邻算法的性能。k值过小可能导致模型对噪声敏感,容易出现过拟合;而k值过大则可能导致模型过于平滑,无法捕捉到数据的局部结构。

具体请看下图
![[Pasted image 20241221162004.png]]

因此,我们可以使用K折交叉验证来完成。当然,你也可以简单的使用单一训练集+验证集+测试集的方法,不过效果可能不一定好,这取决于你的数据集的质量。一般在数据集质量一般的时候,可以采用K折交叉验证。

它将数据集分成 k 个折叠,每个折叠都会被用作一次测试集。然后我们使用剩下的 k-1 个折叠作为训练集来训练模型,并在每个折叠上进行评估结果为Ei。最终,我们将所有 k 次评估的结果平均,得到最终的模型性能评估。

![[Pasted image 20241221164055.png]]

通过交叉验证,我们可以选择出综合性能更好的K值(超参数)

线性分类器

![[Pasted image 20241221164055.png]]

将输入图像展平,然后与矩阵相乘得到每个类别对应的分数。

![[Pasted image 20241221164320.png]]

视觉角度理解

![[Pasted image 20241221164348.png]]

就是对图像的每个像素点训练出对应的权重。

几何角度

![[Pasted image 20241221164514.png]]

多分类问题损失函数SVM

为了训练网络,我们必然需要建立损失函数
假设有三张图片以及三种分类
![[Pasted image 20241221171959.png]]

这是SVM损失的具体定义:
在这里插入图片描述

SVM 损失的设置是,SVM“希望”每个图像的正确类别的得分比错误类别高出一定幅度Δ。再上图中,Δ为1
可以看下图,蓝色代表的是 s y i − s j s_{y_i}-s_j syisj
可以看到,loss函数的目的就是为了让正确类别的得分比错误类别高1分。

在这里插入图片描述

SoftMax Loss

softmax 函数

![[Pasted image 20241221175748.png]]
主要作用就是将得分转化为概率分布

交叉熵损失

交叉熵函数推导CrossEntropy_交叉熵推导-CSDN博客

可以看这篇文章,写的很好。这里主要介绍一下:
假设有一个概率分布X

信息量

I ( x 0 ) = − l o g ( P ( x 0 ) ) I(x_0)=−log(P(x_0)) I(x0)=log(P(x0))
概率越少,信息量越大

信息熵

信息熵就是信息量的期望
H ( x ) = − ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) H(x)=−∑^n_{i=1}P(x_i)log(P(x_i)) H(x)=i=1nP(xi)log(P(xi))

相对熵(KL散度)

同一随机变量x,有两个单独的概率分布P(x)和Q(x)。用KL散度来衡量P(x)和Q(x)两个独立分布之间的差异的。KL散度值越小,表示P和Q的分布越接近、
D K L ( P ∣ ∣ Q ) = ∑ i = 1 n P ( x i ) l o g ( P ( x i ) Q ( x i ) ) D_{KL}(P||Q)=∑^n_{i=1}P(x_i)log(\frac{P(x_i)}{Q(xi)}) DKL(P∣∣Q)=i=1nP(xi)log(Q(xi)P(xi))
log里面是除号,因此就是两者相减

交叉熵损失

带入真实场景,我们需要比较的两个概率分布:一个是真实的target,另一个是预测值。
真实的target是确定的,而且只有对应的位置概率为100%,其余都是0.

因此带入KL散度 D K L ( P ∥ Q ) = ∑ i = 1 n P ( x i ) l o g ( P ( x i ) ) − ∑ i = 1 n P ( x i ) l o g ( Q ( x i ) ) D_{KL}(P∥Q)=∑^n_{i=1}P(x_i)log(P(x_i))−∑^n_{i=1}P(x_i)log(Q(x_i)) DKL(PQ)=i=1nP(xi)log(P(xi))i=1nP(xi)log(Q(xi))
我们发现式子前半部分是定值。这对于损失函数来说有没有都一样,因此可以删去。所以最后交叉熵损失函数如下: H ( P , Q ) = − ∑ i = 1 n P ( x i ) l o g ( Q ( x i ) ) H(P,Q)=−∑^n_{i=1}P(x_i)log(Q(x_i)) H(P,Q)=i=1nP(xi)log(Q(xi))
其实较真的来说, P ( x i ) P(x_i) P(xi)中只有一项有意义(=1),所以损失函数其实只有一项(样本只能属于单一类别)
![[Pasted image 20241221200609.png]]

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

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

相关文章

重拾设计模式--适配器模式

文章目录 适配器模式(Adapter Pattern)概述适配器模式UML图适配器模式的结构目标接口(Target):适配器(Adapter):被适配者(Adaptee): 作用&#xf…

StarRocks:存算一体模式部署

目录 一、StarRocks 简介 二、StarRocks 架构 2.1 存算一体 2.2 存算分离 三、前期准备 3.1前提条件 3.2 集群规划 3.3 配置环境 3.4 准备部署文件 四、手动部署 4.1 部署FE节点 4.2 部署BE节点 4.3 部署CN节点(可选) 4.4 FE高可用…

找数字:JAVA

题目描述 试计算在区间1 到n 的所有整数中,数字x(0 ≤ x ≤ 9)共出现了多少次? 例如,在1到11 中,即在1、2、3、4、5、6、7、8、9、10、11 中,数字1 出现了4 次。 输入描述: 输入共1行&#xf…

AI的使用:结构化提示词

根据自己的使用,不断的完善自己的提示词。并且像程序版本一样管理和迭代自己的提示词,这样才能准确的按照自己的目的去使用AI。而为了更好的管理,我们在一开始使用的时候,就要有一个易于管理的定义,即:结构…

Netcat:网络中的瑞士军刀

免责声明:使用本教程或工具,用户必须遵守所有适用的法律和法规,并且用户应自行承担所有风险和责任。 文章目录 一、引言二、简述三、Netcat功能?四、参数选项五、Netcat 的常见功能六、高级用法多连接处理创建简单的代理 七、Netc…

VS Code Copilot 与 Cursor 对比

选手简介 VS Code Copilot:算是“老牌”编程助手了,虽然Copilot在别的编辑器上也有扩展,不过体验最好的还是VS Code,毕竟都是微软家的所以功能集成更好一些;主要提供的是Complete和Chat能力,也就是代码补全…

28、基于springboot的房屋租赁系统

房屋是人类生活栖息的重要场所,随着城市中的流动人口的增多,人们对房屋租赁需求越来越高,为满足用户查询房屋、预约看房、房屋租赁的需求,特开发了本基于Spring Boot的房屋租赁系统。 本文重点阐述了房屋租赁系统的开发过程&…

【Qt】显示类控件:QLabel、QLCDNumber、QProgressBar、QCalendarWidget

目录 QLabel QFrame 例子: textFormat pixmap、scaledContents alignment wordWrap、indent、margin buddy QLCDNumber 例子: QTimer QProgressBar 例子: QCalendarWidget 例子: QLabel 标签控件,用来显示…

基于STM32的自学习智能小车设计

目录 引言系统设计 硬件设计软件设计系统功能模块 传感器模块控制模块自学习算法模块系统实现 硬件实现软件实现测试与优化结论与展望 1. 引言 随着人工智能和机器学习技术的不断发展,越来越多的智能小车开始实现自主学习与行为决策。传统的智能小车通常依靠固定的…

Android OpenGLES2.0开发(九):图片滤镜

“当你改变想法的时候,记得也要改变你的世界。”——诺曼文森特皮尔 Android OpenGLES开发:EGL环境搭建Android OpenGLES2.0开发(一):艰难的开始Android OpenGLES2.0开发(二):环境搭…

梳理你的思路(从OOP到架构设计)_简介设计模式

目录 1、 模式(Pattern) 是较大的结构​编辑 2、 结构形式愈大 通用性愈小​编辑 3、 从EIT造形 组合出设计模式 1、 模式(Pattern) 是较大的结构 组合与创新 達芬奇說:簡單是複雜的終極形式 (Simplicity is the ultimate form of sophistication) —Leonardo d…

vscode的keil assistant 中搜索不到全局变量

搜不到 但是在包含的文件中输入 ../../../,就是全局搜索的结果 我的文件结构是:\Desktop\LVGL文件系统移植(lvgl8.3)\Projects\MDK-ARM 盲猜是keil assistant 当前文件夹打开的时候是进入到了MDK-ARM文件夹层次&…

HTML语法规范

HTML语法规则 HTML 标签是由尖括号包围的关键词&#xff0c;标签通常是成对出现的&#xff0c;例如 <html> 和 </html>&#xff0c;称为双标签 。标签对中的第一个标签是开始标签&#xff0c;第二个标签是结束标签单标签比较少&#xff0c;例如<br />&#x…

flink实现复杂kafka数据读取

接上文&#xff1a;一文说清flink从编码到部署上线 环境说明&#xff1a;MySQL&#xff1a;5.7&#xff1b;flink&#xff1a;1.14.0&#xff1b;hadoop&#xff1a;3.0.0&#xff1b;操作系统&#xff1a;CentOS 7.6&#xff1b;JDK&#xff1a;1.8.0_401。 常见的文章中&…

大模型微调---Prompt-tuning微调

目录 一、前言二、Prompt-tuning实战2.1、下载模型到本地2.2、加载模型与数据集2.3、处理数据2.4、Prompt-tuning微调2.5、训练参数配置2.6、开始训练 三、模型评估四、完整训练代码 一、前言 Prompt-tuning通过修改输入文本的提示&#xff08;Prompt&#xff09;来引导模型生…

如何使用 WebAssembly 扩展后端应用

1. WebAssembly 简介 随着互联网的发展&#xff0c;越来越多的应用借助 Javascript 转到了 Web 端&#xff0c;但人们也发现&#xff0c;随着移动互联网的兴起&#xff0c;需要把大量的应用迁移到手机端&#xff0c;随着手端的应用逻辑越来越复杂&#xff0c;Javascript 的解析…

python学习——洛谷P2010 [NOIP2016 普及组] 回文日期 三种方法

[NOIP2016 普及组] 回文日期 文章目录 [NOIP2016 普及组] 回文日期题目背景题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1 样例 #2样例输入 #2样例输出 #2 提示方法一方法二方法三 题目背景 NOIP2016 普及组 T2 题目描述 在日常生活中&#xff0c;通过年、月、日这…

前端yarn工具打包时网络连接问题排查与解决

最近线上前端打包时提示 “There appears to be trouble with your network connection”&#xff0c;以此文档记录下排查过程。 前端打包方式 docker启动临时容器打包&#xff0c;命令如下 docker run --rm -w /app -v pwd:/app alpine-node-common:v16.20-pro sh -c "…

BenchmarkSQL使用教程

1. TPC-C介绍 Transaction Processing Performance Council (TPC) 事务处理性能委员会&#xff0c;是一家非盈利IT组织&#xff0c;他们的目的是定义数据库基准并且向产业界推广可验证的数据库性能测试。而TPC-C最后一个C代表的是压测模型的版本&#xff0c;在这之前还有TPC-A、…

Linux网络基础--传输层Tcp协议(上) (详细版)

目录 Tcp协议报头&#xff1a; 4位首部长度&#xff1a; 源端口号和目的端口号 32位序号和确认序号 标记位 超时重传机制&#xff1a; 两个问题 连接管理机制 三次握手&#xff0c;四次挥手 建立连接&#xff0c;为什么要有三次握手&#xff1f; 先科普一个概念&…