Machine Learning机器学习之向量机(Support Vector Machine,SVM)

目录

前言

算法提出背景:

核心思想:

原理:

应用领域:

一、支持向量机分类(主要变体)

 二、构建常见的支持向量机模型

基于Python 中的 Scikit-learn 库构建线性支持向量机(SVM)

三、向量机应用案列(完整代码)

四、总结 

优点:

缺点:

优化方向:


博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有需要可以联系作者我哦!

🍅文末三连哦🍅

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

前言

支持向量机(Support Vector Machine,SVM)是由Vladimir N. Vapnik等人于1990年提出的一种监督学习算法。它的核心思想通过在特征空间中找到一个最优的超平面来进行分类,使得两个类别的样本之间的间隔最大化。SVM 在分类、回归分析、异常检测等领域都有着广泛的应用。

算法提出背景:

支持向量机最初是为了解决二分类问题而提出的。其发展背景主要源于统计学习理论和凸优化理论的发展。在提出之初,SVM 主要用于处理线性可分的数据集,后来又发展出了核技巧(kernel trick),使其能够处理非线性分类问题。

核心思想:

SVM 的核心思想是找到一个最优的超平面,将不同类别的样本分隔开来,并且使得两个类别之间的间隔最大化。具体来说,SVM 算法的目标是找到一个决策边界(超平面),使得所有的样本点到这个边界的距离(即间隔)最大化。

原理:

  1. 间隔最大化: SVM 算法通过最大化分类边界与最近的训练样本点之间的间隔来实现分类。

  2. 支持向量: 在优化问题中,只有一部分训练样本点被称为支持向量,它们是离分类边界最近的样本点。

  3. 核技巧: SVM 使用核技巧来将线性分类扩展到非线性分类。核技巧是一种数学手段,可以在高维特征空间中进行计算,而不需要显式地计算高维空间中的特征向量。

支持向量机的原理的公式来描述:

对于二分类问题,给定一个训练数据集:

支持向量机的原理可以通过以下公式来描述:

对于二分类问题,给定一个训练数据集:

\{(\mathbf{x}_1, y_1), (\mathbf{x}_2, y_2), \ldots, (\mathbf{x}_n, y_n)\}, \quad y_i \in \{-1, 1\}

其中{x}_i是输入样本的特征向量,y_i 是对应的类别标签,取值为-1或 1。

我们的目标是找到一个超平面 w^T \mathbf{x} + b = 0,能够将两类样本分开,并且使得两个类别中距离超平面最近的样本点到超平面的距离最大。这个距离称为间隔(margin)。

应用领域:

  1. 分类问题: SVM 主要用于解决二分类问题,可以通过调整参数和选择合适的核函数来适应不同的数据特征。

  2. 回归分析: SVM 还可以应用于回归分析问题,称为支持向量回归(Support Vector Regression,SVR),通过最小化预测值与真实值之间的误差来拟合数据。

  3. 异常检测: SVM 还可以用于异常检测,通过找到与训练样本差异较大的数据点来识别异常。

一、支持向量机分类(主要变体)

向量机广泛应用于分类和回归分析的监督学习算法

在支持向量机算法中,主要有以下几种主要的变体:

  • 线性支持向量机(Linear SVM): 最基本的支持向量机形式,用于处理线性可分或近似线性可分的数据。通过构建一个最大间隔超平面来分隔两个类别。

  • 非线性支持向量机(Nonlinear SVM): 通过使用核技巧(kernel trick),将数据映射到高维空间中进行分类,从而处理非线性可分的数据。常用的核函数包括多项式核、高斯核(径向基函数核)等。

  • 支持向量回归(Support Vector Regression,SVR): SVM 不仅可以用于分类问题,还可以用于回归分析。支持向量回归尝试通过最大化边界以外数据点的容忍度来拟合数据。

  • 多类别支持向量机(Multiclass SVM): SVM 最初是针对二分类问题的,但可以通过一对一(One-vs-One)或一对其他(One-vs-Rest)的策略来处理多类别分类问题。

  • 增量式支持向量机(Incremental SVM): 增量式支持向量机允许在训练数据集发生变化时对模型进行增量式的更新,而无需重新训练整个模型。

  • 稀疏支持向量机(Sparse SVM): 稀疏支持向量机通过引入稀疏性约束,以减少模型中使用的支持向量的数量,从而降低模型的复杂度。

 二、构建常见的支持向量机模型

