线性可分支持向量机

【机器学习基础】线性可分支持向量机 引言 接下里的一系列有关机器学习的博文,我将具体的介绍常用的算法,并且希望在这个过程中尽可能地结合实际应用更加深入的理解其精髓,希望所付出的努力能得到应有的回报。 接下来的有关机器学习基础博文主要根据机器学习技法课程的学习,围绕特征转换(feature transforms)这个主要工具,从以下三个方向进行探讨: 如果现在有很多特征转换可以使用的时候,我们该如何运用这些特征转换, 阅读详情

一般的,当训练样本线性可分的时候,如下图所示:

img

可以找到无数个划分超平面。而线性可分支持向量机利用间隔最大化来求最优划分超平面,此时解是唯一的。

通过间隔最大化或者对应的凸二次规划问题学习到的分离超平面为:
w ∗ ⋅ x + b ∗ = 0 w^*\cdot x+b^*=0 w∗⋅x+b∗=0
对应的决策函数为:
f ( x ) = s i g n ( w ∗ ⋅ x + b ∗ ) f(x)=sign(w^*\cdot x+b^*) f(x)=sign(w∗⋅x+b∗)
我们称上面的的式子为线性可分的支持向量机。

函数间隔与几何间隔

给定分离超平面 w ⋅ x + b = 0 w\cdot x + b = 0 w⋅x+b=0, ∣ w ⋅ x + b ∣ |w\cdot x + b | ∣w⋅x+b∣能相对的表示x到超平面的距离。通过分析标签值y与 w ⋅ x + b w\cdot x + b w⋅x+b符号的是否一致能够表示分类是否正确,于是可以用 y ( w ⋅ x + b ) y(w\cdot x + b) y(w⋅x+b)的符号来表示是否分类正确及确信度,这就是函数间隔。为此,对于样本 ( x i , y i ) (x_i, y_i) (xi​,yi​)我们定义函数间隔 γ ^ i \hat \gamma_i γ^​i​为:
γ ^ i = y i ( w ⋅ x i + b ) \hat \gamma_i = y_i(w \cdot x_i + b) γ^​i​=yi​(w⋅xi​+b)
对于有N个样本的数据集T,定义数据集T的函数间隔为:所有样本点的函数间隔的最小值,即:
γ ^ i = min ⁡ i = 1 , 2 , . . . , N γ ^ i = min ⁡ i = 1 , 2 , . . . , N y i ( w ⋅ x i + b ) (1) \hat \gamma_i = \min\limits_{i=1,2,...,N}\hat \gamma_i = \min\limits_{i=1,2,...,N} y_i(w\cdot x_i + b) \tag 1 γ^​i​=i=1,2,...,Nmin​γ^​i​=i=1,2,...,Nmin​yi​(w⋅xi​+b)(1)

如果成比例的改变w和b为2w和2b,那么函数间隔变为了原来2倍,为了消除这样的影响,我们限定L2范数 ∥ w ∥ = 1 \|w\|=1 ∥w∥=1,此时函数间隔就成为了几何间隔。

下图给出了超平面 ( w , b ) (w,b) (w,b)及其法向量w:

在这里插入图片描述

点A表示某一实例 ( x i , y i ) (x_i,y_i) (xi​,yi​),A到超平面的距离由AB给出,记作 γ i \gamma_i γi​:
γ i = w ⋅ x i + b ∣ ∣ w ∣ ∣ \gamma_i = \frac{w\cdot x_i + b}{||w||} γi​=∣∣w∣∣w⋅xi​+b​
无论样本是正例还是负例,当样本被正确分类时,到超平面的距离为:
γ i = y i ( w ⋅ x i + b ) ∣ ∣ w ∣ ∣ \gamma_i = \frac{y_i(w\cdot x_i + b)}{||w||} γi​=∣∣w∣∣yi​(w⋅xi​+b)​
我们定义上面的式子为某个样本到超平面的几何间隔。

对于有N个样本的数据集T,定义数据集T的几何间隔为:所有样本点的几何间隔的最小值,即:
γ = min ⁡ i = 1 , . . . , N γ i = min ⁡ i = 1 , . . . , N y i ( w ⋅ x i + b ) ∣ ∣ w ∣ ∣ (2) \gamma = \min\limits_{i=1,...,N} \gamma_i = \min\limits_{i=1,...,N}\frac{y_i(w \cdot x_i + b)}{||w||} \tag 2 γ=i=1,...,Nmin​γi​=i=1,...,Nmin​∣∣w∣∣yi​(w⋅xi​+b)​(2)
由函数间隔和几何间隔的定义(1),(2)可知:
γ i = γ ^ i ∣ ∣ w ∣ ∣ \gamma_i = \frac{\hat\gamma_i}{||w||} γi​=∣∣w∣∣γ^​i​​

