[有监督学习]4.详细图解支持向量机

支持向量机

支持向量机(Support Vector Machine,SVM)是一种应用范围非常广泛的算法,既可以用于分类,也可以用于回归。
本节将介绍如何将线性支持向量机应用于二元分类问题,以间隔(margin)最大化为基准,得到更好的决策边界。


概述
我们使用线性支持向量机(Linear Support Vector Machine,LSVM)处理二元分类。线性支持向量机是以间隔最大化为基准,来学习得到尽可能地远离数据的决策边界的算法。虽然该算法的决策边界与逻辑回归一样是线性的,但有时线性支持向量机得到的结果更好。
下面对同一数据分别应用线性支持向量机和逻辑回归,并比较其结果(图 2-17)。

▲图 2-17 线性支持向量机和逻辑回归的比较


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


算法说明
线性支持向量机通过最大化间隔来获得更好的用于分类的决策边界。这里首先说明一下间隔的定义。方便起见,我们以平面上的二元分类问题为例进行说明,并且假设数据可以完全分类。线性支持向量机通过线性的决策边界将平面一分为二,据此进行二元分类。此时,训练数据中最接近决策边界的数据与决策边界之间的距离就称为间隔(图 2-18)。

▲图 2-18 不同的间隔


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


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

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


# 1 得到一个包含 50 个样本的二分类数据集,其中一些样本被聚类到 (-1, -0.125) 附近,而另一些样本则被聚类到 (0.5, 0.5) 附近。

# 定义了一个包含两个聚类中心的列表。这两个中心的坐标分别为 (-1, -0.125) 和 (0.5, 0.5)。
centers = [(-1, -0.125), (0.5, 0.5)]
# 使用 make_blobs 函数来创建一个二分类数据集。这个函数会根据给定的参数创建一个包含 50 个样本的数据集,每个样本有 2 个特征。数据集的聚类中心为 centers 中定义的两个点,聚类标准差为 0.3。
X, y = make_blobs(n_samples=50, n_features=2, centers=centers, cluster_std=0.3)

# 2 使用训练集对线性支持向量机模型进行训练,然后使用测试集对模型进行评估,计算准确率。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
model = LinearSVC()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy_score(y_pred, y_test)

结果: 

1.0        

详细说明
软间隔和支持向量
到这里为止,我们了解的都是数据可以线性分离的情况,这种不允许数据进入间隔内侧的情况称为硬间隔。但一般来说,数据并不是完全可以线性分离的,所以要允许一部分数据进入间隔内侧,这种情况叫作软间隔。通过引入软间隔,无法线性分离的数据也可以如图 2-19 所示进行学习。

▲图 2-19 软间隔


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

▲图 2-20 硬间隔和软间隔


图 2-20 的左图是不允许数据进入间隔内侧的硬间隔的情况,右图是允许数据进入间隔内侧的软间隔的情况。
另外,我们在蓝色点表示的训练数据中特意加上了偏离值。
比较两个结果可以发现,使用了硬间隔的图 2-20 中的左图上的决策边界受偏离值的影响很大;而在引入软间隔的图 2-20 中的右图上的学习结果不容易受到偏离值的影响。
在使用软间隔时,允许间隔内侧进入多少数据由超参数决定。与其他算法一样,在决定超参数时,需要使用网格搜索(grid search)和随机搜索(random search)等方法反复验证后再做决定。

———————————————————————————————————————————

文章来源:书籍《图解机器学习算法》

作者:秋庭伸也 杉山阿圣 寺田学

出版社:人民邮电出版社

ISBN:9787115563569

本篇文章仅用于学习和研究目的,不会用于任何商业用途。引用书籍《图解机器学习算法》的内容旨在分享知识和启发思考,尊重原著作者宫崎修一和石田保辉的知识产权。如有侵权或者版权纠纷,请及时联系作者。
———————————————————————————————————————————

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

提升船舶安全性与效率:隔离驱动芯片的应用

随着科技的不断发展,船舶行业也在不断迎来新的技术革新,其中隔离驱动芯片作为一种关键的电子元件,在船舶领域发挥着重要作用。本文将深入探讨隔离驱动芯片在船舶领域的应用及其技术特点。 隔离驱动芯片提升船舶系统安全性 船舶作为大型交通工…

View->Bitmap缩放到自定义ViewGroup的任意区域(Matrix方式绘制Bitmap)

Bitmap缩放和平移 加载一张Bitmap可能为宽高相同的正方形,也可能为宽高不同的矩形缩放方向可以为中心缩放,左上角缩放,右上角缩放,左下角缩放,右下角缩放Bitmap中心缩放,包含了缩放和平移两个操作&#xf…

Java进阶学习笔记32——Calendar

为什么要学习Calendar? 原来的方法: 使用Calendar 从API文档中,可以看到Calendar是一个抽象类,抽象类是不能创建对象,不能直接使用的。 package cn.ensource.d3_time;import java.util.Calendar; import java.util.Da…

基于Raspi的Opencv-Python开发笔记

本文所有未强调 “windows终端” 的 “终端”字眼,都是默认树莓派的终端 系统版本 系统版本有必要强调一下,因为不同版本很多操作需要修改 在终端输入uname -a Release就是版本号,Codename是版本名 以下操作仅在此版本验证可行 使能摄像…

传感器和变送器的区别介绍

从它的名称来看,传与感二字。传是指传输,感是指感知。实际上是先有感知,其次转换,最后传输。因此传输是目的,转换是手段,感知是基础。把能够将被测变量(温度、压力、液位、流量)感知…

内存管理【C++】

