支持向量机SVM

支持向量机(SVM,Support Vector Machines)是一种广泛使用的监督学习方法,适用于分类、回归和其他任务。SVM的核心思想是找到一个最优的决策边界(在二维空间中是一条线,在更高维度是一个超平面),以此来区分不同类别的数据点。SVM试图将这个决策边界与最近的训练数据点(即支持向量)之间的距离最大化,以增强模型的泛化能力。
下面是SVM从底层到高层的详细讲解:

线性SVM

线性SVM专注于在数据特征空间中寻找一个最优的线性超平面,该超平面能够正确分离不同类别的数据点。

  • 决策边界:在二分类问题中,假设我们有两类数据点,线性SVM的目标是找到一个超平面((w \cdot x + b = 0),其中(w)是权重向量,(b)是偏置项),使得正类和负类数据点被该超平面分开。
  • 最大间隔:SVM通过最大化决策边界与最近数据点之间的距离(即间隔)来选择最优的超平面。这些最近的数据点称为支持向量,它们直接影响决策边界的位置和方向。
  • 优化问题:找到这样的(w)和(b),可以通过求解一个凸二次规划问题来实现,目标函数是最小化(\frac{1}{2}||w||^2),同时满足约束条件(y_i(w \cdot x_i + b) \geq 1),对于所有的训练样本(i)。这里(y_i)是每个样本的标签,取值为+1或-1。

核技巧

当数据不是线性可分时,线性SVM就无法有效工作。这时,可以应用核技巧将原始特征映射到一个更高维的空间,使得数据在这个新空间中线性可分。

  • 核函数:核技巧通过一个核函数来隐式地完成这种高维映射,而不需要直接计算映射后的数据点。常用的核函数包括线性核、多项式核、径向基函数(RBF)核和sigmoid核。
  • 映射到高维空间:在这个高维特征空间中,数据点的分布可能会变得线性可分。然后,SVM可以像处理线性可分数据那样来找到一个最优的决策边界。

模型训练

  • 损失函数:SVM的损失函数设计为合页损失(hinge loss),它对于正确分类且离决策边界足够远的样本不会累积损失,而对于分类错误或离决策边界过近的样本会累积损失。
  • 优化算法:求解SVM的优化问题通常使用序列最小优化(SMO)算法或其他凸优化算法。SMO算法通过一次只优化一对参数来高效地解决问题。

多类分类

虽然SVM本质上是一个二分类器,但它可以通过一对一(OvO)或一对多(OvR)策略被扩展到多类分类问题。

SVM的优势

  • 有效处理高维空间:SVM在处理高维数据(特征多)时表现出色,即使在数据维度超过样本数量的情况下也能有效工作。
  • 适用于复杂数据集:通过使用合适的核函数,SVM可以有效处理线性不可分的数据集。
  • 泛化能力强:SVM试图最大化决策边界的边缘,因此通常泛化错误率低,即在未见过的数据上的表现比较好。
  • 模型简洁:SVM模型基本上由支持向量决定,这意味着模型不仅简洁,而且决策函数只依赖于少数数据点,从而提高了模型的解释性。
  • 灵活性:通过选择不同的核函数,SVM可以适

应不同类型的数据特征分布,包括线性和非线性关系。

SVM的局限

  • 参数选择敏感:SVM的性能在很大程度上依赖于核函数的选择以及核函数参数(如RBF核的γ)和正则化参数C的设置。不恰当的参数选择可能导致过拟合或欠拟合。
  • 大规模数据集处理:对于非常大的数据集,SVM的训练时间可能非常长,这主要是因为优化问题的复杂性。尽管有一些改进的算法(如近似训练技术),但在处理大规模数据时,SVM可能不如一些线性模型或基于树的模型高效。
  • 概率估计困难:SVM本身不直接提供概率估计,虽然可以通过额外的五折交叉验证步骤来获得这些估计,但这会增加计算成本。
  • 多类分类问题:虽然SVM可以扩展到多类分类,但这种扩展通常涉及将多类问题分解为多个二类问题,这增加了训练和优化的复杂性。
  • 数据预处理和特征缩放:SVM对特征的缩放非常敏感,因此在应用SVM之前需要仔细地数据预处理,特别是进行特征缩放。

代码实现

我们可以使用Python中的Scikit-learn库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.svm import SVC# 加载数据集,这里我们使用内置的鸢尾花(Iris)数据集
iris = datasets.load_iris()
X = iris.data
y = iris.target# 为了简化问题,我们只使用前两个特征,并且只处理二分类问题
X = X[:, :2]
y = y[y < 2]# 划分数据集为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 特征缩放
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)# 训练线性SVM分类器
svm = SVC(kernel='linear', C=1.0)
svm.fit(X_train_scaled, y_train)# 测试集上的准确率
accuracy = svm.score(X_test_scaled, y_test)
print(f"测试集准确率: {accuracy:.2f}")