γ = γ ^ ∣ ∣ w ∣ ∣ (3) \gamma = \frac{\hat\gamma}{||w||} \tag 3 γ=∣∣w∣∣γ^​​(3)

如果限定 ∥ w ∥ = 1 \|w\|=1 ∥w∥=1,那么函数间隔就等于几何间隔。

SVM模型

对于线性可分的数据可以找到无数个将数据划分的超平面,但是距离超平面较远的点对超平面的确定没有很大的影响。因此,我们把注意力放在距离超平面较近的点上,如下图中红色框选择的点。如果我们让距离超平面最近的点(图中)到超平面的距离最大化,那么就可以认为这样的划分超平面即使对于较难分类正确的点,也能得到较好的划分结果。

在这里插入图片描述

线性可分的SVM目标是找到间隔最大化的划分超平面,所谓间隔最大化是指:对给定的数据集的点,划分超平面不仅可以可以区分正例负例,而且还能使得最难分类的点有足够大的确信度使得他们分开,这样的平面对未知的样本实例有更好的分类能力。

要求几何间隔最大的分离超平面,可以转化为求解下面的最优化问题:
max ⁡ w , b γ s . t . y i ( w ⋅ x i + b ) ∣ ∣ w ∣ ∣ ≥ γ i = 1 , 2 , . . . , N \max\limits_{w,b} \gamma \\ s.t. \quad \frac{y_i(w \cdot x_i + b)}{||w||} \ge \gamma\\i=1,2,...,N w,bmax​γs.t.∣∣w∣∣yi​(w⋅xi​+b)​≥γi=1,2,...,N
由由函数间隔和几何间隔关系的公式(3)可以将问题转化为:
max ⁡ w , b γ ^ ∥ w ∥ s . t . y i ( w ⋅ x i + b ) ≥ γ ^ i = 1 , 2 , . . . , N \max\limits_{w,b} \frac{\hat\gamma}{\|w\|} \\ s.t. \quad y_i(w \cdot x_i + b) \ge \hat\gamma\\i=1,2,...,N w,bmax​∥w∥γ^​​s.t.yi​(w⋅xi​+b)≥γ^​i=1,2,...,N
根据上面的式子,不难得出,SVM的思想是:让距离划分超平面最近的点(支持向量)到划分超平面的距离最大化。

实际上,当我们成倍的改变 w , b w,b w,b为 λ w , λ b \lambda w ,\lambda b λw,λb,函数间隔也变为 λ γ ^ \lambda \hat \gamma λγ^​ ,并不能改变约束条件中的不等式的关系。因此,为了简化计算,我们可以取 γ ^ = 1 \hat\gamma=1 γ^​=1。并且,最大化 1 ∥ w ∥ \frac{1}{\|w\|} ∥w∥1​和最小化 1 2 ∥ w ∥ 2 \frac{1}{2} \|w \|^2 21​∥w∥2等价,于是优化目标转化为:
min ⁡ w , b 1 2 ∣ ∣ w ∣ ∣ 2 ; s . t 1 − y i ( w ⋅ x i + b ) ≤ 0 ( i = 1 , 2 , . . . m ) (4) \min\limits_{w,b} \frac{1}{2}||w||^2 ;\quad s.t \quad 1- y_i(w \cdot x_i + b) \leq 0 \quad (i =1,2,...m) \tag 4 w,bmin​21​∣∣w∣∣2;s.t1−yi​(w⋅xi​+b)≤0(i=1,2,...m)(4)
显然式子(4)是凸二次规划问题。要注意的是,训练样本中存在某些样本点使得约束条件取得等号:
y i ( w ⋅ x i + b ) − 1 = 0 y_i(w \cdot x_i + b) -1 = 0 yi​(w⋅xi​+b)−1=0
这样的点就是上面图片中红色方框对应的点,他们位于和决策超平面距离为1的位置上,我们称这样的点叫做支持向量。在决定分离超平面的时候,只有这些支持向量起到了作用。由于支持向量对分离超平面的决定性作用,所以将这样的分类模型叫做支持向量机。

SVM求解

为了求解支持向量机的最优化模型(4),我们需要使用拉格朗日对偶性来得到对偶问题,间接得到原始问题的最优解。这么做的好处是

  1. 对偶问题的计算量更小,更容易求解。
  2. 自然的引入核函数,进而推广到非线性可分问题。

首先需要构造拉格朗日函数,引入拉格朗日乘子 α i ≥ 0 \alpha_i \geq 0 αi​≥0后,得到:
L ( w , b , α ) = 1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 m α i [ 1 − y i ( w T x i + b ) ] (5) L(w,b,\alpha) = \frac{1}{2}||w||^2 + \sum\limits_{i=1}^{m}\alpha_i[1-y_i(w^Tx_i + b)] \tag 5 L(w,b,α)=21​∣∣w∣∣2+i=1∑m​αi​[1−yi​(wTxi​+b)](5)
其中, α = ( α 1 , α 2 , . . . , α m ) \alpha=(\alpha_1, \alpha_2,..., \alpha_m) α=(α1​,α2​,...,αm​)为拉格朗日乘子向量。

