SVM支持向量机

1.基本概念

支持向量机(Support Vector Machine,SVM)是一种有监督学习方法,主要用于分类和回归分析。它的基本思想是在特征空间中找到一个超平面,能够将不同类别的样本分开,并且使得离这个超平面最近的样本点到该平面的距离(即间隔)最大化。支持向量机在处理高维数据和非线性问题时表现良好。

以下是支持向量机的一些关键概念:

  1. 超平面(Hyperplane): 在一个 n 维空间中,一个 n-1 维的子空间就是一个超平面。在二维空间中,超平面就是一条直线;在三维空间中,超平面是一个平面。在支持向量机中,我们试图找到一个超平面,使得样本点能够被分成两个类别。

  2. 支持向量(Support Vectors): 这些是离超平面最近的数据点,它们对于定义超平面并确定分类决策边界起着关键作用。支持向量机的训练过程中,只有支持向量的位置才会影响最终模型

  3. 间隔(Margin): 间隔是指超平面与支持向量之间的距离。支持向量机的目标是最大化这个间隔,从而提高模型的泛化能力

  4. 核函数(Kernel Function): 在处理非线性问题时,可以使用核函数将数据映射到更高维的空间中,使其在高维空间中线性可分。常用的核函数包括线性核、多项式核和径向基函数(RBF)核。

  5. C 参数: C 是一个正则化参数,它控制了对误分类样本的惩罚程度。较小的 C 值会导致更大的间隔,但可能允许一些样本被错误分类;较大的 C 值则会强调对误分类样本的惩罚,可能导致更复杂的决策边界。

【补充】:

面对近似线性可分的情况,需要适当放宽这个间隔,引入软间隔松弛因子。而面对更复杂的低维线性不可分的情况,通过使用核函数将数据点映射到高维,进行寻找超平面进行划分。

🌍支持向量机(Support Vector Machine,SVM)是一种有监督学习方法,它的基本思想是在特征空间中找到一个超平面,能够将不同类别的样本分开,并且使得离这个超平面最近的样本点到该平面的距离(即间隔)最大化

2.SVM的推导(看西瓜书)

支持向量机的推导涉及到优化问题和拉格朗日对偶性,具体看西瓜书。

1.间隔和支持向量机

我们的目标是使间隔最大化。

【补充】

在支持向量机的图示中,通常X轴和Y轴表示的是特征空间的两个特征,这两个特征是用来描述数据样本的属性的。

  1. 支持向量(Support Vectors): 这些是离超平面最近的数据点,它们对于定义超平面并确定分类决策边界起着关键作用。支持向量机的训练过程中,只有支持向量的位置才会影响最终模型。

  2. 间隔(Margin): 间隔是指超平面与支持向量之间的距离。支持向量机的目标是最大化这个间隔,从而提高模型的泛化能力。

2.SMO

SMO(Sequential Minimal Optimization)是用于训练支持向量机(SVM)的一种算法。

由John C. Platt于1998年提出,SMO旨在解决支持向量机的二次规划问题。它通过将大问题拆分为一系列小规模的子问题,并针对每个子问题进行优化,从而加速了支持向量机的训练过程。

SMO的基本思想是先固定a_i之外的所有参数,然后求a_i上的极值。

由于存在约束,若固定a_i之外的其他变量,则a_i可由其他变量导出。

所以,SMO每次选择两个变量a_ia_j,并固定其他参数,然后不断执行如下两步直至收敛:

第一步:选取一对需要更新的变量 a_ia_j

第二步:固定 a_ia_j以外的参数,求解对偶问题获得更新后的 a_ia_j

3.核函数

在现实任务中,原始样本空间内也许并不存在一个能正确划分两类样本的超平面。

对这样的问题,可将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分。

常见的核函数

注意:若核函数选择不合适,则意味着将样本映射到了一个不合适的特征空间,很可能导致性能不佳。

4.软间隔与正则化 

前面的做法是一直假设存在一个超平面能将不同类的样本完全划分开,为了解决线性不可分的情况,使用了核函数进行特征空间的变换。

然而,即使我们进行特征空间变换后把样本完全的分开,也有可能这个“线性可分”是因为噪声点而过拟合造成的。(很多情况下,训练数据中有一些噪声点,把这些噪声点去除后,剩下的大部分样本组成的特征空间是线性可分的。)

缓解该问题的一个办法是允许支持向量机在一些样本上出错,因此引入了“软间隔”。

