算法系列——有监督学习——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.mzph.cn/diannao/74046.shtml

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

相关文章

【Mani_skill】success判断的核心调用逻辑

1. 可视化调用流程(from Deepseek-r1-Cursor) [RL算法调用 env.step()]↓ 调用 env.get_info()↓ 调用 env.evaluate() → 返回包含 success 的字典↓ 将 success 存入 info 字典↓ 在 step() 中处理终止条件: terminated success | fail

【图像处理基石】什么是HDR图片?

1. 什么是HDR图片? HDR(高动态范围图像,High Dynamic Range)是一种通过技术手段扩展照片明暗细节的成像方式。以下是关于HDR的详细说明: 核心原理 动态范围:指图像中最亮和最暗区域之间的亮度差。人眼能…

嵌入式笔记 | 正点原子STM32F103ZET6 4 | 中断补充

1. 外设引脚重映射 1.1 定义 在STM32中,每个外设的引脚都有默认的GPIO端口,但有些引脚可以通过重映射寄存器将功能映射到其他端口。这种机制称为引脚重映射,主要用于解决引脚复用冲突或优化PCB布线。 1.2 重映射的类型 部分重映射&#x…

如何选择合适的 AI 模型?(开源 vs 商业 API,应用场景分析)

1. 引言 在 AI 迅猛发展的今天,各类 AI 模型层出不穷,从开源模型(如 DeepSeek、Llama、Qwen)到商业 API(如 OpenAI 的 ChatGPT、Anthropic 的 Claude、Google Gemini),每种方案都有其优势与适用…

攻克 3D 模型网站建设难题,看迪威系统优势

在当今数字化时代,3D 模型广泛应用于建筑设计、游戏开发、工业制造、文化创意等诸多领域。拥有一个功能强大的 3D 模型网站,对于企业展示产品、设计师分享作品、教育机构开展教学等都具有重要意义。然而,构建这样一个网站却并非易事&#xff…

使用uniapp的vite版本进行微信小程序开发,在项目中使用mqtt连接、订阅、发布信息

1、保证在微信公众平台配置socket合法域名 2、项目中使用mqtt 建议在package.json中配置"mqtt": “4.1.0”,使用这个版本的依赖 页面中引入mqtt并配置连接 // ts-ignoreimport * as mqtt from mqtt/dist/mqtt.js; //要使用这里面的const state reacti…

【FAQ】HarmonyOS SDK 闭源开放能力 —Map Kit(6)

1.问题描述: 使用华为内置的MapComponent, 发现显示不出来。查看日志, MapRender底层有报错。 解决方案: 麻烦按以下步骤检查下地图服务,特别是签名证书指纹那部分。 1.一般没有展示地图,可能和没有配置…

现代复古像素风品牌海报游戏排版设计装饰英文字体 Psygen — Modern Pixel Font

Psygen 是一种像素化等宽字体,具有强烈的复古未来主义和网络风格美学。块状的、基于网格的字体采用了早期的计算机界面、街机游戏排版和 ASCII 艺术。 该字体支持拉丁文、西里尔文和希腊文脚本,使其适用于多语言设计。扩展的字符集还具有唯一的符号和方…

小科普《DNS服务器》

DNS服务器详解 1. 定义与核心作用 DNS(域名系统)服务器是互联网的核心基础设施,负责将人类可读的域名(如www.example.com)转换为机器可识别的IP地址(如192.0.2.1),从而实现设备间的…

lunar是一款无第三方依赖的公历 python调用

lunar是一款无第三方依赖的公历(阳历)、农历(阴历、老黄历)、佛历和道历工具,支持星座、儒略日、干支、生肖、节气、节日、彭祖百忌、吉神(喜神/福神/财神/阳贵神/阴贵神)方位、胎神方位、冲煞、纳音、星宿、八字、五行、十神、建除十二值星、青龙名堂等十二神、黄道…

力扣hot100——三数之和(双指针)

题目:三数之和 排序 双指针 本题的难点在于如何去除重复解。 算法流程: 1、特判,对于数组长度 n,如果数组为 null 或者数组长度小于 3,返回 []。 2、对数组进行排序。 3、遍历排序后数组: &#xff08…

操作系统为ubantu的服务器上部署nginx软件基础步骤总结

今天在这里,我们总结一下ubantu的服务器上部署nginx软件,请按照以下步骤进行安装: 1、更新包列表: 首先更新你系统中的可用软件包列表,以确保你可以安装最新版本。 sudo apt update2、 Ubuntu上更新已安装软件包&…

记录一次,rabbitmq开启stomp插件之后,还是连不上15674端口的问题

原因是装在docker 里面的rabbitmq 没有映射15674端口,需重新删除容器之后重新运行 docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -p 15674:15674 -p 1883:1883 -p 15675:15675 rabbitmq:版本号 进入docker容器开启插件 docker exec -it rabbitm…

MATLAB 控制系统设计与仿真 - 27

状态空间的标准型 传递函数和状态空间可以相互转换,接下来会举例如何有传递函数转成状态空间标准型。 对角标准型 当 G(s)可以写成: 即: 根据上图可知: 约当标准型 当 G(s)可以写成: 即: 根据上图…

1.FastAPI简介与安装

文章目录 为什么选择FastAPI?FastAPI支持的功能FastAPI的安装第一个FastAPI应用运行应用 为什么选择FastAPI? python web开发: Django: 适合大型复杂项目;Flask:适合灵活开发,搭建小型项目;FastAPI: 兼具开…

【MyDB】一个仿照MySQL的轮子项目系列文章汇总

迄今所有系列文章内容如下: 代码位于xianghua-2/MYDB: 一个仿MySQL的简易数据库 1 项目环境配置以及整体项目结构 【MyDB】1-MyDB环境配置及项目结构-CSDN博客 2 TransactionManager事务管理模块 【MyDB】2-TransactionManager 事务管理-CSDN博客 3 DataManage…

2025年汽车加气站操作工考试精选题库

汽车加气站操作工题库中题目及答案: 单项选择题 1、按压力容器的设计压力分为( )个压力等级。 A. 3 B. 4 C. 5 答案:B 2、缓冲罐的安装位置在天然气压缩机( )。 A. 前 B. 后 C. 中间 答案&#…

【Unity Bug 随记】使用Rider debug功能时Unity Reload Domain卡死问题

使用Rider debug功能时Unity Reload Domain卡死 检查是否使用unity version control版本控制系统(VCS),使用的话删除这个包,再尝试,如果能正常断点调试,说明确实是VCS的问题。 我和几个网友都是这个原因…

麒麟银河V10服务器RabbitMQ安装

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

springboot操作redis集群,注意事项

整合redis可查看博文 springboot 整合redis_springboot整合redis csdn-CSDN博客 集群中操作注意事项 1 多键操作失败: 当使用multiGet等需要同时访问多个键的方法时,如果没有使用Hash Tags,这些键可能会被分配到不同的槽中。如果这些槽位于…