原始问题等价于:
min ⁡ w , b max ⁡ α L ( w , b , α ) \min \limits_{w,b} \max\limits_{\alpha}L(w,b,\alpha) w,bmin​αmax​L(w,b,α)
根据拉格朗日对偶性,所以原始问题的对偶问题是:
max ⁡ α min ⁡ w , b L ( w , b , α ) (6) \max\limits_\alpha\min\limits_{w,b}L(w,b,\alpha) \tag 6 αmax​w,bmin​L(w,b,α)(6)
若原始问题与对偶问题有相同的解 w ∗ , b ∗ , α ∗ w^*, b^*, \alpha^* w∗,b∗,α∗,则要满足KKT条件:
∇ w L ( w ∗ , b ∗ , α ∗ ) = w ∗ − ∑ i = 1 m α i y i x i = 0 ( K K T . 1 ) ∇ b L ( w ∗ , b ∗ , α ∗ ) = − ∑ i = 1 m α i y i = 0 ( K K T . 2 ) α ∗ ( y i ( w ∗ T x i + b ∗ ) − 1 ) = 0 ( K K T . 3 ) y i ( w ∗ T x i + b ∗ ) − 1 ≥ 0 ( K K T . 4 ) a i ∗ ≥ 0 , i = 1 , 2 , . . . m ( K K T . 5 ) \nabla_wL(w^*, b^*, \alpha^*) = w^*-\sum\limits_{i=1}^{m}\alpha_iy_ix_i = 0 \quad\quad (KKT.1) \\ \nabla_bL(w^*, b^*, \alpha^*) = -\sum\limits_{i=1}^{m}\alpha_iy_i = 0 \quad\quad (KKT.2) \\ \alpha^*(y_i(w^{*T}x_i+b^*)-1) = 0 \quad\quad (KKT.3) \\ y_i(w^{*T}x_i+b^*)-1 \ge 0 \quad\quad\quad (KKT.4) \\ a_i^* \ge 0,\quad i=1,2,...m \quad\quad\quad (KKT.5) ∇w​L(w∗,b∗,α∗)=w∗−i=1∑m​αi​yi​xi​=0(KKT.1)∇b​L(w∗,b∗,α∗)=−i=1∑m​αi​yi​=0(KKT.2)α∗(yi​(w∗Txi​+b∗)−1)=0(KKT.3)yi​(w∗Txi​+b∗)−1≥0(KKT.4)ai∗​≥0,i=1,2,...m(KKT.5)
其中公式(KKT.3)为KKT对偶互补条件,可以知道当 α ∗ > 0 \alpha^*>0 α∗>0则有 ( y i ( w ∗ T x i + b ∗ ) − 1 ) = 0 (y_i(w^{*T}x_i+b^*)-1) = 0 (yi​(w∗Txi​+b∗)−1)=0,此时的样本 x i x_i xi​对应的点为支持向量。

所以我们通过求对偶问题的解间接得到原始问题的最优解,这样可以简小计算量,这就是SVM的对偶算法。

首先需要求 L ( w , b , α ) L(w,b,\alpha) L(w,b,α)对 w , b w,b w,b的极小,再求对 α \alpha α的极大。

假设: ψ ( α ) = min ⁡ w , b L ( w , b , α ) \psi(\alpha) = \min\limits_{w,b}L(w,b,\alpha) ψ(α)=w,bmin​L(w,b,α)

将拉格朗日函数分别对w,b求偏导并令其等于0,得到:
∂ L ( w , b , α ) ∂ w = 0    ⇒ w = ∑ i = 1 m α i y i x i (7) \frac{\partial L(w,b,\alpha)}{\partial w} = 0 \;\Rightarrow w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i \tag 7 ∂w∂L(w,b,α)​=0⇒w=i=1∑m​αi​yi​xi​(7)

∂ L ( w , b , α ) ∂ b = 0    ⇒ ∑ i = 1 m α i y i = 0 (8) \frac{\partial L(w,b,\alpha)}{\partial b} = 0 \;\Rightarrow \sum\limits_{i=1}^{m}\alpha_iy_i = 0 \tag 8 ∂b∂L(w,b,α)​=0⇒i=1∑m​αi​yi​=0(8)

