图解机器学习算法(12) | 支持向量机模型详解(机器学习通关指南·完结)

支持向量机模型(超详细,含案例代码) 支持向量机(Support Vector Machine,SVM)是一种在机器学习领域中用于分类和回归分析的强大算法。它是一种监督学习算法,其目标是在特征空间中找到一个超平面,将不同类别的数据点分开,同时最大化分类边界的间隔。SVM 的基本思想是找到能够有效划分数据的超平面,即在高维空间中的一个(d-1)维子空间,其中 d 是特征的数量。为了找到这个最佳的超平面,SVM 使用支持向量,即离超平面最近的一些数据点。这些支持向量决定了超平面的位置和方向。 阅读详情
AI摘要

本文介绍了支持向量机SVM的基础概念,包括线性可分和不可分情况下的分类方法,以及如何通过对偶算法和核技巧处理非线性问题。重点讲解了最大间隔分类器和SVM在实际应用中的优缺点。

ShowMeAI研究中心


引言

本篇我们要讲解的模型是大名鼎鼎的支持向量机SVM,这是曾经在机器学习界有着近乎「垄断」地位的模型,影响力持续了好多年。直至今日,即使深度学习神经网络的影响力逐渐增强,但SVM在中小型数据集上依旧有着可以和神经网络抗衡的极好效果和模型鲁棒性。

支持向量机学习方法,针对不同的情况,有由简至繁的不同模型:

  • 线性可分支持向量机(linear support vector machine in linearly separable case):训练数据线性可分的情况下,通过硬间隔最大化(hard margin maximization),学习一个线性的分类器,即线性可分支持向量机(亦称作硬间隔支持向量机)。

  • 线性支持向量机(linear support vector machine):训练数据近似线性可分的情况下,通过软间隔最大化(soft margin maximization),学习一个线性的分类器,称作线性支持向量机(又叫软间隔支持向量机)。

  • 非线性支持向量机(non-linear support vector machine):训练数据线性不可分的情况下,通过使用核技巧(kernel trick)及软间隔最大化,学习非线性分类器,称作非线性支持向量机。

支持向量机可以借助核技巧完成复杂场景下的非线性分类,当输入空间为欧式空间或离散集合、特征空间为希尔贝特空间时,核函数(kernel function)表示将输入从输入空间映射到特征空间得到的特征向量之间的内积。

通过使用核函数可以学习非线性支持向量机,等价于隐式地在高维的特征空间中学习线性支持向量机。这样的方法称为核技巧。

1.最大间隔分类器

1)分类问题与线性模型

分类问题是监督学习的一个核心问题。在监督学习中,当输出变量取有限个离散值时,预测问题便成为分类问题。实际生活中,有很多问题的本质都是分类,如识别某种模式:文本分类、分词、词性标注、图像内容识别和目标检测等。

分类问题的数学理解是空间划分(或者寻找不同类别的决策边界),如下图所示是一个简单的线性分类器(这部分更详细的讲解参考ShowMeAI文章 图解机器学习 | 机器学习基础知识 和 图解机器学习 | 逻辑回归算法详解)。

2)最大间隔分类器

不同的模型在解决分类问题时,会有不同的处理方式,直观上看,我们会使用不同的决策边界对样本进行划分。

如下图中「冰墩墩」与「雪容融」两类样本点,我们对其进行分类,可以完成该分类任务的决策边界有无数个。而我们这里介绍到的SVM模型,要求更高一些,它不仅仅希望把两类样本点区分开,还希望找到鲁棒性最高、稳定性最好的决策边界(对应图中的黑色直线)。

这个决策边界与两侧「最近」的数据点有着「最大」的距离,这意味着决策边界具有最强的容错性,不容易受到噪声数据的干扰。直观的理解就是,如果决策边界抖动,最不容易「撞上」样本点或者进而导致误判。


2.支持向量机详解

1)线性可分SVM与硬间隔最大化

我们要找到把下图中红蓝两色的图标点分开的最优分界线。令红色的图标点 = + 1 =+1 =+1 ,蓝色的图标的点 = − 1 =-1 =−1 ,直线 f ( x ) = w ⋅ x + b f(x) = \boldsymbol{w}\cdot \boldsymbol{x} + b f(x)=w⋅x+b ,这里 w 、 x w、x w、x 是向量,其实公式等价于 f ( x ) = w 1 x 1 + w 2 x 2 + … + w n x n + b f(x) = w_1x_1 + w_2x_2 +…+ w_nx_n + b f(x)=w1​x1​+w2​x2​+…+wn​xn​+b 。

  • 当向量 x x x 为二维向量时, f ( x ) f(x) f(x) 表示二维空间中的一条直线。

  • 当向量 x x x 为三维向量时, f ( x ) f(x) f(x) 表示三维空间中的一个平面。

  • 当向量 x x x 的 n n n 维向量( f n > 3 fn>3 fn>3 )时, f ( x ) f(x) f(x) 表示 n n n 维空间中的 n − 1 n-1 n−1 维超平面。

当有一个新的点 x x x 需要预测属于哪个分类的时候,我们用 s g n ( f ( x ) ) sgn(f(x)) sgn(f(x)) 就可以预测了。 s g n sgn sgn 表示符号函数:

  • 当 f ( x ) > 0 f(x) > 0 f(x)>0 的时候, s g n ( f ( x ) ) = + 1 sgn(f(x)) = +1 sgn(f(x))=+1 。

  • 当 f ( x ) < 0 f(x) < 0 f(x)<0 的时候, s g n ( f ( x ) ) = – 1 sgn(f(x)) = –1 sgn(f(x))=–1 。

回到重点,我们怎样才能取得一个最优的划分直线 f ( x ) f(x) f(x) 呢?下图的直线表示几条可能的 f ( x ) f(x) f(x) :

我们希望这条直线满足「最大间隔」原则,也就是如下图的形态。图中位于红色和蓝色线上的图标就是所谓的支持向量(support vector)。

