SVM(支持向量机)

SVM(支持向量机)

引言

支持向量机(Support Vector Machine,SVM),可以用来解答二分类问题。支持向量(Support Vector):把划分数据的决策边界叫做超平面,点到超平面的距离叫做间隔。在SVM中,距离超平面最近的且满足一定条件的几个训练样本点被称为支持向量。
图中,被圈出来的就是支持向量。支持向量机是要使超平面和支持向量之间的间隔尽可能的大,这样才能使两类样本尽可能地分开。
在这里插入图片描述

间隔又分为硬间隔软间隔

  • 硬间隔
    在使用超平面进行分割数据时,严格地让所有实例都不在最大间隔之间,并且位于正确的一遍,就是硬间隔。
    在这里插入图片描述

硬间隔存在的问题:1.只在数据线性可分时有效 2.对异常值非常敏感。

  • 软间隔
    要避免硬间隔存在的问题,目标是尽可能在保持最大间隔宽阔和限制间隔违例之间找到良好平衡。
    在这里插入图片描述

SVM存在以下优点:

  1. 既可以用于二分类,也可以用于回归和异常检测
  2. 具有良好的鲁棒性,对未知数据拥有很强的泛化能力,特别是在数据量较小的情况下,相较其他传统机器学习算法具有更优的性能。
  3. 原理

SVM通过优化一个凸二次规划问题来求解最佳的超平面,其中包括最小化模型的复杂度,同时限制训练样本的误分类情况。
我们将支持向量机的判别面、支持面表示为:
w x + b = ± 1 w x + b = 0 wx+b= \pm 1\\ wx+b = 0 wx+b=±1wx+b=0
从而可以算得,支持面和判别面的距离为 d = 1 ∣ ∣ w ∣ ∣ d = \frac{1}{||w||} d=∣∣w∣∣1
在使用SVM模型时,由于SVM的支持面与判别面的距离为 d = 1 ∣ ∣ w ∣ ∣ d = \frac{1}{||w||} d=∣∣w∣∣1,所以两个支持面的距离为 2 d = 2 ∣ ∣ w ∣ ∣ 2d=\frac{2}{||w||} 2d=∣∣w∣∣2最大化两支持面之间的距离 2 ∣ ∣ w ∣ ∣ \frac{2}{||w||} ∣∣w∣∣2,等价于最小化 ∣ ∣ w ∣ ∣ 2 2 ( 给 ∣ ∣ w ∣ ∣ 加平方是为了去除根号 ) \frac{||w||^2}{2}(给{||w||}加平方是为了去除根号) 2∣∣w2(∣∣w∣∣加平方是为了去除根号)

  • 硬间隔SVM的损失函数

    硬间隔SVM最大化支持面之间的距离,并要求所有样本在支持面之外。因此,硬间隔的损失函数如下:

    目标函数:
    L ( w , b ) = 1 2 ∣ ∣ w ∣ ∣ 2 L(w,b)=\frac{1}{2}||w||^2 L(w,b)=21∣∣w2
    约束条件:
    y i ( w x i + b ) − 1 ≥ 0 , i = 1 , 2 , . . . . . , N y_i(wx_i+b)−1 \geq 0 , i=1,2,.....,N yi(wxi+b)10,i=1,2,.....,N

    正样本要在正支持面一侧,即 w x i + b ≥ 1 wx_i+b \geq 1 wxi+b1,此时 y i = 1 y_i = 1 yi=1,可得 y i ( w x i + b ) − 1 ≥ 0 y_i(wx_i + b)-1 \geq 0 yi(wxi+b)10
    负样本要在负支持面一侧,即 w x i + b ≤ − 1 wx_i+b \leq -1 wxi+b1,此时 y i = − 1 y_i = -1 yi=1 ,可得 y i ( w x i + b ) − 1 ≥ 0 y_i(wx_i+b)-1 \geq 0 yi(wxi+b)10

  • 软间隔SVM的损失函数
    软间隔SVM最小化支持面之间的距离,并最小化错误样本,因此软间隔的损失函数如下:
    目标函数:
    L ( w , b , ξ ) = 1 2 ∣ ∣ w ∣ ∣ 2 + C ∑ i = 1 N ξ i L(w,b,\xi) = \frac {1}{2}||w||^2 + C \sum_{i=1}^{N} \xi _i L(w,b,ξ)=21∣∣w2+Ci=1Nξi
    约束条件:
    (1) y i ( w x i + b ) − ( 1 − ξ i ) ≥ 0 , i = 1 , 2 , . . . . . . . , N y_i(wx_i+b)-(1-\xi_i) \geq 0,i=1,2,.......,N yi(wxi+b)(1ξi)0,i=1,2,.......,N
    (2) ξ i ≥ 0 , i = 1 , 2 , . . . . . . , N \xi_i \geq 0 ,i=1,2,......,N ξi0,i=1,2,......,N
    其中 ξ i \xi_i ξi是对i个样本的松弛量,而C是惩罚因子。

    随着支持面的不同取值,有的样本能在支持面正确一侧,有的则在错误一侧,不妨记 ξ i \xi_i ξi为第i个样本的误错量,则第i个样本满足 y i ( w x i + b ) − ( 1 − ξ i ) ≥ 0 y_i(wx_i+b)-(1-\xi_i)\geq0 yi(wxi+b)(1ξi)0
    然后目标函数是最小化所有样本的误错量 C ∑ i = 1 N ξ i C\sum_{i=1}^N\xi_i Ci=1Nξi,其中C是错误量在损失函数中的权重。

