算法系列——有监督学习——4.支持向量机

一、概述

支持向量机(Support Vector Machine,SVM)是一种应用范围非常广泛的算法,既可以用于分类,也可以用于回归。

本文将介绍如何将线性支持向量机应用于二元分类问题,以间隔(margin)最大化为基准,得到更好的决策边界。虽然该算法的决策边界与逻辑回归一样是线性的,但有时线性支持向量机得到的结果更好。

下面对同一数据分别应用线性支持向量机和逻辑回归,并比较其结果

左图是学习前的数据,右图是从数据中学习后的结果。右图中用黑色直线标记的是线性支持向量机的决策边界,用蓝色虚线标记的是逻辑回归的决策边界。线性支持向量机的分类结果更佳。线性支持向量机的学习方式是:以间隔最大化为基准,让决策边界尽可能地远离数据。下面来看一下线性支持向量机是如何从数据中学习的。

二、算法说明

间隔的定义:

以平面上的二元分类问题为例进行说明,并且假设数据可以完全分类。线性支持向量机通过线性的决策边界将平面一分为二,据此进行二元分类。此时,训练数据中最接近决策边界的数据与决策边界之间的距离就称为间隔

右图的间隔大于左图的间隔。支持向量机试图通过增大决策边界和训练数据之间的间隔来获得更合理的边界。

三、示例代码

下面生成线性可分的数据,将其分割成训练数据和验证数据,使用训练数据训练线性支持向量机,使用验证数据评估正确率。另外,由于使用了随机数,所以每次运行的结果可能有所不同。
 

"""
LinearSVC:线性支持向量分类模型。
make_blobs:生成模拟数据集。
train_test_split:划分训练集和测试集。
accuracy_score:计算分类准确率。
"""from sklearn.svm import LinearSVC
from sklearn.datasets import make_blobs
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
"""
生成 50个样本,分为两类,每类25个样本。
数据特征为二维,围绕两个中心点 (-1, -0.125) 和 (0.5, 0.5) 生成。
cluster_std=0.3 标准差表示数据点围绕中心点的分布较集中
"""
centers = [(-1, -0.125), (0.5, 0.5)]
X, y = make_blobs(n_samples=50, n_features=2,
centers=centers, cluster_std=0.3)                
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)  # 15个样本作为测试集(30%)
model = LinearSVC()
model.fit(X_train, y_train)  # 训练
y_pred = model.predict(X_test)
print(accuracy_score(y_pred, y_test))  """
评估函数说明:
输入参数:y_pred:模型对测试集的预测结果(由 model.predict(X_test) 生成)
y_test:测试集的真实标签(实际正确答案)
输出结果:
返回一个 0~1 之间的浮点数,表示预测正确的样本比例。
例如:0.85 表示 85% 的测试样本被正确分类。
"""

四、详细说明

软间隔和支持向量

目前我们了解的都是数据可以线性分离的情况,这种不允许数据进入间隔内侧的情况称为硬间隔。但一般来说,数据并不是完全可以线性分离的,所以要允许一部分数据进入间隔内侧,这种情况叫作软间隔。通过引入软间隔,无法线性分离的数据也可以如图所示进行学习。

基于线性支持向量机的学习结果,我们可以将训练数据分为以下3种。
1. 与决策边界之间的距离比间隔还要远的数据:间隔外侧的数据。
2. 与决策边界之间的距离和间隔相同的数据:间隔上的数据。
3. 与决策边界之间的距离比间隔近,或者误分类的数据:间隔内侧的数据。


其中,我们将间隔上的数据和间隔内侧的数据特殊对待,称为支持向量。支持向量是确定决策边界的重要数据。间隔外侧的数据则不会影响决策边界的形状。由于间隔内侧的数据包含被误分类的数据,所以乍看起来通过调整间隔,使间隔内侧不存在数据的做法更好。但对于线性可分的数据,如果强制训练数据不进入间隔内侧,可能会导致学习结果对数据过拟合。使用由两个标签组成的训练数据训练线性支持向量机而得到的结果如图所示。

