支持向量机-笔记
支持向量机(Support Vector Machine, SVM) 是一种强大的监督学习算法,广泛应用于分类和回归任务,特别是在分类问题中表现优异。SVM 的核心思想是通过寻找一个最优超平面,将不同类别的数据点进行分割,并最大化两类数据之间的间隔(即“边距”)。SVM 的本质是一个二分类算法,但它也可以扩展到多分类和回归问题。
大白话:例如在二维中进行二分类,找一条直线把两类数据分开,且这条直线距离正负两类最近的点的距离最远,这个直线(二维)称为超平面,最近的点称为支持向量,超平面是由支持向量支撑起来的,软间隔则是允许忽略一些噪声数据点,由参数C决定忽略的力度。
1. 支持向量机的基本概念
超平面(Hyperplane)
超平面是指将数据空间划分为不同区域的一个线性决策边界。在二维空间中,超平面是一个线,而在三维空间中,超平面是一个平面。在n维空间中,超平面可以被认为是n-1维的平面。
支持向量(Support Vectors)
支持向量是指位于分类间隔边界上的数据点,这些点对超平面的最终位置有决定性的影响。SVM 寻找的最优超平面是由这些支持向量决定的。
边距(Margin)
边距是指两个类别之间的最小距离,SVM 的目标是最大化边距,即让两类数据之间的空隙尽可能大,以减少模型的误差和提高泛化能力。
- 硬间隔(Hard Margin)SVM:不允许分类错误,要求所有数据点都被完全正确分类。这种方法适合线性可分的数据。
- 软间隔(Soft Margin)SVM:允许一些数据点在决策边界的错误一侧,以便处理有噪声或线性不可分的数据。
2. 支持向量机的数学原理
线性可分 SVM
假设我们有一个线性可分的二分类数据集,SVM 的目标是找到一个最优的超平面,使得超平面两侧的分类边距最大化。
-
超平面的方程:
其中,w 是法向量,决定超平面的方向,b是偏置。
2.决策函数:
决策函数用于预测数据点属于哪个类别,输出结果为1或-1。
3.优化目标: 为了最大化分类边距,SVM 需要最小化 w 的范数,同时满足数据点的分类条件:
其中 yi为第 i个样本的标签(1或-1)。
最终优化问题可以表示为:
约束条件为:
软间隔 SVM
对于线性不可分的数据,SVM 引入了松弛变量(Slack Variables) ξi,允许一些数据点违背分类规则。优化问题变为:
约束条件为:
其中,C 是一个超参数,控制模型的柔韧性,允许一些分类错误以便更好地处理线性不可分数据。
3. 核方法(Kernel Trick)
当数据在原始特征空间中线性不可分时,SVM 使用核方法将数据映射到高维空间,使得在高维空间中线性可分。常见的核函数有:
大白话:当前维度不可分,则将数据映射到高维。
-
线性核(Linear Kernel)
适用于线性可分的数据。
2.多项式核(Polynomial Kernel)
其中 c 是常数,d 是多项式的次数,适用于具有多项式关系的数据。
3.径向基函数核(Radial Basis Function, RBF Kernel)
RBF 核非常适用于处理非线性数据,且在实际应用中非常常见。
4.Sigmoid核(Sigmoid Kernel)
这个核函数与神经网络中的激活函数相关联。
4. 支持向量机的优缺点
优点:
- 高效的处理高维数据:SVM 在处理高维空间的数据时表现出色,尤其是在维度高于样本数的情况下。
- 内存高效:SVM 只利用支持向量来构建决策边界,因此它并不需要整个数据集。
- 灵活性强:通过核方法,SVM 能够处理线性不可分的数据。
- 鲁棒性强:SVM 能够很好地处理噪声数据,并且可以通过调整软间隔参数 C 来控制过拟合。
缺点:
- 训练时间较长:特别是在样本数很大时,SVM 的训练时间会显著增加,因为计算复杂度较高。
- 难以处理多分类问题:SVM 本质上是二分类算法,尽管可以通过“一对一”或“一对多”的方法扩展到多分类任务,但实现较为复杂。
- 参数调优复杂:SVM 需要调节多个参数(如核函数、软间隔参数 C、核的超参数等),找到最优参数组合需要大量调试。
- 难以处理大规模数据:SVM 对大规模数据的处理效率较低。
5. SVM的调参要点
SVM 的性能在很大程度上取决于参数的选择,以下是常用的超参数及其调优策略:
-
核函数选择:核函数选择是最重要的参数之一,不同的核函数适用于不同类型的数据。线性数据可以选择线性核,非线性数据则使用 RBF 核或多项式核。
-
软间隔参数 C:该参数控制模型对误分类的容忍度。C 值越大,模型越倾向于对训练数据进行严格分类,可能导致过拟合;C 值越小,模型对误分类的容忍度越高,可能导致欠拟合。
-
核参数 γ:对于 RBF 核函数,γ控制单个样本的影响范围。较小的 γ值会使模型较为平滑,较大的 γ值会让模型更加拟合训练数据。
-
交叉验证:使用网格搜索(Grid Search)和交叉验证(Cross-Validation)可以帮助找到最优的 C 和 γ参数组合。
6. SVM 的 Python 实现示例
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score# 加载数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target# 分割训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 定义支持向量机模型(使用RBF核)
svm_model = SVC(kernel='rbf', C=1, gamma=0.1)# 训练模型
svm_model.fit(X_train, y_train)# 进行预测
y_pred = svm_model.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.2f}')
7. 常见面试问题
-
什么是支持向量机?
- 回答要点:SVM 是一种监督学习算法,寻找最优超平面来最大化分类间隔。
-
什么是支持向量?
- 回答要点:支持向量是位于决策边界附近的数据点,它们对超平面的位置有决定性作用。
-
解释SVM中的软间隔和硬间隔的区别。
- 回答要点:硬间隔不允许分类错误,适用于线性可分数据;软间隔允许部分误分类,适用于线性不可分数据。
-
什么是核方法?为什么需要核方法?
- 回答要点:核方法用于将数据映射到高维空间,使得在高维空间中线性可分,从而找到最优超平面。
-
如何选择SVM的参数 C 和 γ?
- 回答要点:通过交叉验证和网格搜索找到最优的参数,C 控制误分类的惩罚,γ 控制核函数的影响范围。
相关文章:

支持向量机-笔记
支持向量机(Support Vector Machine, SVM) 是一种强大的监督学习算法,广泛应用于分类和回归任务,特别是在分类问题中表现优异。SVM 的核心思想是通过寻找一个最优超平面,将不同类别的数据点进行分割,并最大…...

研发线上事故风险解读之缓存篇
专业在线打字练习平台-巧手打字通,只输出有价值的知识。 一 前言 本文继续基于《线上事故案例集》,进一步深入梳理线上事故缓存使用方面的问题点,重点关注缓存在使用和优化过程中可能出现的问题,旨在为读者提供具有实践指导意义的…...
JavaScript前端开发技术
JavaScript前端开发技术 引言 JavaScript(简称JS)是一种广泛使用的脚本语言,特别在前端开发领域,它几乎成为了网页开发的标配。从简单的表单验证到复杂的单页应用(SPA),JavaScript都扮演着不可…...
H.264 编码参数优化策略
一、概述 随着数字媒体技术的发展,视频编码成为了多媒体领域中的重要研究方向之一。而H.264作为一种广泛应用的视频编码标准,具有高压缩比、优质画面和广泛兼容性等优点。为了进一步提高视频质量和压缩效率,对H.264编码参数进行优化成为了一个…...
C++ 游戏开发技术选型指南
C 游戏开发技术选型指南 游戏开发是一个复杂而多元化的领域,而C凭借其高性能和强大的控制能力,成为许多游戏引擎的首选编程语言。在这篇博客中,我们将探讨如何选择合适的C技术栈进行游戏开发,包括技术背景、代码示例、优化实践、…...

基于Python Django的在线考试管理系统
🍊作者:计算机毕设匠心工作室 🍊简介:毕业后就一直专业从事计算机软件程序开发,至今也有8年工作经验。擅长Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等。 擅长:按照需求定制化开发项目…...

《Java基础》变量和数据类型
综述 在开始学习变量之前,我们思考一下为什么需要使用变量。 首先我们从小开始学习加法减法的时候,后来我们再学更难的东西就是代数,其中的x和y是我们要求解的内容,这些内容就是变量。 变量是人的思维的提升,没有变量…...

FLINK内存管理解析,taskmanager、jobmanager
1、在 Flink 中设置内存的方法是配置以下两个选项之一: 1)Total Flink memory:taskmanager.memory.flink.sizejobmanager.memory.flink.size 2)Total process memory:taskmanager.memory.process.sizejobmanager.mem…...