SVM的损失函数中带有各种约束条件,难以用一般的方法进行求解,因此可以考虑使用下面的方法:

  1. 先将损失函数转化为拉格朗日形式
  2. 通过拉格朗日形式获得损失函数的对偶问题
  3. 使用SOM算法求得对偶问题的解
  4. 将对偶问题的解转换回原问题的解

下面是对软间隔问题的求解
将SVM软间隔模型的损失函数化为拉格朗日函数形式为:
L ( w , b , ξ , α , μ ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 N α i y i ( w x i + b ) + ∑ i = 1 N α i − ∑ i = 1 N ( C − α i − μ i ) ξ i L(w,b,\xi,\alpha,\mu) = \frac{1}{2}||w||^2 - \sum_{i=1}^N \alpha_i y_i(wx_i+b)+\sum_{i=1}^N \alpha_i - \sum _{i=1}^N(C - \alpha_i -\mu_i)\xi_i L(w,b,ξ,α,μ)=21∣∣w2i=1Nαiyi(wxi+b)+i=1Nαii=1N(Cαiμi)ξi
其中 α i ≥ 0 , μ i ≥ 0 \alpha_i \geq 0,\mu_i \geq 0 αi0,μi0
SVM损失函数的对偶问题:

目标函数:
m i n 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i T ⋅ x j ) − ∑ i = 1 N α i min\frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_j y_i y_j(x_i^T \cdot x_j) - \sum_{i=1}^N \alpha_i min21i=1Nj=1Nαiαjyiyj(xiTxj)i=1Nαi
约束条件:

(1) ∑ i = 1 N α i y i = 0 \sum_{i=1}^N \alpha_i y_i = 0 i=1Nαiyi=0

(2) C ≥ α i ≥ 0 , ( i = 1 , 2....... N ) C\geq\alpha_i\geq0,(i=1,2.......N) Cαi0,(i=1,2.......N)

解得损失函数对偶问题 α i \alpha_i αi之后,按下式可以转回原问题的解w、b
w = ∑ i = 1 N α i y i x i b = A v g ( y i − ∑ j = 1 N α j y j ( x j T ⋅ x i ) ) w = \sum_{i=1}^N\alpha_i y_i x_i \\ b = Avg(y_i - \sum_{j=1}^N\alpha_j y_j (x_j^T \cdot x_i)) w=i=1Nαiyixib=Avg(yij=1Nαjyj(xjTxi))

