李航统计学习-支持向量机(SVM)之我的理解

2023-10-25 16:30

本文主要是介绍李航统计学习-支持向量机(SVM)之我的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

支持向量机 是一种 二分类模型


SVM 不同于 感知机   是因为 SVM学习策略是间隔最大化,可以将该问题理解为凸二次规划问题,也可以将该问题理解为正则化的合叶损失函数最小化问题


支持向量机学习方法 可以从简单到繁杂分成三种:

 线性可分支持向量机(可以使用硬间隔最大化学习线性分类器),

 线性支持向量机(使用软间隔最大化学习),

 非线性支持向量机(使用核技巧以及软间隔最大化


现在给支持向量机解决问题做一个通用的描述:



 问题的输入是:一组训练数据集T={(x1, y1),(x2, y2), ... ,(xn, yn)}, xi 是n维向量,yi是一个二元数据{+1,-1}

  输出是:找到一个分离超平面(对应的方程是 w*x + b = 0),将结果为 +1的数据和结果为 -1的数据分开

我们将yi=+1称之为正例,-1称之为负例



为了解决这类问题,我们将一类一类讲述分体的解决方法


当训练样本是属于线性可分时,存在无穷个分离超平面可以将两类数据正确分开,此时为了最优分类线性可分的数据集,

我们将线性可分数据利用间隔最大化求出分离超平面。

啥叫做间隔最大化呢,这个就要开始讲述函数距离以及几何距离


一般来说,一个点距离一个评判标准的预测方向越远,说明确信度越高。比如:我们预测 4小时以上没吃饭的人可能肚子饿,如果某个人 5小时没吃饭,我们可以判断这个人有可能肚子饿,如果某个人8小时没吃饭,我们更加能够判断这个人肚子饿。为什么呢,因为时间距离 (8 - 4)> (5 - 4),所以我们更加有把握觉得这个人肚子饿。将问题推广到n维空间上,我们自己定义一个公式|w*x+b|,表示点x距离超平面的远近。标记y与w*x+b的符号是否一致能够表示分类是否正确,当w*x+b>0时,y=1,当w*x+b<0时,y=-1。因此y与w*x+b永远同号,所以y(w*x+b)在预测分离超平面上恒大于0。所以y(w*x+b)能够度量分类的正确性以及可信度,如果w*x+b>0,但是y<0,那么y(w*x+b)<0,就是一个失败的预测。

如下图:



根据以上知识,我们可以开始介绍函数间隔以及几何间隔了

函数间隔概念:


这里注意超平面不是w,而是(w,b),n+1维。函数间隔有个特点,就是能够等比例的缩放,而超平面并没有改变。想想,4x1 + 6x2 + 8 = 0和2x1 + 3x2 + 4 = 0描述的其实是同一个平面,但是函数距离却被缩成了原来的1/2。这可以让我们想到可以对超平面的法向量做一个规范化,||w|| = 1,使得函数间隔无论怎么缩小放大,间隔都是确定的,这个时候函数间隔就变成了几何间隔。


因此,几何间隔的概念就能够引出来了:


讲完函数间隔和几何间隔后,我们可以开始将啥是间隔最大化了。

首先,我们知道,支持向量机学习的基本想法有两个:

1. 求解能够正确划分训练数据集

2. 几何间隔最大,就是离超平面最近的两个点(min)距离要最大(max)[我们也称之为硬间隔最大化]

其实也能够比较容易解释为啥要这样做,因为这样能够最大化的原理超平面,这样的话可信度就更高(敲黑板!一个点距离一个评判标准的预测方向越远,说明确信度越高。

下面我们就开始谈谈求解最大间隔分离超平面吧,下面是关于集合间隔最大分离超平面问题的数学描述:


求几何距离的最大值,其实也就是求函数r关于w,b的极大值(公式7.9),但是这个极大值又不能够毫无约束,因为所有数据距离超平面的长度都要大于等于r值(公式7.10)。根据几何间隔和函数间隔的关系,可以转化成公式7.11,7.12。

因此就转化成了关于函数距离的公式求解,由于公式 7.11 中的r = min(yi(wi*x + b)), 公式中的w,b同时放大缩小倍数都不会影响公式7.11,7.12。所以可以令r = 1。此外,求1/||w||的最大值等价于求解 ||w||的最小值,也可以等价于1/2*||w||^2的最小值,所以公式可以转化成如下形式:


该问题其实就可以转化成一个凸二次规划问题。

要成为凸二次规划问题,需要满足的条件如下:

1. 目标函数(7.13)是二次函数

2. 目标函数和约束函数都是在R^n上可微的

3. 约束函数是仿射函数(这个条件我也不知道,知道的朋友们可以在评论区解释下谢谢)


求解目标函数相当于求解出最优 w*,b*,这样就能够求解出最大分离平面w*• x + b* = 0,最后就能够求出来分类决策函数f(x) = sign(w* • x + b* = 0)了。

到此,可以讲一下线性可分支持向量机学习算法了。


最大间隔分离超平面是存在且唯一的,证明从略,可以看看书上咋讲的。

分离超平面是怎么形成的呢,这个就要讲讲概念支持向量了了。

支持向量就是 训练数据集的样本点中与分离超平面距离最近的样本点的实例,这个概念书中也讲的挺清楚的,我就不详细叙述了。


求解线性可分支持向量机
作为带约束问题的最优化求解,我们可以使用Lagrange对偶性求解该对偶问题。
首先根据每一个不等式约束,引进Lagrange乘子αi >= 0,定义拉格朗日函数:
 L(w, b, a) = 1/2||w||^2 - ∑αiyi(w*xi + b) + ∑αi,其中α=(α1,α2,α3,...,αN)T,为拉格朗日乘子向量


根据对偶性,原始问题的对偶问题就是极大极小问题:

 max(α)min(w,b) L(w,b,α)

其中 max(α) 是因为(1 - yi(w*xi + b)) <= 0, max(1 - yi(w*xi + b))其实就能够把约束项给去掉。

中间计算过程:


最后不等式可以等价于如下:


从以上目标函数可以看到,此时目标函数只剩下a1...an是未知变量,其余数据都已知,我们对这些变量依次求偏导数,这样子就能够求出ai

知道了ai后,根据等式 w - ∑aiyixi = 0可以求出来向量w

再根据等式w.x + b = 0,求出 b

这样就能够得到分类决策函数 f(x) = sign(∑ai*yi(x.xi) +b*) 了

完美!这样就能够解决线性可分支持向量机了。

现在我们讲讲如何解决线性支持向量机问题,这个问题不能使用线性可分支持向量机的解决方法来解决,

because 这些约束都不成立。

因此就要修改硬间隔最大化,将其修改成软间隔最大化来解决。

so,what is 软间隔最大化呢?

讲这个问题之前,我们先来描述下线性支持向量机问题的基本描述:


线性不可分意味着有某些样本点无法满足间隔大于等于1的约束条件,解决这个问题的方法是,引入一个松弛变量ξ >= 0,这样子就能够将函数间隔加上松弛变量,使其大于等于1,这样约束条件就变为

       yi(w*xi+b)>=1 - ξi

同时,对每个松弛变量都要支付一个代价ξi * C,因此,目标函数就变成了1/2 * ||w|| + C∑ξi。C是惩罚参数,大于0,具体的值需要根据问题决定。这个就是软间隔最大化。

因此我们可以将该线性不可分的问题转换成如下的形式:


我们先称它为原问题,这个是一个凸二次规划问题,因而关于(w,b,ξ)的解是存在的。

其中,最优解 w 是唯一存在的,b 存在于一个区间。这样我们就能够得到一个分类决策函数了

     f(x) = sign(w* x + b*)

因此,原始问题的对偶问题就变成了:

  

过程的推导可以看下图:


函数8的推导可以看看下图:


于是就可以求出w,b来了,w,b和a的关系如下


证明从略,比较简单,直接看书就好了。


因此,综上我们可以得到以下算法:


现在我们来讲讲软间隔的支持向量:

在线性不可分的情况下,将对偶问题(7.37 -- 7.39)的解a*中对应a*>0的样本点(xi,yi)的实例称之为支持向量(软间隔的支持向量)

为啥这么说呢,是因为当ai = 0时,该项中的 xi,yi 对 w, b的生成不会造成影响(w = ∑aiyixi, b = yj - ∑yiai*(xixj))(纯属个人理解)

当 ai > 0时,结果就能够影响到 w,b值了

所谓叫做支持向量,就是能够影响分离超平面的生成的才叫做支持向量。

现在讲讲软间隔支持向量的分布位置:

当拉格朗日乘子函数达到最优解时,

 ∑ai(yi(w.xi+b) - 1 + ξi) = 0 (1)

 ∑uiξi = 0 (2)

这样拉格朗日乘子函数L 才等于 目标函数

所以,当a < C时,ξ = 0,支持向量恰好落在间隔边界上,原因如下:

如果 ai < C 那么 ui = C - ai > 0,因为 (2),我们可以知ξi = 0,那么

 yi(w.xi+b)-1= 0 => yi(w.xi+b) = 1,所以向量恰好落在间隔边界上

如果 ai = C 那么 ui = C - ai = 0,因为(2),ξi 可以取任何 > 0 的值,那么

 当 0 < ξ < 1时,根据(1)可以知道 0 < yi(w.xi + b) = 1 - ξ < 1, 所以向量落在分离超平面和间隔边界之间的区域内

 当ξ = 1时,同上,yi(w.xi +b) = 0,所以该向量落在分离超平面上

 当ξ > 1时,同上,yi(w.xi +b) < 0,可以推理出该点在分离超平面错误分类的一侧


合页损失函数

对于线形支持向量机还有另外一种解释,就是最小化以下目标函数

    ∑[1 - yi(w.xi + b)]+ + λ||w||^2

第一项比较好理解,令1 - yi(w.xi + b) = z,就有

    [z]+= z if z > 0 else 0

关于第一项的函数,我们称之为合叶损失函数

函数图像如下(红色线部分):


证明从略,直接看书就好了,很简单的。


现在讲讲非线性支持向量机:当我们要处理的分类是非线性可分时候,我们就要使用非线性支持向量机来解决问题。

首先来给大家看非线性可分的问题是什么样的吧。


如下图左,X代表负例,*代表正例,需要用椭圆将其划分开,如果使用线性的方法的话,将起不到好效果。所以,我们需要想一个办法,将左边的非线性可分的数据使用一个超平面将他们分开。


假设椭圆分割面的函数长这样:

   w1*(x1)^2 + w2*(x2)^2 + b = 0

令z = x^2,那么,分离超平面就变成了这个函数,

   w1*z1 + w2*z2 + b = 0

这样就能够使用解决线性可分问题的方法解决非线性可分问题了!

从上面我们可以看出,解决非线性可分问题时候,先做个变换,将原空间数据映射到目标空间,然后在新空间中运用线性可分的分类学习方法从训练数据中学习分类模型。核技巧就属于这样的方法。那么,什么是核技巧呢?


首先定义核函数:

核技巧的想法是,在学习于预测中只定义核函数K(x, z),而不显式定义映射函数Φ。这样就能够提供映射函数不好求的的解决办法了。通常特征空间是不唯一的,可以使用多种特征空间,即便是同样的特征空间也可以有不同的映射。




核技巧在SVM中的应用

由于在线性支持向量机的对偶问题中,无论是目标函数,还是决策函数(分离超平面)都只涉及到实例与实例之间的内积。所以我们可以用核函数K(xi,xj) = Φ(xi) *Φ(xj) 来代替此时的目标函数就变成了:

  W(a) = 1/2∑∑ai.aj.yi.yj.K(xi,xj) - ∑ai

分类决策函数也可以变成这样:

  f(x) = sign(ai*yi Φ(xi)Φ(x) + b*) = sign(ai*yi.K(xi,x) + b*)

常用的核函数













这篇关于李航统计学习-支持向量机(SVM)之我的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/283801

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

hdu1496(用hash思想统计数目)

作为一个刚学hash的孩子,感觉这道题目很不错,灵活的运用的数组的下标。 解题步骤:如果用常规方法解,那么时间复杂度为O(n^4),肯定会超时,然后参考了网上的解题方法,将等式分成两个部分,a*x1^2+b*x2^2和c*x3^2+d*x4^2, 各自作为数组的下标,如果两部分相加为0,则满足等式; 代码如下: #include<iostream>#include<algorithm

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言