构建一个常见的支持向量机(SVM)网络通常涉及以下步骤:

  1. 数据准备: 准备用于训练和测试的数据集,包括特征和标签。确保数据集经过适当的预处理,如归一化、缺失值处理等。

  2. 模型选择: 选择合适的支持向量机模型,包括线性 SVM、非线性 SVM(使用核技巧)等,根据问题的性质选择合适的模型。

  3. 模型训练: 使用训练数据对支持向量机模型进行训练。训练过程主要包括优化超参数和拟合数据。

  4. 模型评估: 使用测试数据对训练好的模型进行评估,评估模型的性能指标如准确率、精确率、召回率、F1 值等。

  5. 模型调优: 根据评估结果调整模型的超参数或者进行特征选择等操作,进一步提高模型的性能。

基于Python 中的 Scikit-learn 库构建线性支持向量机(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# 加载数据集(这里以鸢尾花数据集为例)
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)# 特征标准化(对特征进行归一化处理)
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)# 初始化支持向量机模型
svm = SVC(kernel='linear', random_state=42)# 训练支持向量机模型
svm.fit(X_train, y_train)# 在测试集上进行预测
y_pred = svm.predict(X_test)# 计算模型准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

执行结果:精度为100%

三、向量机应用案列(完整代码)

基于支持向量机(SVM)可以用于图像分类任务,以下通过使用 SVM 对手写数字进行识别。

我们使用了 sklearn 中的手写数字数据集(Digits Dataset)。我们将数据集划分为训练集和测试集,并对特征进行了标准化处理。然后,我们初始化了一个支持向量机模型,并使用训练集对其进行训练。最后,在测试集上进行预测,并计算了模型的准确率。

需要注意的是选择了径向基函数核(RBF Kernel),这是一种常用的非线性核函数,适用于处理非线性分类问题,如图像分类。我们可以根据实际情况选组需要的函数核。

# 导入必要的库
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# 加载手写数字数据集
digits = datasets.load_digits()# 获取特征和标签
X = digits.data
y = digits.target# 将数据集划分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 特征标准化(对特征进行归一化处理)
sc = StandardScaler()
X_train = sc.fit_transform(X_train)
X_test = sc.transform(X_test)# 初始化支持向量机模型
svm = SVC(kernel='rbf', random_state=42)# 训练支持向量机模型
svm.fit(X_train, y_train)# 在测试集上进行预测
y_pred = svm.predict(X_test)# 计算模型准确率
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)

执行结果:精度约为98% 

四、总结 

优点:

  1. 有效的高维空间处理能力: SVM 在高维空间中可以非常高效地进行分类,适用于数据维度较高的情况,如文本分类、图像分类等。

  2. 泛化能力强: SVM 的目标是最大化分类边界的间隔,因此具有较好的泛化能力,对于未见过的数据集也有较好的表现。

  3. 抗噪声能力强: SVM 使用间隔最大化的方法,对于噪声数据的影响较小,能够更好地处理不完全标记的数据。

  4. 可以处理非线性分类问题: 通过核技巧(kernel trick),SVM 可以很容易地将线性分类扩展到非线性分类,适用于复杂的数据分布。

  5. 无局部极小值问题: SVM 的优化问题是凸优化问题,不存在局部极小值,因此能够保证找到全局最优解。

缺点:

  1. 对大规模数据集计算量较大: 在大规模数据集上,SVM 的训练时间较长,且占用的内存较大,不适合处理大规模数据集。

  2. 参数调节和核选择不直观: SVM 的性能很大程度上依赖于选择合适的核函数和参数调节,这些参数的选择通常不太直观,需要经验和实验来确定。

  3. 不适合非平衡数据集: SVM 对非平衡数据集的处理能力相对较弱,需要额外的处理手段来解决非平衡分类问题。