上面的式子已经得到了w和α的关系,只要我们后面求得使得对偶函数极大化的α,记得求得w。将式子(7),(8)代入(5)得到:
ψ ( α ) = 1 2 ∣ ∣ w ∣ ∣ 2 − ∑ i = 1 m α i [ y i ( w T x i + b ) − 1 ] = 1 2 w T w − ∑ i = 1 m α i y i w T x i − ∑ i = 1 m α i y i b + ∑ i = 1 m α i = 1 2 w T ∑ i = 1 m α i y i x i − ∑ i = 1 m α i y i w T x i − ∑ i = 1 m α i y i b + ∑ i = 1 m α i = 1 2 w T ∑ i = 1 m α i y i x i − w T ∑ i = 1 m α i y i x i − ∑ i = 1 m α i y i b + ∑ i = 1 m α i = − 1 2 w T ∑ i = 1 m α i y i x i − ∑ i = 1 m α i y i b + ∑ i = 1 m α i = − 1 2 w T ∑ i = 1 m α i y i x i − b ∑ i = 1 m α i y i + ∑ i = 1 m α i = − 1 2 ( ∑ i = 1 m α i y i x i ) T ( ∑ i = 1 m α i y i x i ) − b ∑ i = 1 m α i y i + ∑ i = 1 m α i = − 1 2 ∑ i = 1 m α i y i x i T ∑ i = 1 m α i y i x i − b ∑ i = 1 m α i y i + ∑ i = 1 m α i = − 1 2 ∑ i = 1 m α i y i x i T ∑ i = 1 m α i y i x i + ∑ i = 1 m α i = − 1 2 ∑ i = 1 , j = 1 m α i y i x i T α j y j x j + ∑ i = 1 m α i = ∑ i = 1 m α i − 1 2 ∑ i = 1 , j = 1 m α i α j y i y j x i T x j \begin{aligned} \psi(\alpha) & = \frac{1}{2}||w||^2 - \sum\limits_{i=1}^{m}\alpha_i[y_i(w^Tx_i + b) - 1] \\& = \frac{1}{2}w^Tw-\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i -\sum\limits_{i=1}^{m}\alpha_iy_iw^Tx_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - \sum\limits_{i=1}^{m}\alpha_iy_ib + \sum\limits_{i=1}^{m}\alpha_i \\& = - \frac{1}{2}w^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}(\sum\limits_{i=1}^{m}\alpha_iy_ix_i)^T(\sum\limits_{i=1}^{m}\alpha_iy_ix_i) - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i - b\sum\limits_{i=1}^{m}\alpha_iy_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1}^{m}\alpha_iy_ix_i^T\sum\limits_{i=1}^{m}\alpha_iy_ix_i + \sum\limits_{i=1}^{m}\alpha_i \\& = -\frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_iy_ix_i^T\alpha_jy_jx_j + \sum\limits_{i=1}^{m}\alpha_i \\& = \sum\limits_{i=1}^{m}\alpha_i - \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j \end{aligned} ψ(α)​=21​∣∣w∣∣2−i=1∑m​αi​[yi​(wTxi​+b)−1]=21​wTw−i=1∑m​αi​yi​wTxi​−i=1∑m​αi​yi​b+i=1∑m​αi​=21​wTi=1∑m​αi​yi​xi​−i=1∑m​αi​yi​wTxi​−i=1∑m​αi​yi​b+i=1∑m​αi​=21​wTi=1∑m​αi​yi​xi​−wTi=1∑m​αi​yi​xi​−i=1∑m​αi​yi​b+i=1∑m​αi​=−21​wTi=1∑m​αi​yi​xi​−i=1∑m​αi​yi​b+i=1∑m​αi​=−21​wTi=1∑m​αi​yi​xi​−bi=1∑m​αi​yi​+i=1∑m​αi​=−21​(i=1∑m​αi​yi​xi​)T(i=1∑m​αi​yi​xi​)−bi=1∑m​αi​yi​+i=1∑m​αi​=−21​i=1∑m​αi​yi​xiT​i=1∑m​αi​yi​xi​−bi=1∑m​αi​yi​+i=1∑m​αi​=−21​i=1∑m​αi​yi​xiT​i=1∑m​αi​yi​xi​+i=1∑m​αi​=−21​i=1,j=1∑m​αi​yi​xiT​αj​yj​xj​+i=1∑m​αi​=i=1∑m​αi​−21​i=1,j=1∑m​αi​αj​yi​yj​xiT​xj​​
即:
ψ ( α ) = min ⁡ w , b L ( w , b , α ) = ∑ i = 1 m α i − 1 2 ∑ i = 1 , j = 1 m α i α j y i y j x i T x j \psi(\alpha) = \min\limits_{w,b}L(w,b,\alpha)=\sum\limits_{i=1}^{m}\alpha_i - \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j ψ(α)=w,bmin​L(w,b,α)=i=1∑m​αi​−21​i=1,j=1∑m​αi​αj​yi​yj​xiT​xj​
接下来,对 ψ ( α ) = min ⁡ w , b L ( w , b , α ) \psi(\alpha) = \min\limits_{w,b}L(w,b,\alpha) ψ(α)=w,bmin​L(w,b,α)求极大:
max ⁡ α ψ ( α ) = max ⁡ α ∑ i = 1 m α i − 1 2 ∑ i = 1 , j = 1 m α i α j y i y j x i T x j (9) \max\limits_{\alpha}\psi(\alpha) = \max\limits_{\alpha}\sum\limits_{i=1}^{m}\alpha_i - \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j \tag 9 αmax​ψ(α)=αmax​i=1∑m​αi​−21​i=1,j=1∑m​αi​αj​yi​yj​xiT​xj​(9)