决策边界就是 f ( x ) f(x) f(x) ,红色和蓝色的线是支持向量(support vector)所在的面,红色、蓝色线之间的间隙就是我们要最大化的分类间的间隙M(Margin Width)。

这里直接给出间隔M的计算公式: M = 2 ∥ w ∥ M=\frac{2}{\left \| w \right \| } M=∥w∥2​ 。

SVM要求解能够正确划分训练数据集并且「几何间隔」最大的分离超平面。

如下图所示, w ⋅ x + b = 0 \boldsymbol{w} \cdot \boldsymbol{x}+b=0 w⋅x+b=0 即为分离超平面。对于线性可分的数据集来说,这样的超平面有无穷多个(即感知机),但是几何间隔最大的分离超平面却是唯一的。

我们先做一些定义,假设给定一个特征空间上的训练数据集: T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x N , y N ) T={(x_1, y_1),(x_2, y_2), \ldots,(x_N, y_N)} T=(x1​,y1​),(x2​,y2​),…,(xN​,yN​) 。且训练数据集是线性可分的,其中:

  • x i ∈ R n x_i \in \mathbb{R}^{n} xi​∈Rn , y i ∈ { + 1 , − 1 } y_{i} \in \left \{+1,-1 \right \} yi​∈{+1,−1} , i = 1 , 2 , … N , x i i=1,2, \ldots N,x_{i} i=1,2,…N,xi​ 为第 i i i 个特征向量。

  • y i y_{i} yi​ 为类标记,当它等于 + 1 +1 +1 时为正例;为 − 1 -1 −1 时为负例。

(1)几何间隔

对于给定的数据集 T T T 和超平面 w x + b = 0 wx+b=0 wx+b=0 。

  • 定义超平面关于样本点 ( x i , y i ) (x_{i}, y_{i}) (xi​,yi​) 的几何间隔为: γ i = y i ( w ∥ w ∥ ⋅ x i + b ∥ w ∥ ) \gamma_{i} = y_i(\frac{w}{\left \| w \right \| } \cdot x_i + \frac{b}{\left \| w \right \| }) γi​=yi​(∥w∥w​⋅xi​+∥w∥b​)

  • 超平面关于所有样本点的几何间隔的最小值为: γ = min ⁡ i = 1 , 2 … , N γ i \gamma = \min _{i=1,2 \ldots, N} \gamma_{i} γ=mini=1,2…,N​γi​ ,实际上这个距离就是我们所谓的「支持向量到超平面的距离」。


① 根据以上定义,SVM模型的「求解最大分割超平面问题」可以表示为以下约束最优化问题:

max ⁡ w , b γ s . t . y i ( w ∥ w ∥ ⋅ x i + b ∥ w ∥ ) ≥ γ , i = 1 , 2 , … , N \begin{aligned} & \max _{w,b} \gamma \\ & s.t. \quad y_{i}(\frac{w}{\left \| w \right \|} \cdot x_i+\frac{b}{\left \| w \right \|}) \geq \gamma, i=1,2, \ldots, N\\ \end{aligned} ​w,bmax​γs.t.yi​(∥w∥w​⋅xi​+∥w∥b​)≥γ,i=1,2,…,N​

  • 上面公式中s.t是subject to的缩写,也就是限制条件的意思。

② 将约束条件两边同时除以 γ \gamma γ 得到:

y i ( w ∥ w ∥ γ ⋅ x i + b ∥ w ∥ γ ) ≥ 1 y_{i}(\frac{w}{\left \| w \right \| \gamma} \cdot x_i+\frac{b}{\left \| w \right \|\gamma}) \geq 1 yi​(∥w∥γw​⋅xi​+∥w∥γb​)≥1


③ 因为 ∥ w ∥ \left \| w \right \| ∥w∥ 、 γ \gamma γ 都是标量,所以为了表达式简洁,令: w = w ∥ w ∥ γ w=\frac{w}{\left \| w \right \| \gamma} w=∥w∥γw​ 、 b = b ∥ w ∥ γ b=\frac{b}{\left \| w \right \| \gamma} b=∥w∥γb​ 得到:

y i ( w ⋅ x i + b ) ≥ 1 , i = 1 , 2 , … , N y_i(w \cdot x_i+b) \geq 1, i=1,2, \ldots, N yi​(w⋅xi​+b)≥1,i=1,2,…,N


④ 又因为最大化 γ \gamma γ ,等价于最大化 1 ∥ w ∥ \frac{1}{\left \| w \right \|} ∥w∥1​ ,也就等价于最小化 1 2 ∥ w ∥ 2 \frac{1}{2}\left \| w \right \|^{2} 21​∥w∥2 ,最终SVM模型的求解最大分割超平面问题又可以表示为以下约束最优化问题:

min ⁡ w , b 1 2 ∥ w ∥ 2 s . t . y i ( w ⋅ x i + b ) ≥ 1 , i = 1 , 2 , … , N \begin{aligned} & \min _{w, b} \frac{1}{2}\left \| w \right \|^{2}\\ & s.t. \quad y_{i}(w \cdot x_i+b) \geq 1, i=1,2, \ldots, N \end{aligned} ​w,bmin​21​∥w∥2s.t.yi​(w⋅xi​+b)≥1,i=1,2,…,N​

(2)对偶算法

求解线性可分支持向量机的最优化问题,我们很多时候会将它转化为对偶问题(dual problem)来求解,也就是应用「拉格朗日对偶性」,通过求解「对偶问题(dual problem)」得到「原始问题(primal problem)」的最优解,即线性可分支持向量机的对偶算法(dual algorithm)。

这样做有一些优点:

  • 对偶问题往往更容易求解。

  • 引入自然核函数,进而可以推广到非线性分类问题。