左图是不允许数据进入间隔内侧的硬间隔的情况,右图是允许数据进入间隔内侧的软间隔的情况。
另外,在蓝色点表示的训练数据中特意加上了偏离值

比较两个结果可以发现,使用了硬间隔的左图上的决策边界受偏离值的影响很大;而在引入软间隔的右图上的学习结果不容易受到偏离值的影响。在使用软间隔时,允许间隔内侧进入多少数据由超参数决定。

与其他算法一样,在决定超参数时,需要使用网格搜索(grid search)和随机搜索(random search)等方法反复验证后再做决定。
 

 

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

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

相关文章

网络安全之前端学习(HTML篇)

前言:网络安全中有一个漏洞叫xss漏洞,就是利用网页引发弹窗,这就要求我们看得懂源码,所以我会持续更新前端学习,可以不精通,但是一定要会,主要掌握HTML,css,js这三项技术…

大华HTTP协议在智联视频超融合平台中的接入方法

一. 大华HTTP协议介绍 大华HTTP协议是大华股份(Dahua Technology)为其安防监控设备开发的一套基于HTTP/HTTPS的通信协议,主要用于设备与客户端(如PC、手机、服务器)之间的数据交互。该协议支持设备管理、视频流获取、…

介绍一下TiDB、RocksDb、levelDB、LSM 树、SSTable。

LSM 树(Log-Structured Merge-Tree) 核心原理:通过将随机写转换为顺序写优化写入性能,适用于写密集型场景。数据首先写入内存中的 MemTable(有序结构,如跳表),当达到阈值后转为 Imm…

Powershell WSL导出导入ubuntu22.04.5子系统

导出Linux子系统 导出位置在C盘下,根据自己的实际情况更改即可Write-Host "export ubuntu22.04.5" -ForegroundColor Green wsl --export Ubuntu-22.04 c:\Ubuntu-22.04.tar 导入Linux子系统 好处是目录可用在任意磁盘路径,便于迁移不同的设备之间Write-Host &quo…

Jmeter

Jmeter 官网地址 https://jmeter.apache.org/ 下载安装包 系统环境变量 变量值JMETER_HOMEG:\Application\apache-jmeter-5.6.3 修改成自己的安装目录CLASSPATH;%JMETER_HOME%\lib\ext\ApacheJMeter_core.jar; %JMETER_HOME%\lib\jorphan.jar;Path%JMETER_HOME%\bin 中文界…

碰一碰发视频saas系统技术源头一站式开发文档

碰一碰发视频系统技术源头一站式开发文档 一、引言 在数字化信息传播高速发展的当下,如何让视频分享更便捷、高效,成为商家和开发者们关注的焦点。“碰一碰发视频”系统以其独特的交互方式和强大的功能优势,为视频分享领域带来了革命性变革。…

Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac‘.