我们可以对SVM适当的放松条件,不再要求所有的点都分对,而是对不能满足约束的样本进行一些“惩罚”,为此引入惩罚因子\xi _i\geq 0,并写出软间隔SVM的形式如下:

C为惩罚参数,较大的 C 值则会强调对误分类样本的惩罚,可能导致更复杂的决策边界。小的 C 值会导致更大的间隔,但可能允许一些样本被错误分类。

C越大,即对分错样本的惩罚程度越大,因此在训练样本中准确率越高,但是泛化能力降低,也就是对测试数据的分类准确率降低。 相反,减小C的话,容许训练样本中有一些误分类错误样本,泛化能力强。 对于训练样本带有噪声的情况,一般采用后者(较小的C),把训练样本集中错误分类的样本作为噪声。

C较大要求尽可能的分对所有的点,C较小说明对错误的容忍程度较大,间隔可以较宽。

(小的C可能会欠拟合,大的C可能会过拟合。因此要小心的选择参数。 )


3.总结

支持向量机(Support Vector Machine,SVM)是一种有监督学习方法,主要用于分类和回归分析。它的基本思想是在特征空间中找到一个超平面,能够将不同类别的样本分开,并且使得离这个超平面最近的样本点到该平面的距离(即间隔)最大化。支持向量机在处理高维数据和非线性问题时表现良好。

优点:

  1. 适用于高维空间: SVM在高维空间中表现出色,特别适用于处理具有许多特征的数据集,如文本分类或图像识别。

  2. 泛化能力强: SVM通过最大化间隔的方式,有助于提高模型对新样本的泛化能力,降低过拟合的风险。

  3. 对小样本数据效果好: 即使在样本量相对较小的情况下,SVM也能表现良好,这是因为它主要关注支持向量。

  4. 核函数的灵活性: 使用核函数可以处理非线性问题,将数据映射到更高维的空间中,使其在高维空间中变得线性可分。

  5. 对异常值的鲁棒性: SVM对于一些噪声和异常值的影响相对较小,支持向量主要受到那些距离超平面最近的样本的影响。

缺点:

  1. 计算开销较大: 对于大规模的数据集,SVM的训练和预测的计算开销较大,尤其在高维空间中。

  2. 参数调优复杂: SVM有一些参数需要调优,例如C参数和核函数的选择,这可能需要通过交叉验证等方法来找到最优的参数设置。

  3. 不适用于非线性大数据集: 在非线性大数据集上,训练和预测的速度可能会受到影响,且可能需要更长的时间。

  4. 不适用于非平衡数据集: 对于类别不平衡的数据集,SVM可能会偏向于对多数类别进行优化,而忽略少数类别。

  5. 不直接提供概率估计: SVM本身不直接提供类别的概率估计,而是通过一些启发式方法进行近似,这在某些应用中可能不够理想。(逻辑回归直接输出概率) 

1.为什么SVM 支持向量机(SVM)在高维空间中表现出色,特别适用于处理具有许多特征的数据集呢?

  1. 最大间隔分隔超平面: SVM的目标是找到一个最大间隔的分隔超平面,使得不同类别的样本在特征空间中的投影距离最远。在高维空间中,样本点相对于样本数量的维度较远,更容易找到一个超平面使得不同类别之间的距离最大化。

  2. 高维度下线性可分性的增加: 随着特征维度的增加,数据在高维空间中更有可能变得线性可分。这是由于在高维空间中,不同类别的样本更容易在某个维度上有较大的差异,使得找到一个超平面来分隔它们变得更为可能。

  3. 避免维度灾难: 在高维空间中,样本点之间的距离可能更加有意义。在低维空间中,由于维度较少,样本点之间的距离可能较小,这会导致模型更容易过拟合。而在高维空间中,样本点之间的距离相对较大,有助于避免维度灾难。

  4. 支持向量的稀疏性: 在高维空间中,支持向量(决策边界附近的样本点)的数量相对较少,因为只有这些样本点对模型的构建起关键作用。这种稀疏性使得SVM在高维空间中更加高效。

  5. 核技巧: SVM使用核函数将样本映射到高维空间,从而在低维空间中非线性可分的问题在高维空间中变得线性可分。这种核技巧在处理文本分类、图像识别等高维特征数据时尤为有效。


4.SVM的过程 

支持向量机的过程可以分为训练和预测两个阶段。

1. 数据准备:

在训练和预测阶段,需要一个已标记的数据集,其中包含输入特征和相应的类别标签

2. 训练阶段:

2.1 特征映射(如果需要):

对于非线性问题,可以使用核函数将数据映射到更高维的空间。这可以通过内积运算来完成,而无需实际计算新空间中的坐标。

2.2 寻找超平面:

SVM的目标是找到一个能够最大化间隔(支持向量到超平面的距离)的超平面,以分隔不同类别的样本。这通常是一个凸优化问题。常见的优化方法包括序列最小优化(Sequential Minimal Optimization,SMO)等。

2.3 确定支持向量:

找到超平面后,支持向量就是离该超平面最近的训练样本点。它们对于定义超平面并确定分类决策边界起着关键作用。

2.4 决策函数:

根据找到的超平面和支持向量,建立一个决策函数。对于新的未标记样本,通过这个决策函数来预测其类别。

3. 预测阶段:

3.1 特征映射(如果需要):

对于测试数据,如果在训练阶段使用了特征映射,则需要将测试数据映射到相同的高维空间。

3.2 应用决策函数:

使用训练阶段得到的决策函数,根据测试样本的特征进行分类预测。

4. 参数调优:

支持向量机有一些参数需要调优,例如核函数的选择、C参数的设定等。这可以通过交叉验证等方法来完成,以提高模型的性能和泛化能力。

 5.SVM的实践

# 导入必要的库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score, classification_report# 加载数据集(以鸢尾花数据集为例)
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.2, random_state=42)# 特征缩放(可选,但在SVM中常常需要)
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 初始化SVM模型
svm_model = SVC(kernel='linear', C=1.0)# 训练模型
svm_model.fit(X_train_scaled, y_train)# 预测
y_pred = svm_model.predict(X_test_scaled)# 评估模型性能
accuracy = accuracy_score(y_test, y_pred)
report = classification_report(y_test, y_pred)print(f"Accuracy: {accuracy}")
print(f"Classification Report:\n{report}")

 

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

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

相关文章

Linux 链接 GitHub 出现 Connection timed out

问题 安装GIT并完成公钥验证:Linux 系统拉取 Github项目 [rootxxx devtools]# ssh -T gitgithub.com ssh: connect to host github.com port 22: Connection timed out解决方案 进入在存放公钥私钥id_rsa.pub文件里,新建/修改config文本 [rootxxx my…

Java 异常处理下篇:11 个异常处理最佳实践

文章目录 前言最佳实践早抛出,晚捕获原则只捕获实际可处理的异常不要忽略捕捉的异常抛出具体的检查性异常正确包装自定义异常中的异常记录或抛出异常,但不要同时执行finally 中永远不要抛出异常或返回值避免使用异常进行流程控制使用模板方法处理重复的 …

算法训练day24回溯算法理论基础77组合

今日学习链接 https://programmercarl.com/%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html#%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80 https://programmercarl.com/0077.%E7%BB%84%E5%90%88.html#%E5%89%AA%E6%9E%9D%E4%BC%98%E5%8C%96 回溯算…

sql注入,布尔盲注和时间盲注,无回显

布尔盲注 通过order by分组可以看到,如果正确会i显示you are in,错误则无任何提示,由此可以判断出,目前只显示对错,此外前端不会显示任何数据 也就是说,目前结果只有两种,在这种只有两种变量的…

Uniapp登录页面获取头像、昵称的最新方法的简单使用

前言 写小程序写到登录页面的时候,发现官方文档中原来的wx.getUserInfo和wx.getUserProfile不太能用了,学习了相对比较新的方法,这种方法的文档链接如下: https://developers.weixin.qq.com/miniprogram/dev/framework/open-abil…

交易策略的开发:关于市场到底能不能预测的哲学思考

文章目录 为什么要判断市场能否被预测三个方面来论述这个问题耗散结构理论什么是耗散结构 为什么要判断市场能否被预测 这个问题已经争论几十年了,不仅在股票市场,期货市场,外汇市场, 甚至整个金融市场。至今没有人给出一个科学的论断。 如果…

上位机是什么?与下位机是什么关系

在工业自动化领域中,上位机是一项关键而引人注目的技术。许多人对上位机的概念感到好奇,想要深入了解其在工业智能中的作用。那么,上位机究竟是什么呢? 首先,上位机是一种用于工业控制系统的软件应用,通常…

配置支持 OpenAPI 的 ASP.NET Core 应用