s . t . ∑ i = 1 m α i y i = 0 α i ≥ 0 , i = 1 , 2 , . . . , N s.t. \quad \sum\limits_{i=1}^{m}\alpha_iy_i =0\\ \alpha_i \geq 0, i=1,2,...,N s.t.i=1∑m​αi​yi​=0αi​≥0,i=1,2,...,N

将式子(9)的目标函数转换成求极小,得到等级的对偶最优化问题:
min ⁡ α 1 2 ∑ i = 1 , j = 1 m α i α j y i y j x i T x j − ∑ i = 1 m α i (10) \min\limits_{\alpha} \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j -\sum\limits_{i=1}^{m} \alpha_i \tag{10} αmin​21​i=1,j=1∑m​αi​αj​yi​yj​xiT​xj​−i=1∑m​αi​(10)

s . t . ∑ i = 1 m α i y i = 0 α i ≥ 0 , i = 1 , 2 , . . . , m s.t. \quad \sum\limits_{i=1}^{m}\alpha_iy_i =0 \\ \alpha_i \geq 0, i=1,2,...,m s.t.i=1∑m​αi​yi​=0αi​≥0,i=1,2,...,m

只要我们可以求出上式极小化时对应的α向量就可以求出w和b了。具体怎么极小化上式得到对应的α,一般需要用到SMO算法,这个算法比较复杂,我们后面会专门来讲。在这里,我们假设通过SMO算法,我们得到了对应的α的值 α ∗ α^∗ α∗,那么根据 w = ∑ i = 1 m α i y i x i w = \sum\limits_{i=1}^{m}\alpha_iy_ix_i w=i=1∑m​αi​yi​xi​可以得到对应的 w ∗ w^* w∗的值:
w ∗ = ∑ i = 1 m α i ∗ y i x i w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i w∗=i=1∑m​αi∗​yi​xi​
正如上文讨论的,只有支持向量对决策平面有影响,其他样本则没有。选择 α ∗ \alpha^* α∗的任意一个正分量 α j ∗ > 0 \alpha^*_j \gt 0 αj∗​>0,按下面的式子得到 b ∗ b^ * b∗:
b ∗ = y j − ( w ∗ ) T x j = y j − ∑ i = 1 m α i ∗ y i x i T x j b^* = y_j - (w^*)^Tx_j = y_j -\sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i^Tx_j b∗=yj​−(w∗)Txj​=yj​−i=1∑m​αi∗​yi​xiT​xj​
根据上面KKT条件中 α ∗ ( y i ( w ∗ T x i + b ∗ ) − 1 ) = 0 \alpha^*(y_i(w^{*T}x_i+b^*)-1) = 0 α∗(yi​(w∗Txi​+b∗)−1)=0这个对偶互补条件,可以知道当 α ∗ > 0 \alpha^*>0 α∗>0则有 ( y i ( w ∗ T x i + b ∗ ) − 1 ) = 0 (y_i(w^{*T}x_i+b^*)-1) = 0 (yi​(w∗Txi​+b∗)−1)=0,此时的样本 x i x_i xi​对应的点到划分超平面的距离为1,也就是所谓的支持向量。因此,任意 α j ∗ > 0 \alpha^*_j \gt 0 αj∗​>0对应的样本 x j x_j xj​为支持向量。

假设我们有S个支持向量,对于任意支持向量 ( x s , y s ) (x_s, y_s) (xs​,ys​)可以解得 b ∗ b^* b∗。但是由于数据集T严格线性可分,所以划分超平面是唯一的,于是通过任意支持向量 ( x s , y s ) (x_s, y_s) (xs​,ys​)得到的 b ∗ b^* b∗都是一样的。

最终得到的划分超平面为:
w ∗ T x + b ∗ = 0 w^{*T}x+b^* = 0 w∗Tx+b∗=0
最终的分类决策函数为:
f ( x ) = s i g n ( w ∗ T x + b ∗ ) f(x) = sign(w^{*T} x + b^{*}) f(x)=sign(w∗Tx+b∗)

线性可分SVM的算法流程

输入:线性可分的m个样本 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) , {(x_1,y_1), (x_2,y_2), ..., (x_m,y_m),} (x1​,y1​),(x2​,y2​),...,(xm​,ym​),

输出:分离超平面的参数 w ∗ w^{*} w∗和 b ∗ b^{*} b∗和分类决策函数。