① 我们首先构建拉格朗日函数(Lagrange function)。为此,对每一个不等式约束引进拉格朗日乘子(Lagrange multiplier) α i ≥ 0 , i = 1 , 2 , … , N \alpha_i\geq 0,i=1,2,…,N αi​≥0,i=1,2,…,N ,定义拉格朗日函数:

L ( w , b , α ) = 1 2 w T w + ∑ i = 1 N α i ( 1 − y i ( w T x i + b ) ) = 1 2 w T w − ∑ i = 1 N α i y i ( w T x i + b ) + ∑ i = 1 N α i \begin{aligned} L(w, b, \alpha)=&\frac{1}{2}w^Tw+\sum_{i=1}^{N}\alpha_i(1-y_i(w^T x_i + b)) \\ =& \frac{1}{2}w^Tw-\sum_{i=1}^{N}\alpha_i y_i(w^T x_i + b) +\sum_{i=1}^{N}\alpha_i \end{aligned} L(w,b,α)==​21​wTw+i=1∑N​αi​(1−yi​(wTxi​+b))21​wTw−i=1∑N​αi​yi​(wTxi​+b)+i=1∑N​αi​​

根据拉格朗日对偶性,原始问题的对偶问题是极大极小问题: max ⁡ α min ⁡ w , b L ( w , b , α ) \max_{\alpha}\min_{w,b}L(w, b, \alpha) maxα​minw,b​L(w,b,α) 。所以,为了得到对偶问题的解,需要先求 L ( w , b , α ) L(w, b, \alpha) L(w,b,α) 对 w 、 b w、b w、b 的极小值,再求对 $\alpha $ 的极大值。


② 求 L ( w , b , α ) L(w, b, \alpha) L(w,b,α) 对 w 、 b w、b w、b 的极小值

将拉格朗日函数 L ( w , b , α ) L(w, b, \alpha) L(w,b,α) 分别对 w 、 b w、b w、b 求偏导,并令其值为0。

∂ L ∂ w = w – ∑ i = 1 N α i y i x i = 0 ⇒ w = ∑ i = 1 N α i y i x i \frac{\partial L}{\partial w} = w – \sum_{i=1}^{N}\alpha_i y_i x_i =0 \Rightarrow w = \sum_{i=1}^{N}\alpha_i y_i x_i ∂w∂L​=w–i=1∑N​αi​yi​xi​=0⇒w=i=1∑N​αi​yi​xi​

∂ L b = − ∑ i = 1 N α i y i = 0 ⇒ ∑ i = 1 N α i y i = 0 \frac{\partial L}{b}=-\sum_{i=1}^{N}\alpha_iy_i=0 \Rightarrow \sum_{i=1}^{N}\alpha_iy_i=0 b∂L​=−i=1∑N​αi​yi​=0⇒i=1∑N​αi​yi​=0

将上式代入拉格朗日函数,即得:

min ⁡ w , b L ( w , b , α ) = 1 2 ( ∑ i = 1 N α i y i x i ) T ∑ i = 1 N α i y i x i − ∑ i = 1 N α i y i ( ( ∑ i = 1 N α i y i x i ) T x i + b ) + ∑ i = 1 N α i = 1 2 ∑ i = 1 N ∑ j = 1 N α i y i α j y j x i T x j − ∑ i = 1 N ∑ j = 1 N α i y i α j y j x j T x i + ∑ i = 1 N α i = − 1 2 ∑ i = 1 N ∑ j = 1 N α i y i α j y j x i T x j + ∑ i = 1 N α i \begin{aligned} \min_{w,b} L(w, b,\alpha)=&\frac{1}{2} (\sum_{i=1}^{N}\alpha_i y_i x_i)^T \sum_{i=1}^{N}\alpha_i y_i x_i-\sum_{i=1}^{N}\alpha_i y_i((\sum_{i=1}^{N}\alpha_i y_i x_i)^T x_i + b) +\sum_{i=1}^{N}\alpha_i \\ =&\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i y_i\alpha_j y_jx_i^Tx_j-\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i y_i\alpha_j y_jx_j^Tx_i+\sum_{i=1}^{N}\alpha_i \\ =& -\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i y_i\alpha_j y_jx_i^Tx_j+\sum_{i=1}^{N}\alpha_i \end{aligned} w,bmin​L(w,b,α)===​21​(i=1∑N​αi​yi​xi​)Ti=1∑N​αi​yi​xi​−i=1∑N​αi​yi​((i=1∑N​αi​yi​xi​)Txi​+b)+i=1∑N​αi​21​i=1∑N​j=1∑N​αi​yi​αj​yj​xiT​xj​−i=1∑N​j=1∑N​αi​yi​αj​yj​xjT​xi​+i=1∑N​αi​−21​i=1∑N​j=1∑N​αi​yi​αj​yj​xiT​xj​+i=1∑N​αi​​


③ 求 min ⁡ w , b L ( w , b , α ) \min_{w,b}L(w, b,\alpha) minw,b​L(w,b,α) 对 α \alpha α 的极大值,即对偶问题

max ⁡ α − 1 2 ∑ i = 1 N ∑ j = 1 N α i y i α j y j x i T x j + ∑ i = 1 N α i s . t . ∑ i = 1 N α i y i = 0 α i ≥ 0 , i = 1 , 2 … N \begin{aligned} & \max_{\alpha} -\frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i y_i\alpha_j y_jx_i^Tx_j+\sum_{i=1}^{N}\alpha_i \\ & s.t. \quad \sum_{i=1}^{N}\alpha_iy_i=0 \\ & \quad \quad \alpha_i \geq 0,i=1, 2…N \end{aligned} ​αmax​−21​i=1∑N​j=1∑N​αi​yi​αj​yj​xiT​xj​+i=1∑N​αi​s.t.i=1∑N​αi​yi​=0αi​≥0,i=1,2…N​

将式中的目标函数由求极大转换成求极小,就得到下面与之等价的对偶最优化问题:

min ⁡ α 1 2 ∑ i = 1 N ∑ j = 1 N α i y i α j y j x i T x j − ∑ i = 1 N α i s . t . ∑ i = 1 N α i y i = 0 α i ≥ 0 , i = 1 , 2 … N \begin{aligned} & \min_{\alpha} \frac{1}{2}\sum_{i=1}^{N}\sum_{j=1}^{N}\alpha_i y_i\alpha_j y_jx_i^Tx_j-\sum_{i=1}^{N}\alpha_i \\ & s.t. \quad \sum_{i=1}^{N}\alpha_iy_i=0 \\ & \quad \quad \alpha_i \geq 0,i=1, 2…N \end{aligned} ​αmin​21​i=1∑N​j=1∑N​αi​yi​αj​yj​xiT​xj​−i=1∑N​αi​s.t.i=1∑N​αi​yi​=0αi​≥0,i=1,2…N​


**④ 对线性可分训练数据集,假设对偶最优化问题对 α \alpha α 的解为 α ∗ = ( α 1 ∗ , α 2 ∗ , … , α N ∗ ) T \alpha^*=(\alpha_1^*,\alpha_2^*,…,\alpha_N^*)^ T α∗=(α1∗​,α2∗​,…,αN∗​)T ,可以由 α ∗ \alpha^* α∗ 求得原始最优化问题的解 w ∗ 、 b ∗ w^*、b^* w∗、b∗ **。

有下面的定理:设 α ∗ = ( α 1 ∗ , α 2 ∗ , … , α N ∗ ) T \alpha^*=(\alpha_1^*,\alpha_2^*,…,\alpha_N^*)^T α∗=(α1∗​,α2∗​,…,αN∗​)T 是对偶最优化问题的解,则存在下标 j j j ,使得 α j ∗ > 0 \alpha_j^*>0 αj∗​>0 ,并可按下式求得原始最优化问题的解 w ∗ , b ∗ w^*,b^* w∗,b∗ :

w ∗ = ∑ i = 1 ∗ N α i ∗ y i x i w^*=\sum_{i=1}^*{N} \alpha_i^*y_ix_i w∗=i=1∑∗​Nαi∗​yi​xi​

b ∗ = y j − ∑ i = 1 ∗ N α i ∗ y i ( x i ∗ T x j ) b^*=y_j-\sum_{i=1}^*{N} \alpha_i^*y_i(x_i^*Tx_j) b∗=yj​−i=1∑∗​Nαi∗​yi​(xi∗​Txj​)

证明:根据定理,KKT条件成立,即得:

∂ L ( w ∗ , b ∗ , α ∗ ) ∂ w = w ∗ − ∑ i = 1 N α i ∗ y i x i = 0 ∂ L ( w ∗ , b ∗ , α ∗ ) ∂ b = − ∑ i = 1 N α i ∗ y i = 0 ∂ L ( w ∗ , b ∗ , α ∗ ) ∂ α = 0 α i ( 1 − y i ( w T x i + b ) ) = 0 α i ≥ 0 , i = 1 , 2 , … , N 1 − y i ( w T x i + b ) ≤ 0 , i = 1 , 2 , … , N \begin{aligned} & \frac{\partial L(w^*,b^*,\alpha ^*)}{\partial w} = w^*-\sum_{i=1}^{N}\alpha_i^* y_i x_i=0 \\ & \frac{\partial L(w^*,b^*,\alpha ^*)}{\partial b} = -\sum_{i=1}^{N}\alpha_i^*y_i=0 \\ & \frac{\partial L(w^*,b^*,\alpha ^*)}{\partial \alpha} = 0 \\ & \alpha_i(1-y_i(w^Tx_i+b)) =0 \\ & \alpha_i \geq 0 , \\ & i=1,2,…,N \\ & 1-y_i(w^Tx_i+b) \leq 0 , i=1,2,…,N \end{aligned} ​∂w∂L(w∗,b∗,α∗)​=w∗−i=1∑N​αi∗​yi​xi​=0∂b∂L(w∗,b∗,α∗)​=−i=1∑N​αi∗​yi​=0∂α∂L(w∗,b∗,α∗)​=0αi​(1−yi​(wTxi​+b))=0αi​≥0,i=1,2,…,N1−yi​(wTxi​+b)≤0,i=1,2,…,N​

由此得 w ∗ = ∑ i = 1 N α i ∗ y i x i w^*=\sum_{i=1}^{N} \alpha_i^*y_ix_i w∗=∑i=1N​αi∗​yi​xi​

\其中至少有一个 α j ∗ > 0 \alpha_j^*>0 αj∗​>0 (用反正法,假设 α j ∗ = 0 \alpha_j^*=0 αj∗​=0 ,由式可知 w ∗ = 0 w^*=0 w∗=0 ,而 w ∗ = 0 w^*=0 w∗=0 不是原始最优化问题的解,产生矛盾),由此对 j j j 有: y j ( w ∗ ⋅ x j + b ∗ ) – 1 = 0 y_j(w^*\cdot x_j+b^*) – 1 = 0 yj​(w∗⋅xj​+b∗)–1=0

将式代入并注意到 y j 2 = 1 y_j^2=1 yj2​=1 ,即得: b ∗ = y j – w ∗ x j = y j – ∑ i = 1 N α i ∗ y i ( x i x j ) b^* = y_j – w^*{}x_j = y_j – \sum_{i=1}^{N} \alpha_i^*y_i(x_ix_j) b∗=yj​–w∗xj​=yj​–∑i=1N​αi∗​yi​(xi​xj​)


⑤ 由此定理可知,分离超平面可以写成

∑ i = 1 N α i ∗ y i ( x ⋅ x i ) + b ∗ = 0 \sum_{i=1}^{N} \alpha_i^*y_i(x\cdot x_i) + b^* = 0 i=1∑N​αi∗​yi​(x⋅xi​)+b∗=0


⑥ 分类决策函数可以写成