内存分布 C中的内存区域主要有以下5种 栈(堆栈):存放非静态局部变量/函数参数/函数返回值等等,栈是向下增长的【地址越高越先被使用】。栈区内存的开辟和销毁由系统自动执行 堆:用于程序运行时动态内存分配&#xff…

C++入门3——类与对象2(类的6个默认成员函数)

目录 1.类的6个默认成员函数 2. 构造函数 2.1 构造函数的概念 2.2 构造函数的特性 3. 析构函数 3.1 析构函数的概念 3.2 析构函数的特性 4.拷贝构造函数 4.1 拷贝构造函数的概念 4.2 拷贝构造函数的特性 5.赋值运算符重载函数 5.1运算符重载函数 5.2 赋值运算符重…

docker一键部署EFK系统(elasticsearch filebeat kibana metricbeat es-head)

EFK日志系统搭建 EFK日志系统介绍功能需求搭建elasticsearch集群规划前提部署核对证书及权限 EFK日志系统介绍 Elasticsearch 是一个实时的、分布式的可扩展的搜索引擎,允许进行全文、结构化搜索,它通常用于索引和搜索大量日志数据,也可用于…

Vue3-路由详解

文章目录 路由对路由的理解安装 Vue Router基本切换效果两个注意点路由器工作模式to的两种写法命名路由嵌套路由路由传参query参数params参数 路由的props配置replace属性编程式导航重定向 更多相关内容可查看 路由 附git地址:https://gitee.com/its-a-little-bad/…

打印机的ip不同且连不上

打印机的ip不同且连不上 1.问题分析2.修改网段3.验证网络 1.问题分析 主要是打印机的网段和电脑不在同一个网段 2.修改网段 3.验证网络

CATO原理中的数学与魔术(十一)——Parity Principle及其应用二:集合的可视化...

早点关注我,精彩不错过! 上篇文章中,我们已经进入了CATO原理魔术介绍的深水区,是第3个系列Parity Principle中集合性质的章节,聊到了关于张数和求和集合性质,并对性质之间的偏序关系,性质之间的…

基于单片机的微型嵌入式温度测量仪的设计与实现分析

摘要 : 作为信息技术中重要的技术手段之一嵌入式单片机系统已经被应用到越来越多不同的行业领域中。如,各种手持监测设备、智能家电设备等。当前展开对单片机的微型嵌入式温度测量仪的设计和实现研究,从微型嵌入式单片机相关理论入手&#xf…

桶形畸变和枕形畸变

桶形畸变和枕形畸变是两种常见的光学畸变现象,主要发生在使用广角镜头或远摄镜头拍摄时。这些畸变是因为镜头的光学特性不能完美地将光线汇聚到一个共同的焦点上,导致图像的不同部分在形状上发生扭曲。下面分别对这两种畸变进行详细描述: 桶…

Ceph集群存储案例

Ceph是一种可靠的、可扩展的、统一的、分布式的存储系统。Ceph高度可靠、易于管理且免费。Ceph提供了非凡的可扩展性——数以千计的客户端访问PB到EB的数据。Ceph存储集群相互通信以动态复制和重新分配数据。目前众多云厂商都在使用Ceph,应用广泛。如:华…

[线程与网络] 网络编程与通信原理(四):深入理解传输层UDP与TCP协议

🌸个人主页:https://blog.csdn.net/2301_80050796?spm1000.2115.3001.5343 🏵️热门专栏:🍕 Collection与数据结构 (92平均质量分)https://blog.csdn.net/2301_80050796/category_12621348.html?spm1001.2014.3001.5482 🧀Java …

研发效能DevOps: Ubuntu 部署 JFrog 制品库

目录 一、实验 1.环境 2.Ubuntu 部署 JFrog 制品库 3.Ubuntu 部署 postgresql数据库 4.Ubuntu 部署 Xray 5. 使用JFrog 增删项目 二、问题 1.Ubuntu 如何通过apt方式部署 JFrog 制品库 2.Ubuntu 如何通过docker方式部署 JFrog 制品库 3.安装jdk报错 4.安装JFrog Ar…

用follow.it为您的网站添加邮箱订阅功能(附2024版教程)

多数情况下网站用户浏览一次就不会来了(即使用户已收藏您的网站),因为用户很可能已把您的网站忘了。那么怎么样才能抓住网站回头客,让用户再次回到您的网站呢?除了提供更优质的原创内容外,比较好的方法是给…

第十九讲:动态内存分配

第十九讲:动态内存分配 1.为什么要有动态内存分配2.malloc和free2.1malloc2.1.1函数原型2.1.2函数使用 2.2free2.2.1函数原型2.2.2函数使用2.2.3函数使用注意事项2.2.3.1注意点12.2.3.2注意点22.2.3.3注意点32.2.3.4注意点4 2.3malloc和free使用注意事项2.3.1内存覆…

zynq PS点灯

摸鱼碎碎念: 需要做ADC采集并在TFT屏幕实时显示波形(简易示波器) 发现只使用fpga实现比较困难 使用的是zynq,刚好来把arm部分也学到 参考视频 与 教材文档 01_Zynq SoC FPGA的诞生_哔哩哔哩_bilibili (这是俺点开AXI4接口协…

【小白专用24.5.30已验证】Composer安装php框架thinkPHP6的安装教程

一、框架介绍 1、框架简介和版本选择 Thinkphp是一种基于php的开源web应用程序开发框架ThinkPHP框架,是免费开源的、轻量级的、简单快速且敏捷的php框架。你可以免费使用TP框架,甚至可以将你的项目商用; ThinkPHP8.0 是目前框架正式版的最新版…