这段代码首先加载鸢尾花数据集,然后选择了前两个特征和两个类别来简化为一个二分类问题。之后,数据集被划分为训练集和测试集,特征进行了标准化处理(这是SVM训练前的重要步骤之一)。最后,使用线性核函数训练SVM分类器,并在测试集上评估其准确率。
注意,这个简单的例子只使用了线性核,并且处理了一个二分类问题。对于非线性可分的数据集,你可能需要使用不同的核函数(如RBF核),Scikit-learn的SVC类同样支持通过kernel参数选择不同的核函数。而且,对于多类分类问题,Scikit-learn会自动应用一对一(OvO)或一对多(OvR)策略,无需用户手动实现。

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

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

相关文章

【北邮鲁鹏老师计算机视觉课程笔记】10 Classification 分类

【北邮鲁鹏老师计算机视觉课程笔记】10 Classification 分类 1 图像识别的基本范式 检测问题&#xff1a;不仅要知道有没有&#xff0c;还要知道在哪里 分类是整图级标签&#xff0c;检测是区域级标签&#xff0c;分割是像素级标签 2 检测任务的应用 3 单实例识别与类别识别…

问题 J: 今年暑假不AC

题目描述 “今年暑假不AC&#xff1f;” “是的。” “那你干什么呢&#xff1f;” “看世界杯呀&#xff0c;笨蛋&#xff01;” “#$%^&*%...” 确实如此&#xff0c;世界杯来了&#xff0c;球迷的节日也来了&#xff0c;估计很多ACMer也会抛开电脑&#xff0c;奔向电视…

【5G NR】【一文读懂系列】移动通讯中使用的信道编解码技术-Turbo编码原理

目录 Turbo码&#xff1a;无线通信中的革命性技术 引言 一、Turbo码的基本原理 1.1 卷积码基础&#xff1a; 1.2 Turbo码的构造&#xff1a; 1.2.1 分量编码器 1.2.2 随机交织器 1.2.3 穿刺和复接单元 1.3 编码器结构的重要性和影响 1.4 迭代解码&#xff1a; 1.4.1 …

接口测试怎么进行,如何做好接口测试

一、什么是接口&#xff1f; 接口测试主要用于外部系统与系统之间以及内部各个子系统之间的交互点&#xff0c;定义特定的交互点&#xff0c;然后通过这些交互点来&#xff0c;通过一些特殊的规则也就是协议&#xff0c;来进行数据之间的交互。 二、 常用接口采用方式&#x…

AI少女/HS2甜心选择2 仿剑三剑灵人物卡全合集打包

AI少女/HS2甜心选择2 仿剑三剑灵人物卡全合集打包 内含&#xff1a;菩提禅音[剑网3]明教晓天喵姐[剑3]明教晓天喵姐无帽版[剑3]茱莉亚[剑灵] 下载地址&#xff1a; https://www.changyouzuhao.cn/12492.html

配置DNS正反向解析服务!!!!

一.准备工作 #关闭防火墙和selinux,或者允许服务通过 [rootnode ~]# nmcli c mod ens32 ipv4.method manual ipv4.address 192.168.32.133/24 ipv4.gateway 192.168.32.2 ipv4.dns 192.168.32.132 [rootnode ~]# nmcli c reload [rootnode ~]# nmcli c up ens32[rootnode ~]# …

高速网络之翼:探索UDP的力量与灵活性

引言 在计算机网络中&#xff0c;用户数据报协议&#xff08;UDP&#xff09;是一种简单的面向数据报的传输层协议。与传输控制协议&#xff08;TCP&#xff09;相比&#xff0c;UDP不提供可靠性保证&#xff0c;但它因其低延迟和低开销的特性而在特定应用中非常有用。UDP使得…

【Java万花筒】解析Java依赖注入:从Spring到CDI的全方位比较

探索Java依赖注入&#xff1a;框架、实践与比较 前言 在当今的软件开发中&#xff0c;依赖注入已经成为了一种不可或缺的设计模式。Java作为一种广泛应用的编程语言&#xff0c;在依赖注入领域也有着丰富的框架和实践。本文将探索Java中几种常用的依赖注入框架&#xff0c;包…

three.js 细一万倍教程 从入门到精通(三)