写在前面 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。 本文记录如何配置基于Swagger 的 ASP.NET Core 应用程序的 OpenAPI 规范。 需要从NuGet 安装 Swashbuckle.AspNetCore 包 代码实现 var builder WebApplicati…

STM32G4单片机

单片机的基本结构 CPU就是中央处理器,是单片机的内核 时钟电路,时钟源是给整个电路提供时序 其他的外设、中断以及存储器都是通过系统总线与CPU进行连接 RAM相当于电脑的内存条,随机存储器,掉电会丢失 ROM相当于电脑的硬盘&am…

vmstat 监控虚拟内存,进程,CPU

文章目录 1. 命令格式:2. 命令功能:3. 命令参数:4. 使用实例:实例1:显示虚拟内存使用情况实例2:显示活跃和非活跃内存实例3:查看系统已经fork了多少次实例4:查看内存使用的详细信息实…

美籍华裔力学和数学家林家翘

林家翘(1916年7月7日—2013年1月13日),出生于北京,男,原籍福建福州,力学和数学家,美国艺术与科学院院士、美国国家科学院院士、中国科学院外籍院士,麻省理工学院荣誉退休教授 [1]。 …

初始MySQL

一 SQL的基本概述 基本概述 ▶SQL全称: Structured Query Language,是结构化查询语言,用于访问和处理数据库的标准的计算机语言。SQL语言1974年由Boyce和Chamberlin提出,并首先在IBM公司研制的关系数据库系统SystemR上实现。 ▶美国国家标…

【Linux】Linux基本指令

目录 1.ls指令 2.cd指令 3.touch指令 4.mkdir指令 5.rmdir指令和rm指令 5.1rmdir指令 5.2rm指令 6.man指令 7.cp指令 8.mv指令 9.cat指令 10.more指令 && less指令 10.1more指令 10.2less指令 11.head指令 && tail指令 11.1head指令 11.2tai…

第23课 使用FFmpeg将rtmp流再转推到rtmp服务器

通过上节课的学习,我们已经可以正常播放本地rtmp流及mp4文件,这节课,我们将在上节课的基础上实现一个常用的转推功能:读取rtmp流或mp4文件并转推到rtmp服务器上实现直播转发功能。 一、FFmpeg API 转码推流的一般过程 1.引入ffm…

内存泄漏调试 ---- jemalloc的heap profiling

使用jemalloc时,可以通过profiling机制来发现并定位内存泄漏(memory leak)。本文翻译自原文并增加了一些例子。 1、安装 这里我们编译安装jemalloc.5.10,注意在configure的时候添加了–enable-prof选项,这样才能打开profiling机制。下文中通…

Django的request.session缓存的广发用法

前言: 相信同学们在学习PythonWeb开发的时候和我一样会遇到许多问题,今天我这边举几个例子涉及到session缓存的问题,由于当时并没有接触session缓存的技术内容,所以往往头大,一时间不知带如何解决,老师也会…

2401cmake,学习cmake2

步4:安装与测试 现在开始给项目添加安装规则和支持测试. 安装规则 安装规则非常简单:对MathFunctions,想安装库和头文件,对应用,想安装可执行文件和配置头. 所以在MathFunctions/CMakeLists.txt尾添加: install(TARGETS MathFunctions DESTINATION lib) install(FILES Mat…

服务网格(Service Mesh)流行工具

在这篇博客中,我们将介绍微服务的最佳服务网格工具列表,这些工具提供安全性、金丝雀部署、遥测、负载均衡等。 用于部署和操作微服务的服务网格工具的数量不断增加。在这篇文章中,我们将探讨您应该用来构建自己的服务网格架构的顶级服务网格…

【Eclipse平台】2 Eclipse Workbench工作台介绍

Eclipse Workbench工作台介绍 本文介绍Eclipse工作台Workbench。 当工作台启动时,首先看到的是一个对话框,该对话框允许我们选择工作区的位置。工作区是存储工作的目录。现在,只需单击“确定”即可选择默认位置。 选择工作区位置后&#x…

如何访问 Oracle OKE 集群

OKE是Oracle Cloud提供的托管Kubernetes服务,为用户提供强大而灵活的容器编排平台。在本文中,我们将详细介绍如何有效地与OKE集群进行交互,包括访问集群的不同方式、管理访问权限以及执行常见操作的步骤。 1 安装oci命令 1.1 在Oracle Linux…