优化方向:

  1. 增量学习: 研究如何将新的样本数据逐步融入到原有的 SVM 模型中,以实现在线学习和动态更新模型。

  2. 并行化和分布式处理: 针对大规模数据集,研究如何将 SVM 训练过程进行并行化和分布式处理,以提高训练效率。

  3. 自动化参数调节: 研究自动化调节 SVM 参数的方法,例如使用基于优化算法或者交叉验证的方法来选择合适的参数。

  4. 深度学习与 SVM 结合: 探索深度学习和 SVM 结合的方法,以利用深度学习的特征提取能力和 SVM 的优化能力。

  5. 多核函数选择: 研究不同数据集和问题情况下,选择合适的核函数的方法,以进一步提高 SVM 的性能。

🍅文末三连哦🍅感谢支持

👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟

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

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

相关文章

06. 详解 Java 的 Object 类和常见类

Object 类 java.lang.Object 作为所有 Java 类的祖先&#xff0c;编译系统默认继承 Object 类&#xff0c;Object 类包含了所有 Java 类的公共属性和方法。 Object() 构造方法getClass():Class<?>public boolean equals(Object obj) 比较两对象封装的数据是否相等&…

SQLite中的动态内存分配(五)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite中的原子提交&#xff08;四&#xff09; 下一篇&#xff1a;SQLite使用的临时文件&#xff08;二&#xff09; ​概述 SQLite使用动态内存分配来获得 用于存储各种对象的内存 &#xff08;例如&#xff1a…

Django开发复盘

一、URL 对于一个不会写正则表达式的蒟蒻来说&#xff0c;在urls.py中就只能傻傻的写死名字&#xff0c;但是即便这样&#xff0c;还会有很多相对路径和绝对路径的问题&#xff08;相对ip端口的路径&#xff09;&#xff0c;因为我们网页中涉及到页面跳转&#xff0c;涉及到发送…

uniapp 用web-view 嵌套uniapp

