支持向量机SVM:从数学原理到实际应用
目录
- 一、引言
- 背景
- SVM算法的重要性
- 二、SVM基础
- 线性分类器简介
- 什么是支持向量?
- 超平面和决策边界
- SVM的目标函数
- 三、数学背景和优化
- 拉格朗日乘子法(Lagrange Multipliers)
- KKT条件
- 核技巧(Kernel Trick)
- 双重问题和主问题(Dual and Primal Problems)
- 四、代码实现
- 数据预处理
- 模型定义
- 优化器选择
- 训练模型
- 评估模型
- 五、实战应用
- 文本分类
- 图像识别
- 生物信息学
- 金融预测
- 客户细分
- 六、总结
本篇文章全面深入地探讨了支持向量机(SVM)的各个方面,从基本概念、数学背景到Python和PyTorch的代码实现。文章还涵盖了SVM在文本分类、图像识别、生物信息学、金融预测等多个实际应用场景中的用法。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
一、引言
背景
支持向量机(SVM, Support Vector Machines)是一种广泛应用于分类、回归、甚至是异常检测的监督学习算法。自从Vapnik和Chervonenkis在1995年首次提出,SVM算法就在机器学习领域赢得了巨大的声誉。这部分因为其基于几何和统计理论的坚实数学基础,也因为其在实际应用中展示出的出色性能。
例子:比如,在人脸识别或者文本分类问题上,SVM常常能够实现优于其他算法的准确性。
SVM算法的重要性
SVM通过寻找能够最大化两个类别间“间隔”的决策边界(或称为“超平面”)来工作,这使得其在高维空间中具有良好的泛化能力。
例子:在垃圾邮件分类问题中,可能有数十甚至数百个特征,SVM能有效地在这高维特征空间中找到最优决策边界。
二、SVM基础
线性分类器简介
支持向量机(SVM)属于线性分类器的一种,旨在通过一个决策边界将不同的数据点分开。在二维平面中,这个决策边界是一条直线;在三维空间中是一个平面,以此类推,在N维空间,这个决策边界被称为“超平面”。
例子: 在二维平面上有红色和蓝色的点,线性分类器(如SVM)会寻找一条直线,尽量使得红色点和蓝色点被分开。
什么是支持向量?
在SVM算法中,"支持向量"是指距离超平面最近的那些数据点。这些数据点被用于确定超平面的位置和方向,因为它们最有可能是分类错误的点。
例子: 在一个用于区分猫和狗的分类问题中,支持向量可能是一些极易被误分类的猫或狗的图片,例如长得像猫的狗或者长得像狗的猫。
超平面和决策边界
超平面是SVM用来进行数据分类的决策边界。在二维空间里,超平面就是一条直线;在三维空间里是一个平面,以此类推。数学上,一个N维的超平面可以表示为(Ax + By + … + Z = 0)的形式。
例子: 在一个文本分类问题中,你可能使用词频和其他文本特征作为维度,超平面就是在这个多维空间里划分不同类别(如垃圾邮件和非垃圾邮件)的决策边界。
SVM的目标函数
SVM的主要目标是找到一个能“最大化”支持向量到超平面距离的超平面。数学上,这被称为“最大化间隔”。目标函数通常是一个凸优化问题,可通过各种算法(如梯度下降、SMO算法等)求解。
例子: 在信用卡欺诈检测系统中,SVM的目标是找到一个能最大化“良性”交易和“欺诈”交易之间间隔的超平面,以便能更准确地分类新的交易记录。
三、数学背景和优化
拉格朗日乘子法(Lagrange Multipliers)
拉格朗日乘子法是一种用于求解约束优化问题的数学方法,特别适用于支持向量机(SVM)中的优化问题。基础形式的拉格朗日函数(Lagrangian Function)可以表示为:
例子:在一个二分类问题中,你可能需要最小化(w) 的范数(即,优化模型的复杂度)的同时,确保所有的样本都被正确分类(或尽可能地接近这个目标)。拉格朗日乘子法正是解决这种问题的一种方法。
KKT条件
Karush-Kuhn-Tucker(KKT)条件是非线性规划问题中的一组必要条件,也用于SVM中的优化问题。它是拉格朗日乘子法的一种扩展,用于处理不等式约束。在SVM中,KKT条件主要用来检验一个给定的解是否是最优解。
例子:在SVM模型中,KKT条件能帮助我们验证找到的超平面是否是最大化间隔的超平面,从而确认模型的优越性。
核技巧(Kernel Trick)
核技巧是一种在高维空间中隐式计算数据点之间相似度的方法,而无需实际进行高维计算。这让SVM能够有效地解决非线性问题。常用的核函数包括线性核、多项式核、径向基核(RBF)等。
例子:如果你在一个文本分类任务中遇到了非线性可分的数据,使用核技巧可以在高维空间中找到一个能够将数据有效分开的决策边界。
双重问题和主问题(Dual and Primal Problems)
在SVM中,优化问题通常可以转换为其对偶问题,这样做的好处是对偶问题往往更容易求解,并且能更自然地引入核函数。双重问题与主问题通过所谓的对偶间隙(duality gap)联系在一起,而当对偶间隙为0时,双重问题的解即为主问题的解。
例子:在处理大规模数据集时,通过解决双重问题而不是主问题,可以大大减少计算复杂性和时间。
四、代码实现
在这一部分中,我们将使用Python和PyTorch库来实现一个基础的支持向量机(SVM)。我们会遵循以下几个主要步骤:
- 数据预处理:准备用于训练和测试的数据。
- 模型定义:定义SVM模型的架构。
- 优化器选择:选择合适的优化算法。
- 训练模型:使用训练数据来训练模型。
- 评估模型:使用测试数据来评估模型的性能。
数据预处理
首先,我们需要准备一些用于训练和测试的数据。为简单起见,我们使用PyTorch内置的Tensor数据结构。
import torch# 创建训练数据和标签
X_train = torch.FloatTensor([[1, 1], [1, 2], [1, 3], [2, 1], [2, 2], [2, 3]])
y_train = torch.FloatTensor([1, 1, 1, -1, -1, -1])# 创建测试数据
X_test = torch.FloatTensor([[1, 0.5], [2, 0.5]])
例子:
X_train
中的数据表示二维平面上的点,而y_train
中的数据则代表这些点的标签。例如,点(1, 1)
的标签是1
,而点(2, 3)
的标签是-1
。
模型定义
下面我们定义SVM模型。在这里,我们使用线性核函数。
class LinearSVM(torch.nn.Module):def __init__(self):super(LinearSVM, self).__init__()self.weight = torch.nn.Parameter(torch.rand(2), requires_grad=True)self.bias = torch.nn.Parameter(torch.rand(1), requires_grad=True)def forward(self, x):return torch.matmul(x, self.weight) + self.bias
例子: 在这个例子中,我们定义了一个线性SVM模型。
self.weight
和self.bias
是模型的参数,它们在训练过程中会被优化。
优化器选择
我们将使用PyTorch的内置SGD(随机梯度下降)作为优化器。
# 实例化模型和优化器
model = LinearSVM()
optimizer = torch.optim.SGD([model.weight, model.bias], lr=0.01)
训练模型
下面的代码段展示了如何训练模型:
# 设置训练轮次和正则化参数C
epochs = 100
C = 0.1for epoch in range(epochs):for i, x in enumerate(X_train):y = y_train[i]optimizer.zero_grad()# 计算间隔损失 hinge loss: max(0, 1 - y*(wx + b))loss = torch.max(torch.tensor(0), 1 - y * model(x))# 添加正则化项: C * ||w||^2loss += C * torch.norm(model.weight)**2loss.backward()optimizer.step()
例子: 在这个例子中,我们使用了hinge loss作为损失函数,并添加了正则化项
C * ||w||^2
以防止过拟合。
评估模型
最后,我们使用测试数据来评估模型的性能。
with torch.no_grad():for x in X_test:prediction = model(x)print(f"Prediction for {x} is: {prediction}")
例子: 输出的“Prediction”表示模型对测试数据点的分类预测。一个正数表示类别
1
,一个负数表示类别-1
。
五、实战应用
支持向量机(SVM)在各种实际应用场景中都有广泛的用途。
文本分类
在文本分类任务中,SVM可以用来自动地对文档或消息进行分类。例如,垃圾邮件过滤器可能使用SVM来识别垃圾邮件和正常邮件。
例子: 在一个新闻网站上,可以使用SVM模型来自动将新闻文章分为“政治”、“体育”、“娱乐”等不同的类别。
图像识别
SVM也被用于图像识别任务,如手写数字识别或面部识别。通过使用不同的核函数,SVM能够在高维空间中找到决策边界。
例子: 在安全监控系统中,SVM可以用于识别不同的人脸并进行身份验证。
生物信息学
在生物信息学领域,SVM用于识别基因序列模式,以及用于药物发现等多个方面。
例子: 在疾病诊断中,SVM可以用于分析基因表达数据,以识别是否存在特定疾病的风险。
金融预测
SVM在金融领域也有一系列应用,如用于预测股票价格的走势或者用于信用评分。
例子: 在信用卡欺诈检测中,SVM可以用于分析消费者的交易记录,并自动标识出可能的欺诈性交易。
客户细分
在市场分析中,SVM可以用于客户细分,通过分析客户的购买历史、地理位置等信息,来预测客户的未来行为。
例子: 在电子商务平台上,SVM模型可以用于预测哪些客户更有可能购买特定的产品。
六、总结
支持向量机(SVM)是一种强大而灵活的机器学习算法,具有广泛的应用场景和优秀的性能表现。从文本分类到图像识别,从生物信息学到金融预测,SVM都表现出其强大的泛化能力。在这篇文章中,我们不仅介绍了SVM的基本概念、数学背景和优化方法,还通过具体的Python和PyTorch代码实现了一个基础的SVM模型。此外,我们还探讨了SVM在多个实际应用场景中的用法。
虽然SVM被广泛应用于各种问题,但它并非“一把通吃”的工具。在高维空间和大数据集上,SVM模型可能会遇到计算复杂性和内存使用的问题。此时,适当的核函数选择、数据预处理和参数优化尤为重要。
值得注意的是,随着深度学习的兴起,一些更为复杂的模型(如神经网络)在某些特定任务上可能会表现得更好。然而,SVM因其解释性强、理论基础坚实而依然保有一席之地。实际上,在某些应用场景下,如小数据集或者对模型可解释性有高要求的情境,SVM可能是更好的选择。
关注TechLead,分享AI全维度知识。作者拥有10+年互联网服务架构、AI产品研发经验、团队管理经验,同济本复旦硕,复旦机器人智能实验室成员,阿里云认证的资深架构师,项目管理专业人士,上亿营收AI产品研发负责人。
相关文章:
支持向量机SVM:从数学原理到实际应用
目录 一、引言背景SVM算法的重要性 二、SVM基础线性分类器简介什么是支持向量?超平面和决策边界SVM的目标函数 三、数学背景和优化拉格朗日乘子法(Lagrange Multipliers)KKT条件核技巧(Kernel Trick)双重问题和主问题&…...
【办公自动化】在Excel中按条件筛选数据并存入新的表(文末送书)
🤵♂️ 个人主页:艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞Ǵ…...
第三章:最新版零基础学习 PYTHON 教程(第十一节 - Python 运算符—Python 中的any与all)
Any 和 All 是 python 中提供的两个内置函数,用于连续的与/或。Any如果任何一项为 True,则返回 true。如果为空或全部为 false,则返回 False。Any 可以被认为是对所提供的可迭代对象进行 OR 操作的序列。它会短路执行,即一旦知道结果就停止执行。 句法: any(iterable) 函…...
Pytorch单机多卡分布式训练
Pytorch单机多卡分布式训练 数据并行: DP和DDP 这两个都是pytorch下实现多GPU训练的库,DP是pytorch以前实现的库,现在官方更推荐使用DDP,即使是单机训练也比DP快。 DataParallel(DP) 只支持单进程多线程…...
asp.net coremvc+efcore增删改查
下面是一个使用 EF Core 在 ASP.NET Core MVC 中完成增删改查的示例: 创建一个新的 ASP.NET Core MVC 项目。 安装 EF Core 相关的 NuGet 包。在项目文件 (.csproj) 中添加以下依赖项: <ItemGroup><PackageReference Include"Microsoft…...
Java基础面试,什么是面向对象,谈谈你对面向对象的理解
前言 马上就要找工作了,从今天开始一天准备1~2道面试题,来打基础,就从Java基础开始吧。 什么是面向对象,谈谈你对面向对象的理解? 谈到面向对象,那就不得不谈到面向过程。面向过程更加注重的是完成一个任…...
Ubuntu系统初始设置
更换国内源 安装截图工具 安装中文输入法 安装QQ 参考: 安装双系统win10Ubuntu20.04LTS(详细到我自己都害怕) 引导方式磁盘分区方法UEFIGPTLegancyMBR 安装网络助手 sudo apt install net-tools 安装VS Code 使用从官网下载.deb安装包…...
焕新古文化传承之路,AI为古彝文识别赋能
目录 1 古彝文与古典保护 2 古文识别的挑战 2.1 西文与汉文OCR 2.2 古彝文识别难点 3 合合信息:古彝文保护新思路 3.1 图像矫正 3.2 图像增强 3.3 语义理解 3.4 工程技巧 4 总结 1 古彝文与古典保护 彝文指的是云南、贵州、四川等地的彝族人使用的文字&am…...
毛玻璃动画交互效果
效果展示 页面结构组成 从上述的效果展示页面结构来看,页面布局都是比较简单的,只是元素的动画交互比较麻烦。 第一个动画交互是两个圆相互交错来回运动。第二个动画交互是三角绕着圆进行 360 度旋转。 CSS 知识点 animationanimation-delay绝对定位…...
Audio2Face的工作原理
预加载一个3D数字人物模型(Digital Mark),该模型可以通过音频驱动进行面部动画。 用户上传音频文件作为输入。 将音频输入馈送到预训练的深度神经网络中。 Audio2Face加载预制的3d人头mesh 3D数字人物面部模型由大量顶点组成,每个顶点都有xyz坐标。 深度神经网络输入音频特征,…...
【面试题】2023前端面试真题之JS篇
前端面试题库 (面试必备) 推荐:★★★★★ 地址:前端面试题库 表妹一键制作自己的五星红旗国庆头像,超好看 世界上只有一种真正的英雄主义,那就是看清生活的真相之后,依然热爱生活。…...
Mysql 分布式序列算法
接上文 Mysql分库分表 1.分布式序列简介 在分布式系统下,怎么保证ID的生成满足以上需求? ShardingJDBC支持以上两种算法自动生成ID。这里,使用ShardingJDBC让主键ID以雪花算法进行生成,首先配置数据库,因为默认的注…...
Windows/Linux双系统卸载Ubuntu
参考:双系统下完全卸载ubuntu...
asp.net core mvc 视图组件viewComponents
ASP.NET Core MVC 视图组件(View Components)是一种可重用的 UI 组件,用于在视图中呈现某些特定的功能块,例如导航菜单、侧边栏、用户信息等。视图组件提供了一种将视图逻辑与控制器解耦的方式,使视图能够更加灵活、可…...
如何保持终身学习
文章目录 2.1. 了解你的大脑2.2 学习是对神经元网络的塑造2.3 大脑的一生 3.学习的心里基础3.1 固定思维与成长思维3.2 我们为什么要学习 4. 学习路径4.1 构建知识模块4.2 大脑是如何使用注意力的4.3 提高专注力4.4 放松一下,学的更好4.5 巩固你的学习痕迹4.6 被动学…...
【RV1103】RTL8723bs (SD卡形状模块)驱动开发
文章目录 前言硬件分析Luckfox Pico的SD卡接口硬件原理图LicheePi zero WiFiBT模块总结 正文Kernel WiFi驱动支持Kernel 设备树支持修改一:修改二: SDK全局配置支持 wifi全局编译脚本支持编译逻辑拷贝rtl8723bs的固件到文件系统的固定目录里面去 上电后手…...
LeetCode 周赛上分之旅 #49 再探内向基环树
⭐️ 本文已收录到 AndroidFamily,技术和职场问题,请关注公众号 [彭旭锐] 和 BaguTree Pro 知识星球提问。 学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度…...
kubernetes-v1.23.3 部署 kafka_2.12-2.3.0
文章目录 [toc]构建 debian 基础镜像部署 zookeeper配置 namespace配置 gfs 的 endpoints配置 pv 和 pvc配置 configmap配置 service配置 statefulset 部署 kafka配置 configmap配置 service配置 statefulset 这里采用的部署方式如下: 使用自定义的 debian 镜像作为…...
位置编码器
目录 1、位置编码器的作用 2、代码演示 (1)、使用unsqueeze扩展维度 (2)、使用squeeze降维 (3)、显示张量维度 (4)、随机失活张量中的数值 3、定义位置编码器类,我…...
Lua多脚本执行
--全局变量 a 1 b "123"for i 1,2 doc "Holens" endprint(c) print("*************************************1")--本地变量(局部变量) for i 1,2 dolocal d "Holens2"print(d) end print(d)function F1( ..…...
Spirng Cloud Alibaba Nacos注册中心的使用 (环境隔离、服务分级存储模型、权重配置、临时实例与持久实例)
文章目录 一、环境隔离1. Namespace(命名空间):2. Group(分组):3. Services(服务):4. DataId(数据ID):5. 实战演示:5.1 默…...
26663-2011 大型液压安全联轴器 课堂随笔
声明 本文是学习GB-T 26663-2011 大型液压安全联轴器. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们 1 范围 本标准规定了大型液压安全联轴器的分类、技术要求、试验方法及检验规则等。 本标准适用于联接两同轴线的传动轴系,可起到限制…...
ChatGPT架构师:语言大模型的多模态能力、幻觉与研究经验
来源 | The Robot Brains Podcast OneFlow编译 翻译|宛子琳、杨婷 9月26日,OpenAI宣布ChatGPT新增了图片识别和语音能力,使得ChatGPT不仅可以进行文字交流,还可以给它展示图片并进行互动,这是一次ChatGPT向多模态进化的…...
二、VXLAN BGP EVPN基本原理
VXLAN BGP EVPN基本原理 1、BGP EVPN2、BGP EVPN路由2.1、Type2路由——MAC/IP路由2.2、Type3路由——Inclusive Multicast路由2.3、Type5路由——Inclusive Multicast路由 ————————————————————————————————————————————————…...
Evil.js
Evil.js install npm i lodash-utils什么?黑心996公司要让你体统跑路了? 想在离开前给你们的项目留点小礼物? 偷偷地把本项目引入你们的项目吧,你们的项目会有但不仅限于如下的神奇效果: 仅在周日时: 当…...
使用sqlmap的 ua注入
文章目录 1.使用sqlmap自带UA头的检测2.使用sqlmap随机提供的UA头3.使用自己写的UA头4.调整level检测 测试环境:bWAPP SQL Injection - Stored (User-Agent) 1.使用sqlmap自带UA头的检测 python sqlmap.py -u http://127.0.0.1:9004/sqli_17.php --cookie“BEEFHOO…...
华为云云耀云服务器L实例评测 | 实例评测使用之体验评测:华为云云耀云服务器管理、控制、访问评测
华为云云耀云服务器L实例评测 | 实例评测使用之体验评测:华为云云耀云服务器管理、控制、访问评测 介绍华为云云耀云服务器 华为云云耀云服务器 (目前已经全新升级为 华为云云耀云服务器L实例) 华为云云耀云服务器是什么华为云云耀…...
resultmap
自定义映射resultMap resultMap处理字段和属性的映射关系 若字段名和实体类中的属性名称不一致,则可以通过resultMap设置自定义映射 建moudel项目【实现多对一、一对多的表操作demo】 temp员工表、dept部门表 导入依赖【mysql驱动、junit、mybatis、日志依赖log4…...
宽带光纤接入网中影响家宽业务质量的常见原因有哪些
1 引言 虽然家宽业务质量问题约60%发生在家庭网(见《家宽用户家庭网的主要质量问题是什么?原因有哪些》一文),但在用户的眼里,所有家宽业务质量问题都是由运营商的网络质量导致的,用户也因此对不同运营商家…...
C++ - 封装 unordered_set 和 unordered_map - 哈希桶的迭代器实现
前言 unordered_set 和 unordered_map 两个容器的底层是哈希表实现的,此处的封装使用的 上篇博客当中的哈希桶来进行封装,相当于是在 哈希桶之上在套上了 unordered_set 和 unordered_map 。 哈希桶的逻辑实现: C - 开散列的拉链法&…...
惠州seo博客/青岛关键词优化平台
跳槽几乎是每个人职业生涯的一部分,很多HR说“三年两跳”已经是一个跳槽频繁与否的阈值了,可为什么市面上有很多程序员不到一年就跳槽呢?他们不担心影响履历吗? PayScale之前发布的《员工最短任期公司排行榜》中,两家码…...
松江建设网站公司/免费广告网
对于零基础想学Java的朋友,其实一开始最应该做的就是定好学习目标和端正学习态度,切记不要三天打鱼两天晒网! 首先你是零基础,现在急需把Java学好,在保证学习质量的同时,用最短的时间学好Java应该掌握的必要…...
大连地区建设网站/百度人工客服电话24小时
JSP 脚本元素 JSP脚本元素用来插入Java代码,这些Java代码将出现在由当前JSP页面生成的Servlet中。脚本元素有三种格式: 表达式格式<% expression %>:计算表达式并输出其结果。 Scriptlet格式<% code %&…...
wordpress 底部小工具/百度指数的使用方法
支持基本的分区建立、删除、隐藏等操作。建立新分区时可指定详细参数; 支持ide、scsi、sata等各种类型的硬盘。支持u盘、usb硬盘、存储卡(闪存卡); 支持fat12、fat16、fat32、ntfs文件系统; 可以快速格式化fat12、fat16、fat32、ntfs分区。格…...
犀牛云网站建设公司/广州百度seo代理
显示隐藏文件及文件夹 defaults write com.apple.finder AppleShowAllFiles -boolean true 隐藏文件及文件夹 defaults write com.apple.finder AppleShowAllFiles -boolean false 参考:https://www.jianshu.com/p/ac682cf53cea 转载于:https://www.cnblogs.com/W-it-H-ou-T/p/…...
做网站代理好吗/百度建站云南服务中心
关于Python的数据分析,当我们遇到的数据量小、数据结构简单时,可以通过字典、列表等Python常见的数据结构来处理。但是当我们面对的大量数据以及复杂数据的局面时,就需要用一些专门用于数据分析的扩展库来处理数据了。今天给大家介绍一个Pyth…...