最终,SVM的模型解由对偶问题的解所给出,可以写为:
g = w x + b ,其中 w = ∑ i = 1 N α i y i x i b = A v g ( y i − ∑ j = 1 N α j y j ( x j T ⋅ x i ) ) g = wx+b,其中\\ w = \sum_{i=1}^N \alpha_i y_i x_i \\ b = Avg(y_i - \sum_{j=1}^N\alpha_j y_j(x_j^T \cdot x_i)) g=wx+b,其中w=i=1Nαiyixib=Avg(yij=1Nαjyj(xjTxi))
忽略掉 α i = 0 \alpha_i = 0 αi=0的项,可以看到模型是由所有 α i > 0 \alpha_i > 0 αi>0 样本来共同表示,也就是 α i > 0 \alpha_i >0 αi>0的样本构成了最终的判别函数,因此称 α i > 0 \alpha_i > 0 αi>0的样本为支持向量。
几何意义:支持向量是落在支持面上及支持面错误一侧的样本
在这里插入图片描述

支持向量是我们所需要关注的样本,它们都是模型决策较为模糊、错误的样本。

由于模型的w,b实际只由支持向量构成,这就是为什么把模型称为"支持向量机SVM"的原因

代码

from sklearn import svm
import numpy as np# ----生成样本数据与构建SVM模型-----------
X = np.array( [[0.708333,1],[0.291667,1],[0.217,1.5],[0.2367,0.3],[0.454,1],[0.583333,-4],[0.875,-1],[0.333,-0.6],[0.111,-1]] )
y = np.array([1,1,1,1,1,-1,-1,-1,-1])
clf = svm.SVC(kernel ='linear',C=1000)             # 初始SVM模型,这里C设为很大,也就成为了硬间隔
clf.fit(X,y)                                       # 用X,y训练模型# -----------------打印模型系数------------
print('\n---------支持向量与alpha--------')        # 打印模型求解结果
print('support_vectors:\n',clf.support_vectors_)  # 打印支持向量
print('alpha:\n'  ,clf.dual_coef_[0])             # 打印支持向量系数print("\n----------模型系数---------") 
w = clf.coef_                                     # 提取模型系数w,它等于clf.dual_coef_[0]@clf.support_vectors_
b = -clf._intercept_                              # 提取模型系数b
print('w:',w)                                     # 打印模型系数w
print('b:',b)                                     # 打印模型阈值b# ---画出分割面与支持面-----------------
import matplotlib.pyplot as plt
plt.rcParams["figure.figsize"] = (9, 5)           # 设置figure_size尺寸
plt.scatter(X[:, 0], X[:, 1],c=y,marker='o')      # 画出样本点  
line_x = np.array([X[:,0].min(),X[:,0].max()])    # 判别面的x坐标
line_y = (-b-w[0,0]*line_x)/w[0,1]                # 判别面的y坐标
plt.plot(line_x,line_y)                           # 画出判别面
line_u = (-b+1-w[0,0]*line_x)/w[0,1]              # 上支持面的y坐标
line_b = (-b-1-w[0,0]*line_x)/w[0,1]              # 下支持面的y坐标
plt.plot(line_x,line_u,color='grey')              # 画出上支持面
plt.plot(line_x,line_b,color='grey')              # 画出下支持面#在代码中,我们将松驰惩罚系数C设得非常大(C=1000),相当于使用了硬间隔模型

---------支持向量与alpha--------
support_vectors:
[[ 0.333 -0.6 ]
[ 0.2367 0.3 ]]
alpha:
[-2.44118665 2.44118665]
----------模型系数---------
w: [[-0.23508627 2.19706799]]
b: [0.39652452]

在这里插入图片描述

参考

老饼讲解

CSDN博客

代码

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

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

相关文章

【配色网站分享】