1. uniapp 用web-view 嵌套uniapp uniapp开发的APP要嵌套uniapp开发的h5,并且APP后面还要打包H5,这就涉及app和h5之间的通信,h5和h5之间的通信。 1.1. 准备工作 无论是app和h5通信还是 h5和h5之间的通信都是需要引入web-view的sdk文件 我下载的是1.5.2版本,代码如下 !(functi…

目标检测系列模型发展历程

常见数据集&#xff1a; VOC-->COCO 模型发展&#xff1a; RCNN-->Fast RCNN-->Faster RCNN-->Mask RCNN 这一系列的模型&#xff08;RCNN、Fast RCNN、Faster RCNN、Mask RCNN&#xff09;代表了计算机视觉特别是在物体检测和分割领域的一系列重大进展。下面&a…

神经网络:梯度下降法更新模型参数

作者&#xff1a;CSDN _养乐多_ 在神经网络领域&#xff0c;梯度下降是一种核心的优化算法&#xff0c;本文将介绍神经网络中梯度下降法更新参数的公式&#xff0c;并通过实例演示其在模型训练中的应用。通过本博客&#xff0c;读者将能够更好地理解深度学习中的优化算法和损…

【LeetCode】20. 有效的括号(Java自用版)

栈 首先&#xff0c;我们定义一个isValid方法&#xff0c;该方法接受一个字符串s作为参数&#xff0c;并返回一个布尔值来表示该字符串是否有效。 public boolean isValid(String s) {// 如果字符串为空&#xff0c;则自然是有效的if (s.isEmpty())return true;// 创建一个栈…

帆软报表在arm架构的linux

有朋友遇到一个问题在部署帆软报表时遇到报错。 问 我在 arm架构的linux服务器上部署帆软报表遇到了一个棘手的问题&#xff0c;你有空帮忙看下嘛。 我看后台日志报的错是 需要升级 gcc、libmawt.so &#xff0c;是系统中缺少Tomcat需要的依赖库&#xff0c;你之前处理过类似…

超级会员卡积分收银系统源码:积分+收银+商城三合一小程序 带完整的安装代码包以及搭建教程

信息技术的迅猛发展&#xff0c;移动支付和线上购物已经成为现代人生活的常态。在这样的背景下&#xff0c;商家对于能够整合收银、积分管理和在线商城的综合性系统的需求日益强烈。下面&#xff0c;罗峰给大家分享一款超级会员卡积分收银系统源码&#xff0c;它集积分、收银、…

机器学习(复试)

学习分类 其学习形式主要分为&#xff1a;有监督学习、无监督学习、半监督学习 有监督 有监督学习&#xff08;supervised learning&#xff09;&#xff0c;需要你事先需要准备好要输入数据&#xff08;训练样本&#xff09;与真实的输出结果&#xff08;参考答案) 预测结…

vector类(一)

文章目录 vector介绍和使用1.vector的介绍2.vector的使用2.1 vector的定义2.2 vector iterator的使用2.3 vector空间增长问题2.4 vector增删查改2.5 vector迭代器失效问题 3.vector 在OJ中的使用 vector介绍和使用 1.vector的介绍 vector是表示 可变大小数组的 序列容器。 就…

四、harmonyos实操一个toDoItem待办列表

官方讲的很大概&#xff0c;有些细节得去看源码才能知道&#xff0c;不过还是撸出来一个简易版的的item了 import image from ohos.multimedia.image;Entry // 表示入口 Component struct Index {State isComplete:boolean false;private totalTasks: Array<string> […

《数据结构学习笔记---第五篇》---链表OJ练习上

目录 CM11链表分割 OR36 链表的回文结构 160.相交链表 141&142环形链表 CM11链表分割 step1:思路分析 1.首先可以想到&#xff0c;我们可以将原链表的元素划分到两个新的链表之中&#xff0c;由于必须保持顺序&#xff0c;所以新链表我们要用尾插。 2.为了方便进行尾插我…

自动化与智能化并行:数字化运维体系助力企业腾飞

文章目录 文章目录 文章目录 一、引言二、数字化运维体系的核心要素三、构建数字化运维体系的策略四、数字化运维体系的实施与挑战主要内容读者对象 一、引言 随着信息技术的迅猛发展&#xff0c;数字化转型已成为企业提升竞争力、实现可持续发展的必由之路。在数字化转型的过…

JSP – 支持WORD上传的富文本编辑器

1.下载示例 https://gitee.com/xproer/zyoffice-tinymce5 2.引入组件 3.配置转换接口 效果 泽优Office文档转换服务(zyOffice) 功能&#xff1a;一键导入Word转HTML&#xff0c;不装控件&#xff0c;不装Office&#xff0c;任意平台兼容(Windows,macOS,Linux,安卓Android,苹果…

Java文件基本操作入门指南

Java文件基本操作入门指南 文章目录 Java文件基本操作入门指南前言一、文件的基本操作1、文件的创建2、文件的写入3、文件的读取4、文件的删除 二、进阶操作与技巧1、文件的复制与移动2、文件内容的追加3、随机访问文件4、文件路径与名称操作 三、最佳实践与注意事项1、异常处理…

flutter boost 如何从native跳转到flutter页面

Flutter Boost 是一个 Flutter 插件&#xff0c;它可以帮助开发者在原生应用和 Flutter 应用之间无缝跳转。以下是一些基本步骤&#xff0c;展示了如何使用 Flutter Boost 从原生&#xff08;Native&#xff09;页面跳转到 Flutter 页面。 ### 1. 配置 Flutter Boost 在你的 …

【GPU系列】选择最适合的 CUDA 版本以提高系统性能

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

什么是数据仓库

数据仓库定义 数据仓库,按照传统的定义,数据仓库是一个面向主题的、集成的、持久的(非易失的)、反映历史变化(随时间变化),用来支持管理人员决策的数据集合。 通俗讲,企业希望能够更快得处理比较多的数据,数据仓库由此诞生。 就像是企业的财务系统。各个部门(面向主…

nvm安装以后,node -v npm 等命令提示不是内部或外部命令

因为有vue2和vue3项目多种&#xff0c;所以为了适应各类版本node,使用nvm管理多种node版本&#xff0c;但是当我按教程安装nvm以后&#xff0c;nvm安装以后&#xff0c;node -v npm 等命令提示不是内部或外部命令 首先nvm官网网址&#xff1a;https://github.com/coreybutler/…