f ( x ) = s i g n ( ∑ i = 1 N α i ∗ y i ( x ⋅ x i ) + b ∗ ) f(x) = sign(\sum_{i=1}^{N} \alpha_i^*y_i(x\cdot x_i) + b^*) f(x)=sign(i=1∑N​αi∗​yi​(x⋅xi​)+b∗)

也就是说,这里的决策函数只依赖于输入 x x x 和训练样本输入的内积。上式亦称作线性可分SVM的对偶形式。

综上所述,对于给定得线性可分训练数据集,可以首先求对偶问题的解 α ∗ \alpha^* α∗ ;再利用公式求得原始问题的解 w ∗ , b ∗ w^*,b^* w∗,b∗ ;从而得到分离超平面及分类决策函数。这种算法称为线性可分支持向量机的对偶学习算法,是线性可分支持向量机学习的基本算法。

2)线性SVM与软间隔最大化

我们前面提到的是线性可分的情况,但实际应用中完全线性可分的情况太少见了。如下图就是一个典型的线性不可分的分类图(我们没有办法找到一条直线,把空间划分为2个区域,一个区域只有黑点,一个区域只有白点)。

要对其进行切分,有2种方案:


方案1:用曲线去将其完全分开,即非线性的决策边界,这会和之后谈到的核函数关联。


方案2:还是使用直线,不过不追求完全可分,会适当包容一些分错的情况,在这个过程中我们会在模型中加入惩罚函数,尽量让分错的点不要太多太离谱。对分错点的惩罚函数就是这个点到其正确位置的距离,如下图所示:

图上黄色、蓝色的直线分别为支持向量所在的边界,黑色的线为决策函数,那些绿色的线表示分错的点到其相应的决策面的距离,这样我们可以在原函数上面加上一个惩罚函数,并且带上其限制条件为:

min ⁡ 1 2 ∣ w ∣ 2 + C ∑ i = 1 R ε i , s . t . , y i ( w T x i + b ) ≥ 1 − ε i , ε i ≥ 0 \begin{aligned} & \min \frac{1}{2}|w|^{2}+C \sum_{i=1}^{R} \varepsilon_{i}, \\ & s.t., y_{i}\left(w^{T} x_{i}+b\right) \geq 1-\varepsilon_{i}, \varepsilon_{i} \geq 0 \end{aligned} ​min21​∣w∣2+Ci=1∑R​εi​,s.t.,yi​(wTxi​+b)≥1−εi​,εi​≥0​

上述公式为在线性可分问题的基础上加上的惩罚函数部分,当 x i x_i xi​ 在正确一边的时候, ε = 0 \varepsilon = 0 ε=0 ,R为全部的点的数目,C是一个由用户去指定的系数,表示对分错的点加入多少的惩罚:

  • 当C很大的时候,分错的点就会更少,但是过拟合的情况可能会比较严重。
  • 当C很小的时候,分错的点可能会很多,不过可能由此得到的模型也会不太正确。

实际我们也会调整和选择合适的C值。

经过这个变换之后,我们可以同样求解一个拉格朗日对偶问题,得到原问题的对偶问题的表达式:

max ⁡ α ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n α i α j y i y j x i T x j  s.t.  , C ≥ α i ≥ 0 , i = 1 , ⋯   , n , ∑ i = 1 n α i y i = 0 \begin{aligned} & \max _{\alpha} \sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i, j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i}^{T} x_{j} \\ & \text { s.t. }, C \geq \alpha_{i} \geq 0, i=1, \cdots, n , \sum_{i=1}^{n} \alpha_{i} y_{i}=0 \end{aligned} ​αmax​i=1∑n​αi​−21​i,j=1∑n​αi​αj​yi​yj​xiT​xj​ s.t. ,C≥αi​≥0,i=1,⋯,n,i=1∑n​αi​yi​=0​

在线性不可分情况下得到的对偶问题,不同的地方就是α的范围从[0, +∞),变为了[0, C],增加的惩罚 ε \varepsilon ε 没有为对偶问题增加太多复杂度。

3)非线性SVM与核函数

如果我们要处理的分类问题更加复杂,甚至不能像上面一样近似线性可分呢,这种情况下找到的超平面分错的程度太高不太可接受。

对于这样的问题,一种解决方案是将样本从原始空间映射到一个更高维的特征空间,使得样本在这个特征空间内线性可分,然后再运用SVM求解,如下图所示:

比如下图中的典型线性不可分的情况:

当我们使用映射函数 z 1 = x 1 2 , z 2 = x 2 2 , z 3 = x 2 z_{1}=x_{1}^{2}, z_{2}=x_{2}^{2}, z_{3}=x_{2} z1​=x12​,z2​=x22​,z3​=x2​ 把这两个类似于椭圆形的点映射到三维空间 ( z 1 , z 2 , z 3 ) (z_1,z_2,z_3) (z1​,z2​,z3​) 后,对映射后的坐标加以旋转之后就可以得到一个线性可分的点集了。

我们回忆一下之前得到的对偶问题表达式:

max ⁡ α ∑ i = 1 n α i − 1 2 ∑ i , j = 1 n α i α j y i y j x i T x j s . t . , C ≥ α i ≥ 0 , i = 1 , ⋯   , n , ∑ i = 1 n α i y i = 0 \begin{aligned} & \max _{\alpha} \sum_{i=1}^{n} \alpha_{i}-\frac{1}{2} \sum_{i, j=1}^{n} \alpha_{i} \alpha_{j} y_{i} y_{j} x_{i}^{T} x_{j} \\ & s.t. , C \geq \alpha_{i} \geq 0, i=1, \cdots, n, \sum_{i=1}^{n} \alpha_{i} y_{i}=0 \\ \end{aligned} ​αmax​i=1∑n​αi​−21​i,j=1∑n​αi​αj​yi​yj​xiT​xj​s.t.,C≥αi​≥0,i=1,⋯,n,i=1∑n​αi​yi​=0​