个人比较喜欢收藏一些好看的插画、UI设计图和配色,于是有了此篇,推荐一些配色网站,希望能对自己和大家有些帮助。 1.uiGradients 一个主打渐变风网站,还可以直接复制颜色。 左上角的“show all gradients”可以查看一些预设的渐…

upload-labs靶场Pass-02

upload-labs靶场Pass-02 分析源码 $is_upload false; $msg null; if (isset($_POST[submit])) {if (file_exists(UPLOAD_PATH)) {if (($_FILES[upload_file][type] image/jpeg) || ($_FILES[upload_file][type] image/png) || ($_FILES[upload_file][type] image/gif)) …

搭建Golang gRPC环境:protoc、protoc-gen-go 和 protoc-gen-go-grpc 工具安装教程

参考文章: 安装protoc、protoc-gen-go、protoc-gen-go-grpc-CSDN博客 一、简单介绍 本文开发环境,均为 windows 环境,mac 环境其实也类似 ~ ① 编译proto文件,相关插件 简单介绍: protoc 是编译器,用于将…

excel 表格中url转图片

待处理的单元格通过如下公式获取目标格式&#xff1a; "<table><img src"&A4&" height20></table>" 然后下拉后获取多列的单元格转换结果&#xff0c; 然后将这些转换后的结果拷贝到纯文本文档中&#xff0c; 然后再将纯文本…

音乐播放器-0.专栏介绍​

1.简介 本专栏使用Qt QWidget作为显示界面&#xff0c;你将会学习到以下内容&#xff1a; 1.大量ui美化的实例。 2.各种复杂ui布局。 3.常见显示效果实现。 4.大量QSS实例。 5.Qt音频播放&#xff0c;音乐歌词文件加载&#xff0c;展示。 6.播放器界面换肤。 相信学习了本专栏…

【Qt】Qt的介绍——Qt的概念、使用Qt Creator新建项目、运行Qt项目、纯代码方式、可视化操作、认识对象模型(对象树)

文章目录 Qt1. Qt的概念2. 使用Qt Creator新建项目3. 运行Qt项目3.1 纯代码方式实现3.2 可视化操作实现 4. 认识对象模型&#xff08;对象树&#xff09; Qt 1. Qt的概念 Qt 是一个跨平台的 C 图形用户界面应用程序开发框架。它是软件开发者提供的用于界面开发的程序框架&#…

Mysql(5)—函数

一、关于函数 1.1 简介 MySQL提供了许多内置的函数以帮助用户进行数据操作和分析。这些函数可以分为几类&#xff0c;包括聚合函数、字符串函数、数值函数、日期和时间函数、控制流函数等。 ​ ‍ 1.2 发展 早期版本&#xff08;MySQL 3.x 和 4.x&#xff09; : MySQL 最初…

无人机之三维航迹规划篇

一、基本原理 飞行环境建模&#xff1a;在三维航迹规划中&#xff0c;首先需要对飞行环境进行建模。这包括对地形、障碍物、气象等因素进行准确的测量和分析&#xff0c;以获得可行的飞行路径。 飞行任务需求分析&#xff1a;根据无人机的任务需求&#xff0c;确定航迹规划的…

Java最全面试题->计算机基础面试题->计算机网络面试题

计算机网络 下边是我自己整理的面试题&#xff0c;基本已经很全面了&#xff0c;想要的可以私信我&#xff0c;我会不定期去更新思维导图 哪里不会点哪里 1.说一下TCP/IP四层模型 TCP/IP协议是美国国防部高级计划研究局为实现ARPANET互联网而开发的。 网络接口层&#xff…

现代物流管理:SpringBoot技术突破

3系统分析 3.1可行性分析 通过对本智能物流管理系统实行的目的初步调查和分析&#xff0c;提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本智能物流管理系统采用SSM框架&#xff0c;JAVA作为开发语…

【云从】九、CDN加速

文章目录 1、CDN基本概念2、CDN加速3、云CDN 1、CDN基本概念 源站&#xff1a;用户稳定运行的业务应用服务器 静态内容&#xff1a;用户多次访问某一资源&#xff0c;响应返回的数据都是相同的内容 例如:图片、视频、软件安装包、安卓 apk 安装包、压缩包文件等动态内容&…

【数据结构】栈和队列经典题目

目录 1.有效的括号【链接】 代码实现 2.用队列实现栈【链接】 代码实现 3.用栈实现队列 ​编辑 代码实现 4.循环队列&#xff08;数组实现&#xff09;【链接】 代码实现 1.有效的括号【链接】 题目描述&#xff1a; 给定一个只包括 (&#xff0c;)&#xff0c;{&…

Mycat 详细介绍及入门实战,解决数据库性能问题

一、基本原理 1、数据分片 &#xff08;1&#xff09;、水平分片 Mycat 将一个大表的数据按照一定的规则拆分成多个小表&#xff0c;分布在不同的数据库节点上。例如&#xff0c;可以根据某个字段的值进行哈希取模&#xff0c;将数据均匀的分布到不同的节点上。 这样做的好处…

数据结构7——二叉树的顺序结构以及堆的实现

在上篇文章数据结构6——树与二叉树中&#xff0c;我们了解了树和二叉树的概念&#xff0c;接着上篇文章&#xff0c;在本篇文章中我们学习二叉树顺序结构的实现。 目录 1. 二叉树的顺序存储结构 2. 堆的概念及结构 1. 堆的概念 2. 堆的结构 3. 堆的实现 1. 堆节点 2. 交…

R语言实现logistic回归曲线绘制

方式一&#xff1a;编制函数 x<-rnorm(10000)#设置随机种子 #编写绘图函数代码快 f <- function(x){y 1/(1 exp(-x))plot(x,y)}#sigmoid函数 f(x)​ 方式二&#xff1a;Sigmoid函数代码 x<-rnorm(10000)#设置随机种子 #编写绘图函数代码块 #y<-1/(1exp(-x)) y&…

数据结构-复杂度

复杂度 1.数据结构1.1算法 2.算法效率2.1复杂度的概念 3.时间复杂度3.1大O渐进表示法3.2时间复杂度计算示例3.2.1 示例13.2.2 示例23.2.3 示例33.2.4 示例43.2.5 示例5&#xff1a;3.2.6 示例63.2.7 示例7 4.空间复杂度4.1.1 示例14.1.2 示例2 5.常见复杂度对比6.复杂度算法题6…

【重学 MySQL】六十七、解锁检查约束,守护数据完整性

【重学 MySQL】六十七、解锁检查约束&#xff0c;守护数据完整性 检查约束的基本概念检查约束的语法检查约束的使用场景注意事项示例 在MySQL中&#xff0c;检查约束&#xff08;CHECK&#xff09;是一种用于确保表中数据满足特定条件的约束。 检查约束的基本概念 检查约束用…

考研前所学c语言02(2024/10/16)

1.一个十进制的数转化为二进制的就是不断除二取余&#xff0c;得到的余数从下到上取 比如123&#xff1a; 结果为&#xff1a; 同理其他的十进制转八进制&#xff0c;十六进制就除八&#xff0c;除十六即可 再比如123转十六进制&#xff1a; 因为余数是11&#xff0c;十六进…

【JavaEE初阶】深入理解网络编程—使用UDP协议API实现回显服务器

前言 &#x1f31f;&#x1f31f;本期讲解关于TCP/UDP协议的原理理解~~~ &#x1f308;感兴趣的小伙伴看一看小编主页&#xff1a;GGBondlctrl-CSDN博客 &#x1f525; 你的点赞就是小编不断更新的最大动力 &#x1f386;那么废话不…

从0开始深度学习(12)——多层感知机的逐步实现

依然以Fashion-MNIST图像分类数据集为例&#xff0c;手动实现多层感知机和激活函数的编写&#xff0c;大部分代码均在从0开始深度学习&#xff08;9&#xff09;——softmax回归的逐步实现中实现过 1 读取数据 import torch from torchvision import transforms import torchv…