(1) 构造优化问题:
min ⁡ α 1 2 ∑ i = 1 , j = 1 m α i α j y i y j x i T x j − ∑ i = 1 m α i \min\limits_{\alpha} \frac{1}{2}\sum\limits_{i=1,j=1}^{m}\alpha_i\alpha_jy_iy_jx_i^Tx_j -\sum\limits_{i=1}^{m} \alpha_i αmin​21​i=1,j=1∑m​αi​αj​yi​yj​xiT​xj​−i=1∑m​αi​

s . t . ∑ i = 1 m α i y i = 0 α i ≥ 0 , i = 1 , 2 , . . . , m s.t. \quad \sum\limits_{i=1}^{m}\alpha_iy_i =0 \\ \alpha_i \geq 0, i=1,2,...,m s.t.i=1∑m​αi​yi​=0αi​≥0,i=1,2,...,m

(2) 采用SMO算法求出使得上式极小化的 α ∗ \alpha^* α∗

(3) 计算 w ∗ = ∑ i = 1 m α i ∗ y i x i w^{*} = \sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i w∗=i=1∑m​αi∗​yi​xi​

(4) 找到某个满足 α j > 0 \alpha_j > 0 αj​>0对应的支持向量 ( x j , y j ) (x_j,y_j) (xj​,yj​),计算:
b ∗ = y j − ( w ∗ ) T x j = y j − ∑ i = 1 m α i ∗ y i x i T x j b^* = y_j - (w^*)^Tx_j = y_j -\sum\limits_{i=1}^{m}\alpha_i^{*}y_ix_i^Tx_j b∗=yj​−(w∗)Txj​=yj​−i=1∑m​αi∗​yi​xiT​xj​
(5) 得到划分超平面与决策函数:
w ∗ T x + b ∗ = 0 f ( x ) = s i g n ( w ∗ T x + b ∗ ) w^{*T}x+b^* = 0 \\ f(x) = sign(w^{*T} x + b^{*}) w∗Tx+b∗=0f(x)=sign(w∗Tx+b∗)

局限性

本文介绍的是基于硬间隔最大化的SVM算法,对于线性不可分的数据,由于异常点的存在,无法找到划分超平面,本文的算法无法使用。下一篇介绍的软间隔最大化SVM算法可以解决这里问题。

参考文章:

《统计学习方法 第二版》

支持向量机原理(一) 线性支持向量机

机器学习:完全线性可分/近似线性可分/非线性可分的支持向量机 SVM,Support Vector Machine,支持向量机 阅读详情

相关推荐

SVM解释:四、线性不可分的情况

之前的博客介绍了在数据为线性可分的情况下,如何用SVM对数据集训练,从而得到一个线性分类器,也就是超平面WX+b=0WX+b=0WX + b = 0. 但是我已经强调过多次,线性可分的情况有相当的局限,所以SVM的终极目标还是要解决数据线性不可分的情况。解决这种线性不可分的情况基本的思路有两种: 加入松弛变量和惩罚因子,找到“最好”超平面,这里的“最好”可以理解为尽可能地将数据正确分类; 使用...

guoziqing506的博客 2万+

支持向量机——线性可分支持向量机