目录 五、详解PBR材质纹理 5.1、详解PBR物理渲染 5.2、标准网格材质与光照物理效果 5.3、置换贴图与顶点细分设置 5.4、设置粗糙度与粗糙度贴图 5.5、设置金属度与金属贴图 5.6、法线贴图应用 5.7、如何获取各种类型纹理贴图 5.8、纹理加载进度情况 单张图片加载 多…

Windows 平台下NDK/CMAKE编译自己程序命令行

CMAKE_BUILD_TYPE 编译类型&#xff08;Debug、Release&#xff09; CMAKE_TOOLCHAIN_FILE 指定 Android 编译工具链文件 CMAKE_SYSTEM_NAME 系统名称&#xff1a;不要改变&#xff1a;值&#xff08;Android&#xff09; ANDROID_NATIVE_API_LEVEL 安卓原…

Transformer实战-系列教程17:DETR 源码解读4(Joiner类/PositionEmbeddingSine类/位置编码/backbone)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Transformer实战-系列教程总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 点我下载源码 DETR 算法解读 DETR 源码解读1&#xff08;项目配置/CocoDetection类&#xff09; …

数据结构-并查集

并查集原理 在一些应用问题中&#xff0c;需要将n个不同的元素划分成一些不相交的集合。开始时&#xff0c;每个元素自成一个 单元素集合&#xff0c;然后按一定的规律将归于同一组元素的集合合并。在此过程中要反复用到查询一 个元素归属于那个集合的运算。适合于描述这类…

Matplotlib Figure与Axes速成:核心技能一网打尽

Matplotlib Figure与Axes速成&#xff1a;核心技能一网打尽 &#x1f335;文章目录&#x1f335; &#x1f333;引言&#x1f333;&#x1f333; 一、Figure&#xff08;图形&#xff09;&#x1f333;&#x1f341;1. 创建Figure&#x1f341;&#x1f341;2. 添加Axes&#…

NARF关键点提取原理简介

一、NARF2D边缘点探测的矩形平面的边长s和计算点p和上邻域的距离所用的k值 二、障碍物边缘和阴影边缘 三、NARF边缘点探测 四、NARF借助边缘点信息进行关键点检测 本人也是参考其他博主&#xff0c;以及这份英文文献写的(毕竟是英文文献&#xff0c;部分翻译肯定有些误差&…

一探Lepton Search究竟

2024年1月25日&#xff0c;阿里巴巴原技术副总裁在 Twitter 上称用不到 500 行 Python 代码实现了 AI 对话搜索引擎&#xff0c;并在27日附上了开源地址&#xff1a;https://github.com/leptonai/search_with_lepton&#xff0c;截止春节期间已经5.8K的Star。 Twitter截图 Comm…

Spring Security学习(四)——登陆认证(包括自定义登录页)

前言 和前面的文章隔了很长时间才更新Spring Security系列&#xff0c;主要原因一个是之前太忙了&#xff0c;把项目都忙完了&#xff0c;赶上春节假期&#xff0c;就慢慢研究。Spring Security的体系非常复杂&#xff0c;一口吃不了热豆腐&#xff0c;没办法速成&#xff0c;…

第10讲投票创建页面实现

投票创建页面实现 文件选择上传组件 uni-file-picker 扩展组件 安装 https://ext.dcloud.net.cn/plugin?nameuni-file-picker 日期选择器uni-datetime-picker组件 安装 https://ext.dcloud.net.cn/plugin?nameuni-datetime-picker iconfont小图标 https://www.iconfont…

【数据结构与算法】判断二叉树是否完全二叉树

递归方式判断二叉树是否完全二叉树 bool TreeComplete(TreeNode* root) {if (root ! NULL) {if (root->left NULL && root->right ! NULL) {return false; // 左子树空}else if (root->left NULL && root->right NULL) {return true; // 左右子…

【力扣每日一题】力扣987二叉树的垂序遍历

题目来源 力扣987二叉树的垂序遍历 题目概述 给你二叉树的根结点 root &#xff0c;请你设计算法计算二叉树的 垂序遍历 序列。 对位于 (row, col) 的每个结点而言&#xff0c;其左右子结点分别位于 (row 1, col - 1) 和 (row 1, col 1) 。树的根结点位于 (0, 0) 。 二…

仰暮计划|“​他们艰苦半生,但真的希望祖国安祥,山河无恙”

自述&#xff0c;自赎 我没有在那个年代生活过&#xff0c;我一出生就是盛世中国&#xff0c;看遍了祖国的大好河山。但我没想到&#xff0c;走了这么远的路&#xff0c;吃了这么多的苦的爷爷会一直跟我说“不是国家不好&#xff0c;只是中国的钱拿去还债了&#xff0c;过了那…