【AI论文精读13】RAG论文综述2(微软亚研院 2409)P5-可解释推理查询L3
AI知识点总结:【AI知识点】 AI论文精读、项目、思考:【AI修炼之路】 P1,P2,P3,P4 五、可解释推理查询(L3) ps:P2有四种查询(L1,L2,L3,…...

优达学城 Generative AI 课程3:Computer Vision and Generative AI
文章目录 1 官方课程内容自述第 1 课:图像生成简介第 2 课:计算机视觉基础第 3 课:图像生成与生成对抗网络(GANs)第 4 课:基于 Transformer 的计算机视觉模型第 5 课:扩散模型第 6 课࿰…...

UE5 C++ 通过绑定编辑器事件实现控制柄顶点编辑
开发中经常会遇到编辑器环境中制作工具拖拽控制柄编辑内容的需求,此时可以通过Editor事件拿到对应回调,进行相应更新: 1.创建Mesh编辑Actor类 创建一个Mesh编辑Actor类,提供Mesh顶点编辑的相关逻辑。 .h: #pragma once#inclu…...

云计算ftp 服务器实验
创建VLAN 10 划分端口 创建VLAN 10 的地址 10.1.1.1 服务器的地址是 10.1.1.2 这是服务上的配置 服务器上选择ftp 启动 ,文件目录选择一下 在 交换机上 ftp 10.1.1.2 服务器的地址 把刚才创建的shenyq txt 文件下载下到本地交换机 我们能看到交换…...

node.js服务器基础
node.js的事件循环 node.js是基于事件驱动的,通常在代码中注册想要等待的事件,设定好回调函数,当事件触发的时候就会调用回调函数。如果node.js没有要处理的事件了,那整个就结束了;事件里面可以继续插入事件,如果有事…...
2-SAT 问题详解:逻辑约束与图论的结合
2-SAT 问题详解:逻辑约束与图论的结合 2-SAT(Two Satisfiability Problem)是布尔可满足性问题(SAT)的特殊形式,它解决的是含有二元子句的布尔表达式的可满足性问题。2-SAT 问题常用于分析系统中的逻辑约束…...
使用NetTopologySuite读写gpkg文件
直接上代码: 优势是什么?纯C#开发,不存在兼容和字符问题。 using NetTopologySuite; using NetTopologySuite.Features; using NetTopologySuite.Geometries; using CdIts.NetTopologySuite.IO; using CdIts.NetTopologySuite.IO.GeoPackag…...
什么是http?列出常见方法并解他们?
HTTP 方法是客户端(通常是浏览器)用来向服务器表明其意图的方式。常见的 HTTP 方法有以下几种: 一、GET 解释:用于请求指定的资源。它是最常见的 HTTP 方法之一。GET 方法应该只用于获取数据,而不应该有任何副作用。例…...
通过修改注册表来提高导出图像的分辨率(PPT尝试)
通过修改注册表来提高 PowerPoint 导出图片的分辨率,可以导致导出的图片尺寸大于您期望的 1920 x 1080 像素。例如,将 ExportBitmapResolution 设置为 300 DPI,可能会导致输出图像的尺寸变得非常大,比如 10240 x 5760 像素。这是因…...

OpenCV 环境配置
首先下载opencv,在opencv官网进行下载。 按照上面的步骤,点击进去 滑至底部,不切换至不同页,选择合适的版本进行下载(Window系统选择Windows版本进行下载)。 接下来以4.1.2版本为例: 点击之后会进入这个页面ÿ…...

使用通义千问模拟ChatGPT-o1进行思考,并以类似于ChatGPT-o1的形式输出
prompt 你是ChatGPT O1,旨在通过第一性原理思维和基于证据的推理来解决用户问题。你的目标是提供清晰、循序渐进的解决方案、基础概念,并从头开始构建答案。 ### 指导原则: 以下是为大模型采用这种方法而设计的系统提示: 1. 理解…...

维生素对于生活的重要性
在探索健康奥秘的旅途中,维生素作为人体不可或缺的微量营养素,扮演着至关重要的角色。它们虽不直接提供能量,却是酶促反应、细胞代谢、免疫功能乃至心理健康的基石。今天,让我们一同深入探讨人体所需补充的维生素,这些…...

【力扣数据库知识手册笔记】索引
索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...

如何理解 IP 数据报中的 TTL?
目录 前言理解 前言 面试灵魂一问:说说对 IP 数据报中 TTL 的理解?我们都知道,IP 数据报由首部和数据两部分组成,首部又分为两部分:固定部分和可变部分,共占 20 字节,而即将讨论的 TTL 就位于首…...

优选算法第十二讲:队列 + 宽搜 优先级队列
优选算法第十二讲:队列 宽搜 && 优先级队列 1.N叉树的层序遍历2.二叉树的锯齿型层序遍历3.二叉树最大宽度4.在每个树行中找最大值5.优先级队列 -- 最后一块石头的重量6.数据流中的第K大元素7.前K个高频单词8.数据流的中位数 1.N叉树的层序遍历 2.二叉树的锯…...

Unity | AmplifyShaderEditor插件基础(第七集:平面波动shader)
目录 一、👋🏻前言 二、😈sinx波动的基本原理 三、😈波动起来 1.sinx节点介绍 2.vertexPosition 3.集成Vector3 a.节点Append b.连起来 4.波动起来 a.波动的原理 b.时间节点 c.sinx的处理 四、🌊波动优化…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...

20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join
纯 Java 项目(非 SpringBoot)集成 Mybatis-Plus 和 Mybatis-Plus-Join 1、依赖1.1、依赖版本1.2、pom.xml 2、代码2.1、SqlSession 构造器2.2、MybatisPlus代码生成器2.3、获取 config.yml 配置2.3.1、config.yml2.3.2、项目配置类 2.4、ftl 模板2.4.1、…...