做一点小小的改造,令: x i T x j = κ ( x i , x j ) x_{i}^{T} x_{j}=\kappa\left(x_{i}, x_{j}\right) xiT​xj​=κ(xi​,xj​) 。这个式子所做的事情就是将线性的空间映射到高维的空间, κ ( x i , x j ) \kappa\left(x_{i}, x_{j}\right) κ(xi​,xj​) 有很多种,下面是比较典型的两种:

κ ( x i , x j ) = ( x i ⋅ x j + 1 ) d \kappa\left(x_{i}, x_{j}\right)=\left(x_{i} \cdot x_{j}+1\right)^{d} κ(xi​,xj​)=(xi​⋅xj​+1)d

κ ( x i , x j ) = exp ⁡ ( − ( x i − x j ) 2 2 σ 2 ) \kappa\left(x_{i}, x_{j}\right)= \exp \left(-\frac{\left(x_{i}-x_{j}\right)^{2}}{2\sigma^{2}}\right) κ(xi​,xj​)=exp(−2σ2(xi​−xj​)2​)

上述两个核函数分别为多项式核和高斯核,高斯核甚至是将原始空间映射为无穷维空间,另外核函数有一些比较好的性质,比如说不会比线性条件下增加多少额外的计算量,等等,此处我们不深入。对于一个问题,不同的核函数可能会带来不同的结果,我们需要做一些尝试来支撑选择(关于这个部分,大家可以看最下方的python实现部分)。

3.SVM总结

1)模型总结

支持向量机(Support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,他的学习策略就是间隔最大化,同时该方法可以形式化为一个求解图二次规划。

SVM由简至繁可分为三类:线性可分支持向量机、硬间隔(hard-margin svm);线性支持向量机、软间隔(soft-margin svm);非线性支持向量机、Kernel SVM。

SVM中存在三宝:间隔、对偶、核技巧。

2)模型优缺点

(1)SVM模型优点

  • SVM是一个凸优化问题,求得的解一定是全局最优而不仅仅是局部最优。

  • 不仅适用于线性问题,还适用于非线性问题(借助核技巧)。

  • 模型鲁棒性好,决策边界只取决于支持向量而不是全部数据集。

  • 中小样本量数据集上效果优异。

  • 无需依赖整个数据。

  • 泛化能力比较强。

(2)SVM模型缺点

  • 二次规划问题求解将涉及n阶矩阵的计算(其中n为样本的个数),计算量随样本量上涨厉害,因此SVM不适用于超大数据集。

  • 原始SVM仅适用于二分类问题。(当然,SVM的推广SVR也适用于回归问题;我们也可以通过one-vs-one,one-vs-rest等思路组合SVM来解决多分类问题)。

  • 对非线性问题没有通用解决方案,有时候很难找到一个合适的核函数。

  • 对于核函数的高维映射解释力不强,尤其是径向基函数。

  • SVM对缺失数据敏感。

更多监督学习的算法模型总结可以查看ShowMeAI的文章AI知识技能速查 | 机器学习-监督学习。

4.基于Python的SVM代码实践

1)算法包说明

我们这里直接借助于python机器学习工具包sklearn来演示SVM的应用,sklearn中对SVM的算法实现都包在sklearn.svm下面,具体见sklearn官方文档,其中SVC类是用来进行进行分类的任务,SVR是用来进行数值回归任务的。

不同的核函数需要指定不同的参数。

  • 针对线性函数,只需要指定参数C,它表示对不符合最大间距规则的样本的惩罚力度。

  • 针对多项式核函数,除了参数C外,还需要指定degree,它表示多项式的阶数。

  • 针对高斯核函数,除了参数C外,还需要指定gamma值,这个值对应的是高斯函数公式中 1 2 σ 2 \frac{1}{2\sigma ^2} 2σ21​ 的值。

2)使用线性核函数

import numpy as np
import matplotlib.pyplot as plt
from sklearn import svm, datasets

iris = datasets.load_iris()
X = iris.data[:, :2]  # 只取前两维特征,方便可视化
y = iris.target

svc = svm.SVC(kernel='linear', C=1).fit(X, y)

x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
h = (x_max / x_min) / 100
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

plt.subplot(1, 1, 1)
Z = svc.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired, alpha=0.8)

plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Paired)
plt.xlabel('Sepal length')
plt.ylabel('Sepal width')
plt.xlim(xx.min(), xx.max())
plt.title('SVC with linear kernel')
plt.show()

3)使用多项式核函数

初始化svm对象的代码替换为下面这行

svc = svm.SVC(kernel='poly', degree=3).fit(X, y)

4)使用rbf核函数(高斯核函数)

初始化svm对象的代码替换为下面这行

svc = svm.SVC(kernel='rbf', C=1).fit(X, y)

gamma 值越大,SVM 就会倾向于越准确的划分每一个训练集里的数据,这会导致泛化误差较大和过拟合问题。

C:错误项的惩罚参数C。它还控制平滑决策边界和正确分类训练点之间的权衡。

参考链接

视频教程

可以点击 B站 查看视频的【双语字幕】版本

【双语字幕+资料下载】斯坦福CS229 | 机器学习-吴恩达主讲(2018·完整版)

【双语字幕+资料下载】斯坦福CS229 | 机器学习-吴恩达主讲(2018·完整版)

https://www.bilibili.com/video/BV1TT4y127Nf?p=6

ShowMeAI图解机器学习算法系列(完整版)

ShowMeAI系列教程精选推荐

机器学习算法/模型——支持向量机 支持向量机线性SVM(软间隔的SVM)概念/术语核函数SVM模型 支持向量机(简称SVM)是一个功能强大并且全面的机器学习模型,它能够执行线性或非线性分类、回归,甚至是异常值检测任务。 支持向量机的主要目标是得到一条能用于分组的最佳分界线。 线性SVM(软间隔的SVM) 概念/术语 超平面 支持向量 在寻找最佳分界线的过程中起了支持作用的数据点。 硬间隔、软间隔 硬间隔:正负样本之间的... 阅读详情