What went wrong: Execution failed for task ‘:path_provider_android:compileDebugJavaWithJavac’. Could not resolve all files for configuration ‘:path_provider_android:androidJdkImage’. Failed to transform core-for-system-modules.jar to match attributes {…

学习笔记 ASP.NET Core Web API 8.0部署到iis

一.修改配置文件 修改Program.cs配置文件将 if (app.Environment.IsDevelopment()) {app.UseSwagger();app.UseSwaggerUI(); }修改为 app.UseSwagger(); app.UseSwaggerUI(); 二.安装ASP.NET Core Runtime 8.0.14 文件位置https://dotnet.microsoft.com/en-us/download/do…

一、小雅自带tutorial文件教程

下载压缩包 这是elegantrl的开源地址: ElegantRL 我使用的是云服务器平台,上传压缩包之后,使用Linux解压缩命令,将压缩包解压。 使用conda新建一个虚拟环境 conda create -n ElegantRL conda activate ElegantRL安装elegantrl包 pip ins…

海康ISAPI协议在智联视频超融合平台中的接入方法

一. 海康ISAPI协议详解 海康ISAPI协议原理 海康ISAPI(Internet Server Application Programming Interface)协议是海康威视设备提供的一种基于HTTP/HTTPS的高级通信协议,用于实现客户端与设备之间的数据交互。其核心原理包括: 基…

【Azure 架构师学习笔记】- Azure Databricks (22) --Autoloader

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 接上文 【Azure 架构师学习笔记】- Azure Databricks (21) --费用相关 前言 Databricks家里在Apache Spark之上,是企业级的应对大规模数据处理的通用平台, 可以运行在AWS&a…

论文略读(2025.3.18-更新中)

关于可控视频生成 I2V3D: Controllable image-to-video generation with 3D guidance Image to Video工作,能够实现给一张图,输出一个视频,且可以控制相机。动态信息来自于用户手工设计(相机移动,人体骨骼驱动&#x…

Excel导出工具类--复杂的excel功能导出(使用自定义注解导出)

Excel导出工具类 前言: 简单的excel导出,可以用easy-excel, fast-excel, auto-poi,在导出实体类上加上对应的注解,用封装好的工具类直接导出,但对于复杂的场景, 封装的工具类解决不了,要用原生的excel导出(easy-excel, fast-excel, auto-poi都支持原生的) 业务场景: 根据…

神策数据接入 DeepSeek,AI 赋能数据分析与智能运营

在 AI 技术迅猛发展的浪潮下,神策数据正在加速推进人工智能在数据分析和智能运营领域的深度应用。近日,神策数据宣布全面接入 DeepSeek,为企业客户带来更加智能化、高效的数据分析与智能运营服务。这一举措展现了神策数据在人工智能方向的探索…

头歌 JAVA 桥接模式实验

目录 任务描述 实现方式 编程要求 测试说明 代码实现 总结 1 任务描述 某软件公司欲开发一个数据转换工具,可以将数据库中的数据转换成多种文件格式,例如 TXT、XML、PDF 等格式,同时该工具需要支持多种不同的数据库。 本关任务&#…

安全无事故连续天数计算,python 时间工具的高效利用

安全天数计算,数据系统时间直取,安全标准高效便捷好用。 笔记模板由python脚本于2025-03-17 23:50:52创建,本篇笔记适合对python时间工具有研究欲的coder翻阅。 【学习的细节是欢悦的历程】 博客的核心价值:在于输出思考与经验&am…

Docker Swarm集群搭建

Docker Swarm集群搭建 1.准备环境 搭建Docker Swarm集群最低需要准备三台设备,且均需要提前安装好Docker。我这里准备了四台机器用于搭建集群,分别是: DockerSwarm-Node1 lemonDockerSwarm-Node1:~$ docker --version Docker version 28.…

Unity教程(二十二)技能系统 分身技能

Unity开发2D类银河恶魔城游戏学习笔记 Unity教程(零)Unity和VS的使用相关内容 Unity教程(一)开始学习状态机 Unity教程(二)角色移动的实现 Unity教程(三)角色跳跃的实现 Unity教程&…

麒麟银河V10服务器RabbitMQ安装

安装步骤 rabbitMQ依赖于erlang的环境,所以需要先安装erlang,erlang跟rabbitMQ是有版本之间的关联关系的,根据对应的版本去安装下载,保证少出问题。 可以通过官网来查看RabbitMQ和erlang之间的版本对应关系 rabbitMQ和erlang之间…

让“树和二叉树”埋在记忆土壤中--性质和概念

Nice to meet your! 目录 树的介绍: 树的创建: 二叉树的概念和结构: 二叉树的存储结构: 树的介绍: 概念和结构: 不知你们是否在现实中看见过分为两个叉的枯树,大概长这样: 那…