GitHub 简书 优快云 1 线性可分支持向量机 支持向量机(Support vector machines, SVM)是一种二分类模型,它的基本模型是定义在特征空间上的间隔最大的线性分类器,他的学习策略就是间隔最大化,同时该方法可以形式化为一个求解图二次规划。 支持向量机可分为三类: 线性可分支持向量机、硬间隔(hard-margin svm) 线性支持向量机、软间隔(soft-margi...

u014630987的博客 4786

SVM-支持向量机学习(1):线性可分SVM的基本型

1. foreword先看的是李航老师的书第7章,比较传统按照以下三节展开: 线性可分SVM 线性SVM 非线性SVM SMO算法 李航老师讲东西向来不拖泥带水,但本节也几乎用了40页的篇幅,足见涉及内容之多。7月底硬着头皮啃了下来,边看边在笔记上摘抄标注,花了2天时间对SVM有了基本认识。一个月过去了,如今重新整理为博客,再看轻松许多,并不断对比西瓜书的内容,启望达到融会贯通。西瓜书此节明显节奏轻

鸟恋旧林的博客 8679

十,支持向量机

一.间隔与支持向量 最优超平面(直线): 对训练样本局部扰动的“容忍性”最好,即最具鲁棒性。 1.最优平面公式推导 最优超平面: WTXi+b=0 正类: WTXi+b≥+1,yi=+1 负类: WTXi+b≥-1,yi=-1 最小距离推导 γ=2W12∗W22=2∣∣W∣∣γ=\frac{2}{\sqrt{{W_1^2}*{W_2^2}}}=\frac{2}{||W||}γ=W12​∗W22​​2​=∣∣W∣∣2​ W1=(WTXi+b=−1)−(WTXi+b=0)W_1=(W^TX_i+b=-

tyh751734196的博客 746

例题讲解拉格朗日乘子法、线性可分支持向量机(SVM)的推导

支持向量机(Support Vector Machine, SVM)的简单推导及例题

zzzssszzzzsz的博客 5681

SVM支持向量机(一):线性可分支持向量机

一、简介 SVM是一种二分类模型 目的:寻找一个超平面对样本进行分割 分割原则:间隔最大化 问题求解方法:将模型转换为一个凸二次规划问题 由简至繁的模型包括: 1、当训练样本线性可分时,通过硬间隔最大化,学习一个线性可分支持向量机; 2、当训练样本近似线性可分时,通过软间隔最大化,学习一个线性支持向量机; 3、当训练样本线性不可分时,通过核技巧和软间隔最大化,学习一个非线性支持向量机; 二、线性可...

qq_32674829的博客 1432

线性可分支持向量机(SVM)详细解析 | 统计学习方法学习笔记 | 数据分析 | 机器学习

本文包括: 支持向量机简介 线性可分支持向量机模型的形式 函数间隔和几何间隔 间隔最大化问题(最大间隔法) 对偶算法 利用KKT求最优w和b 其它有关数据分析,机器学习的文章及社群 1.支持向量机简介: 支持向量机是一种二分类模型,与感知机类比,其相同之处在于它也是需要找到一个超平面对数据集进行分割,区别在于,感知机模型得到的超平面空间中可以有无穷个超平面,但支持向量机仅含有一个,这一个超平面与样本点的间隔是最大化的。 支持向量机学习方法包含三种模型,其一为线性可分支持向量机,要求训练集线

zxn1996csdn的博客 1364

【机器学习|学习笔记】详解支持向量机(Support Vector Machine,SVM)之带核的SVM为什么能分类非线性问题?以及RBF核一定是线性可分的吗?

【机器学习|学习笔记】详解支持向量机(Support Vector Machine,SVM)之带核的SVM为什么能分类非线性问题?以及RBF核一定是线性可分的吗?

2401_89898861的博客 1286

简单易学的机器学习算法——线性可分支持向量机

一、线性可分支持向量机的概念 二、线性可分支持向量机的原理

null的专栏 1万+

autoware 激光-相机联合标定

autoware进行激光-相机联合标定 ~~~ 刚开始进行激光-相机联合标定的时候,出现了不少问题,在此记录一下整体标定流程,以防忘记。在此,特别感谢佳明师弟,在录制数据集时提供的帮助。 ~~~ 0.系统配置: Ubuntu18.04系统 ROS Melodic opencv 3.2.0 vlp-16 一.安装autoware 这部分网上教程挺多的,但我在编译的过程中仍存在不少bug,唉~_~。 二.安装calibration_camera_lidar,从a...

nuo112的博客 1万+

工业异常检测评价指标(I-AUROC、PRO等)

模型评价指标:TPR、FPR、Recall、ROC、AUC、AUROC、IoU、PRO、AUPRO等

qq_1532145264的博客 7431

支持向量机(SVM)算法(线性可分,线性不可分,理论解释+仿真分析)

目录 最优超平面 线性SVM 非线性SVM 最优超平面 超平面的定义   超平面是二维直线,三维平面到nnn维欧式线性空间的一个推广,在nnn维线性空间中,所有的平面都可以用统一的方程进行表达,即:wTX+b=0w^TX+b=0wTX+b=0   其中,www是超平面的法向量,XXX是满足超平面方程的向量坐标,bbb是一个常数。首先解释超平面方程的形式,然后解释超平面方程的几何意义,最后介绍一些性质。   首先,对于直线y=kx+by=kx+by=kx+b,可以写成[k −1][xy]+b=0

qq_38023849的博客 5693

Windows11安装Ubuntu 20.04.3 LTS双系统(详细过程)

一、基础环境 听说BIOS模式的传统MBR模式和新式UEFI模式,会对安装双系统产生影响。Windows11应该都是UEFI吧,可以按win+r输入msinfo32回车确认查看BIOS模式,我的电脑是UEFI+双硬盘 Ubuntu安装准备 1、 官网下载Ubuntu 20.04.3 LTS镜像iso文件:https://ubuntu.com/download/desktop 2、 下载官网推荐的U盘启动制作工具rufus: https://rufus.ie/ 3、制作启动u盘 插入U盘, 运行 rufu

学习随笔 9万+

支持向量机 SVM | 线性可分:软间隔模型

软间隔模型:线性可分数据中存在异常点

ToBeCeratinToBeTall的博客 4108

关于Kswapd的理解(一)

关于Kswapd的理解(一) 之前跟踪了MemAvailable的计算方式,其中watermark的计算花了很多精力,在学习的过程中看到一些资料中说watermark是给swapd使用的,于是乎,研究一下看看咯 本部分主要记录两个方面: 对于kswapd这个东西,从初学者(我)的角度出发会考虑哪些内容? 跟踪kswapd 初始化结构部分; 1. KSwapd机制 上图是还没有跟踪kswapd code的时候,对自己提出的一些疑问和自身的理解,主要是如下内容: kswapd 机制用来做什么:内存不足时

And乔的博客 2714

手把手教你用Arduino Uno控制meArm机械臂(附完整代码+避坑指南)

本文提供了一份详尽的meArm机械臂控制指南,涵盖从Arduino Uno硬件连接到Servo库编程的完整流程。重点讲解了如何通过独立供电、软件限位和平滑运动函数实现稳定控制,并设计了串口指令协议与高级功能,帮助创客有效规避舵机抖动、电源不足等常见问题,让机械臂运行更流畅可靠。

gpt4scribbler的博客 540

SVM——线性可分支持向量机

一、概念 支持向量机是一种二类分类模型,它是定义在特征空间上的间隔最大的分类器,间隔最大使它有别于感知机并且是唯一的。支持向量机的学习策略就是间隔最大化,可以形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。 支持向量机学习方法包含线性可分支持向量机,线性支持向量机以及非线性支持向量机。当训练数据集线性可分的时候,通过硬间隔最大化,学习一个线性的分类器即线性可分支持向量机...

watermelon12138的博客 3071

2025 华为OD机试真题e卷 C语言 实现【竖直四子棋】

竖直四子棋的棋盘是竖立起来的,双方轮流选择棋盘的一列下子,棋子因重力落到棋盘底部或者其他棋子之上,当一列的棋子放满时,无法再在这列上下子。

MISAYAONE的博客 1417

支持向量机(SVM)——数据线性可分

关于机器学习算法的程序,在我的Github上,欢迎大家follow: Github地址:https://github.com/xuesongjaybluce   SVM在之前的很长一段时间内是性能最好的分类器,它有严密而优美的数学基础作为支撑。在各种机器学习算法中,它是最不易理解的算法之一,要真正掌握它的原理有一定的难度。在本文中,我将带领大家通过一张图来理清SVM推导过程的核心过程。 简...

c123_sensing的博客 1264

Python爬取公交线路信息及站点shp数据 文末附数据下载地址

三、现在已经获取到了各个线路名称、链接,以及所途径的上下行站点,那么接下来就应该对开始对第三页url进行信息采集,即本次爬虫的最终目的:爬取所有站点的GPS坐标数据。但坑就坑在,二环一号线属于环线,所以只有左侧有站点数据,而其他非环线车次的站点数据分有上下行,如果用正则匹配,则分不清楚到底哪些是上行站点哪些是下行站点。以前爬过百度地图,当时用的是API平台,加上网站比较规范,所以标签节点什么的都比较清晰,但这次由于特殊原因所选择的网站为公交网,废话不多说直接开始吧。checi=二环一号线。

J_Giser的博客 1316

【WRFDA输入数据】全球高空观测气象数据(LITTLE_R 格式数据)

【WRFDA输入数据】全球高空观测气象数据(LITTLE_R 格式数据)

WW、forever的博客 476

机器学习之支持向量机之线性可分型原理介绍及代码实现(SVM)

支持向量机(Sport Vector Machine,SVM)是经典的机器学习方法之一,其核心思想主要是找到一个超平面,使得它能够尽可能多地将两类数据点正确分开,同时使分开地两类数据点距离分类平面最远。 如图 ...

学习笔记 5218

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

《opencv实用探索·二十三》支持向量机SVM处理线性不可分数据

以二维平面为例,如果在这个二维平面中有两堆不同类型的样本,如果能找到一条线把这两种类型的样本分开至线的两侧,那么就称这个样本集是线性可分,反之就是线性不可分。本例中我们通过该函数给向量空间着色, 即将图像中的每个像素当作卡迪尔平面上的一点,每一点的着色取决于SVM对该点的分类类别:深绿色表示分类为1的点,深蓝色表示分类为2的点。这样,通过遍历整个图像,根据 SVM 模型的分类结果,将图像的不同区域标记为不同的颜色,从而可视化 SVM 模型对数据的分类效果,最后在画出训练数据和支持向量。

cs1395293598的博客 1450

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

线性可分和线性不可分-SVM支持向量机

线性可分和线性不可分-SVM支持向量机

枫的博客 1498

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

【ML】支持向量机SVM:线性可分与非线性可分、硬间隔与软间隔

支持向量机(support vector machine, SVM)是一种二分类模型。 线性可分支持向量机与硬间隔最大化 线性支持向量机与软间隔最大化 非线性支持向量机与核函数   给定训练数据集T={(x1,y1),(x2,y2),...,(xn,yn)}T=\{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\}T={(x1​,y1​),(x2​,y2​),...,(xn​...

Explore 1862
上一篇: 【统计学习方法】感知机笔记
下一篇: 软间隔最大化SVM
VariableX
博客等级 码龄7年 142粉丝 62原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值