相关推荐

详解机器学习经典模型(原理及应用)——支持向量机

本文详细介绍了支持向量机的概念、原理及应用,可用作业务应用或面试参考。

学习与分享人工智能技术 6259

支持向量机(SVM)

算法简介 支持向量机(SVM)是种二类分类模型。 它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机:支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。支持向量机的学习算法是求解凸二次规划的最优化算法。 支持向量机学习方法包含构建由简至繁的模型:线性可分支持向量机、线性支持向量机以及非线性支持向量机。简单模型是复杂模型的基础,也是复杂模型的特殊情况。当训练数据线

星辰的博客 3万+

图解机器学习算法 | 从入门到精通系列教程(机器学习通关指南·完结)

本篇内容是ShowMeAI组织的「图解机器学习算法」系列教程入口,本教程尽量以生动可视化的方式,帮助大家理解机器学习的核心知识和重要的系列模型,并配以相关的代码实现帮助大家了解应用方法。(对机器学习实战感兴趣的同学,可以关注ShowMeAI的另外一个系列[机器学习应用实践])......

ShowMeAI研究中心 1万+

机器学习 —— 支持向量机

一、基于最大间隔分隔数据 1.1 线性模型 1.2 超平面 1.3 支持向量 1.4 支持向量机 二、寻找最大间隔 三、拉格朗日乘子法与对偶问题 3.1对偶问题:等式约束 3.2不等式约束的KKT条件 3.3最大间隔问题的拉格朗日乘法 四、SMO算法 4.1 小规模数据集 4.2 应用简化版 SMO 算法处理小规模数据集 4.3、利用完整Platt SMO算法加速优化 五、示例:基于SVM的手写数字识别 5.1 数据集 5.2 算法实现 六、实验总结

DreamWendy的博客 1万+

机器学习知识图谱——支持向量机算法(SVM)

支持向量机是一种强大的监督学习算法,可用于分类和回归问题,尤其擅长处理小样本、高维度、非线性问题。

moton2017的博客 2222

Win11下USB-Blaster驱动安装全攻略:Quartus用户必看(附常见问题解决)

本文详细介绍了在Windows 11系统下为Intel FPGA开发工具Quartus安装USB-Blaster驱动的完整流程与常见问题解决方案。针对Win11更严格的驱动签名验证机制,提供了从标准安装步骤到高级故障排查(如禁用驱动强制签名、使用测试模式)的实用指南,帮助用户快速解决驱动安装失败问题,确保FPGA编程调试顺利进行。

weixin_29256771的博客 667

机器学习-04-分类算法-04-支持向量机SVM

本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法与SVM算法部分。

IT从业者的成长历程 2078

【超详细】基于YOLOv8的PCB缺陷检测

印刷电路板(PCB)瑕疵数据集:是一个公共的合成PCB数据集,由北京大学发布,其中包含1386张图像以及6种缺陷(缺失孔,鼠标咬伤,开路,短路,杂散,伪铜),用于检测,分类和配准任务。本文我们选取了其中适用与检测任务的693张图像,随机选择593张图像作为训练集,100张图像作为验证集。

weixin_45679938的博客 2万+

机器学习入门——图解支持向量机

支持向量机(Support Vector Machine) 在感知机中,我们介绍过,假设存在这样的两类点,我们可以学得一条决策边界将它们分开,比如是条这样的直线: 但是得到的决策边界不唯一,根据选择训练集数据的顺序可以得到不同的决策边界: 但是这两条决策边界的泛化能力都不好,为什么这么说呢,因为这两条线都离某个类别的点太近了,很可能测试集中未知的点会被错误的分类。 那么什么样的决策边界才是最好...

日积月累,天道酬勤 1927

ProgLoss+STAL 技术详解:YOLO26 小目标检测增强方案

本文提出了一种基于ProgLoss渐进式损失函数和STAL小目标感知标签分配的YOLO26增强方案。针对小目标检测中特征信息少、正负样本不平衡等难题,STAL通过尺度感知的标签分配策略动态调整候选样本数量和IoU阈值,为小目标分配更多正样本;ProgLoss则根据训练阶段动态调整分类和回归损失的权重,早期侧重定位能力,后期加强分类精度。实验表明,该组合方案显著提升了小目标检测性能,在COCO数据集上小目标AP达到38.2%,比基线提升6.5个百分点。该方法为遥感、监控等场景的小目标检测提供了有效解决方案。

一键难忘的博客 1290

机器人中的数值优化(一)—— 数学优化、凸集合与凸函数

本系列文章主要是我在学习《数值优化》过程中的一些笔记和相关思考,主要的学习资料是深蓝学院的课程《机器人中的数值优化》和高立编著的《数值最优化方法》等,本系列文章篇数较多,不定期更新,上半部分介绍无约束优化,下半部分介绍带约束的优化,中间会穿插一些路径规划方面的应用实例。

慕羽★的博客 2521

支持向量机概念图解_支持向量机:基本概念

支持向量机概念图解One of the Dual purposes Supervised Machine Learning Algorithms, serves as both a Regression(Support Vector Regressor) and a Classification Algorithm(Support Vector Classifier). This article ...

weixin_26752765的博客 2685

DirectX function “GetDeviceRemovedReason“ failed with DXGI_ERROR_DEVICE_HUNG (“The GPU will not resp

游戏报错"DXGI_ERROR_DEVICE_HUNG"的解决方案 在使用RTX 40系显卡运行FIFA 23等游戏时,可能出现DirectX报错导致游戏崩溃。这主要由于最新显卡驱动与DirectX 12的兼容性问题。解决方法包括: 降级显卡驱动版本 修改游戏配置文件,将DIRECTX_SELECT设为1 在显卡控制面板中关闭垂直同步、抗锯齿、DLSS 3等功能 调整电源模式为性能优先 这些操作可以有效解决因驱动兼容性导致的游戏崩溃问题。

猿小白的博客 3896

【建议收藏】图解十大经典机器学习算法——带你入门机器学习

机器学习是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。它是人工智能的基础,更是我们现在社会进步的源泉。

迷茫与徘徊只会让你陷入绝境,欢迎私信博主,带你开始提升变现价值! 7944

Linux下驱动开发_块设备驱动开发(硬件上采用SD卡+SPI协议)

这一篇文章将采用SD卡作为存储硬件,利用SPI协议与SD卡通信,完成块设备驱动开发测试。 SD卡可以更加形象的表示块设备开发过程,明白硬件如何交互,完成数据读写。

2608

UE5 蓝图节点图文大全(300+蓝图,9万字+)

本文采用虚幻5.2.1版本,以图文的方式对蓝图节点进行介绍,包括蓝图节点的输入输出参数解释,并有中英文节点名称可参考。

一碗清深的博客 2万+

传统机器学习算法-支持向量机模型详解

支持向量机模型详解

Devin的博客 1660

lammps不同晶面建模方法汇总

Lammps lattice命令中的orient关键词可实现晶体的旋转和重定向,下面的命令中,111面的法线方向与y正方向重合,说明111面垂直于y轴。在有些模拟中,需要研究特定面的性质,比如研究110面,默认状态下,110面不是坐标平面,研究起来不方便,需要对模型进行旋转,如下图所示。经过旋转后,110面的法线方向与x轴正方向重合,旋转之后再重新对晶体进行切割,新模型的x面就是110面。需要注意的是,这种方法需要明确指定x、y、z轴的正方向分别对应哪三个面的法线方向,缺一不可。大家好,我是小马老师。

lammps_jiayou的博客 360

SVM——支持向量机的学习入门

SVM算法的基本原理,包括硬间隔和软间隔的概念,以及在处理线性和非线性分类、回归和异常值检测中的应用。通过Scikit-Learn示例,展示了SVM在实际项目中的操作,并探讨了SVM的优点和选择核函数的策略。

君一席 1760

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

SVM(支持向量机)通俗入门讲解及线性SVM手写代码实现

参考: 《Support Vector Machines for Beginners – Linear SVM》 《支持向量机通俗导论(理解SVM的三层境界)》(在线PDF) 《图解机器学习》([日]杉木将 著) 一、SVM入门 1.1 什么是支持向量机 ...

David's Tweet 8281

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

100天掌握机器学习实战:中文图解与Scikit-Learn完整指南

你是否曾对机器学习感到困惑,不知从何开始?面对复杂的算法和数学公式,是否觉得难以入门?今天,我要为你介绍一个终极解决方案——机器学习100天中文版项目。这个精心设计的100天学习计划,通过中文图解和Scikit-Learn实战代码,让你在三个月内系统掌握机器学习核心技能,从数据预处理到高级算法应用,一步步解锁AI世界的奥秘。 ## 🎯 为什么机器学习入门如此困难? 许多初学者在接触机器学习时

gitblog_00637的博客 848

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

图解十大经典机器学习算法入门

弱人工智能近几年取得了重大突破,悄然间,已经成为每个人生活中必不可少的一部分。以我们的智能手机为例,看看到底温藏着多少人工智能的神奇魔术。 下图是一部典型的智能手机上安装的一些常见应用程序,可能很多人都猜不到,人工智能技术已经是手机上很多应用程序的核心驱动力。 图1 智能手机上的相关应用 传统的机器学习算法包括决策树、聚类、贝叶斯分类、支持向量机、EM、Adaboost等等。这篇文章将对

jrunw的博客 22万+

《图解机器学习算法》学习笔记

机器学习指的是计算机根据给定的问题、课题或环境进行学习,并利用学习结果解决问题或课题等的一整套机制.对结果的验证通常应使用另外准备的一些不用于学习的数据来进行,否则会产生过拟合(overfitting)问题。

qq_52247221的博客 1728

【AI基础:机器学习】12、支持向量机指南:从硬间隔到核技巧,原理与实战图解

SVM:从数学原理到实践应用 支持向量机(SVM)是一种强大的机器学习算法,通过寻找最优超平面实现分类任务。其核心思想是最大化分类间隔,提升模型泛化能力。对于线性可分数据,SVM构造硬间隔分类器;面对噪声数据则采用软间隔方法,引入松弛变量和惩罚参数C。针对非线性问题,SVM通过核技巧隐式映射数据到高维空间,常用核函数包括高斯核(RBF)、多项式核等。优化求解采用拉格朗日对偶问题,配合SMO算法高效实现。SVM在文本分类、图像识别等领域表现优异,尤其适合小样本、高维数据场景。

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 1523

一文读懂机器学习分类算法(附图文详解)

大数据文摘出品来源:builtin说起分类算法,相信学过机器学习的同学都能侃上一二。可是,你能够如数家珍地说出所有常用的分类算法,以及他们的特征、优缺点吗?比如说,你可以...

Datawhale 7612

图解十大经典机器学习算法

本文利用图解的方式介绍了10大常见的机器学习算法。在机器学习领域,有种说法叫做“世上没有免费的午餐”,简而言之,它是指没有任何一种算法能在每个问题上都能有最好的效果,这个理论在监督学习方面体现得尤为重要。举个例子来说,你不能说神经网络永远比决策树好,反之亦然。模型运行被许多因素左右,例如数据集的大小和结构。因此,你应该根据你的问题尝试许多不同的算法,同时使用数据测试集来评...

weixin_43373042的博客 2778
上一篇: 图解机器学习算法(11) | LightGBM模型详解(机器学习通关指南·完结)
下一篇: 图解机器学习算法(14) | PCA降维算法详解(机器学习通关指南·完结)
ShowMeAI
博客等级 码龄5年 6514粉丝 672原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ShowMeAI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值