前文回顾
四、SVM优化求解:SMO
1、序列最小优化算法 Sequential Minimal Optimization, SMO
支持向量机(SVM)的原始问题可以通过传统的凸二次规划方法获得全局最优解。然而,这种方法在训练数据集很大时,算法会变得很慢。
SMO算法由John Platt在1998年提出,是一种高效求解SVM对偶问题的方法。
对偶问题可以表示为:
max ( ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i T x j ) s.t. ∑ i = 1 N α i y i = 0 0 ≤ α i ≤ C , i = 1 , 2 , … , N \begin{align*} \max \left( \sum_{i=1}^{N} \alpha_i - \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_i \alpha_j y_i y_j x_i^T x_j \right) \\ \text{s.t. } \sum_{i=1}^{N} \alpha_i y_i = 0 \\ 0 \leq \alpha_i \leq C, \quad i = 1, 2, \ldots, N \end{align*} max(i=1∑Nαi−21i=1∑Nj=1∑NαiαjyiyjxiTxj)s.t. i=1∑Nαiyi=00≤αi≤C,i=1,2,…,N
2、SMO 动机:坐标上升
无约束最优化问题可以表示为:
W ( α 1 , α 2 , … , α N ) = ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i T x j W(\alpha_1, \alpha_2, \ldots, \alpha_N) = \sum_{i=1}^{N} \alpha_i - \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_i \alpha_j y_i y_j x_i^T x_j W(α1,α2,…,αN)=i=1∑Nαi−21i=1∑Nj=1∑NαiαjyiyjxiTxj
坐标上升优化算法(Coordinate Ascent Optimization Algorithm):
Loop until convergence for i = 1 , 2 , … , N α i = arg max α ~ i W ( α 1 , α 2 , α 3 , … , α i − 1 , α ~ i , α i + 1 , … , α N ) \begin{align*} \text{Loop until convergence} \\ \quad \text{for } i = 1, 2, \ldots, N \\ \quad \quad \alpha_i = \arg\max_{\tilde{\alpha}_i} W(\alpha_1, \alpha_2, \alpha_3, \ldots, \alpha_{i-1}, \tilde{\alpha}_i, \alpha_{i+1}, \ldots, \alpha_N) \end{align*} Loop until convergencefor i=1,2,…,Nαi=argα~imaxW(α1,α2,α3,…,αi−1,α~i,αi+1,…,αN)
每次只关于一个参数 α i \alpha_i αi 优化目标函数。坐标梯度上升法:每一步沿着坐标轴方向移动。
3、SVM 坐标上升求解
对偶问题:
max ( ∑ i = 1 N α i − 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j x i T x j ) s.t. ∑ i = 1 N α i y i = 0 0 ≤ α i ≤ C , i = 1 , 2 , … , N \begin{align*} \max \left( \sum_{i=1}^{N} \alpha_i - \frac{1}{2} \sum_{i=1}^{N} \sum_{j=1}^{N} \alpha_i \alpha_j y_i y_j x_i^T x_j \right) \\ \text{s.t. } \sum_{i=1}^{N} \alpha_i y_i = 0 \\ 0 \leq \alpha_i \leq C, \quad i = 1, 2, \ldots, N \end{align*} max(i=1∑Nαi−21i=1∑Nj=1∑NαiαjyiyjxiTxj)s.t. i=1∑Nαiyi=00≤αi≤C,i=1,2,…,N
每次固定 N − 1 N-1 N−1 个变量 α 2 , … , α N \alpha_2, \ldots, \alpha_N α2,…,αN,关于变量 α 1 \alpha_1 α1 优化目标函数。
每次更新两个变量:
∑ i = 1 N α i y i = 0 \sum_{i=1}^{N} \alpha_i y_i = 0 i=1∑Nαiyi=0
4、SMO:更新一对变量
为了保证满足约束条件,每次更新两个变量。这就是SMO算法的核心思想。
重复直到收敛:
Repeat until convergence : ( 1 ) 选择要更新的一对变量 α i 和 α j ( 启发式选择:选择使目标函数值改变最大的变量 ) ( 2 ) 关于变量 α i 和 α j 优化目标函数 W ( α ) \begin{align*} \text{Repeat until convergence :} \\ \quad (1) \text{选择要更新的一对变量 } \alpha_i \text{ 和 } \alpha_j \\ \quad \quad (\text{启发式选择:选择使目标函数值改变最大的变量}) \\ \quad (2) \text{关于变量 } \alpha_i \text{ 和 } \alpha_j \text{ 优化目标函数 } W(\alpha) \end{align*} Repeat until convergence :(1)选择要更新的一对变量 αi 和 αj(启发式选择:选择使目标函数值改变最大的变量)(2)关于变量 αi 和 αj 优化目标函数 W(α)
5、SMO: 关于两个变量的优化方法
假设 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2 满足约束条件,固定 α 3 , … , α N \alpha_3, \ldots, \alpha_N α3,…,αN,关于变量 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2 优化目标函数 W ( α 1 , α 2 ) W(\alpha_1, \alpha_2) W(α1,α2)。
目标函数 W ( α 1 , α 2 ) W(\alpha_1, \alpha_2) W(α1,α2) 可以表示为:
W ( α 1 , α 2 ) = 1 2 α 1 2 y 1 2 x 1 T x 1 + 1 2 α 2 2 y 2 2 x 2 T x 2 + α 1 α 2 y 1 y 2 x 1 T x 2 + α 1 y 1 ∑ i = 3 N α i y i x 1 T x i + α 2 y 2 ∑ i = 3 N α i y i x 2 T x i W(\alpha_1, \alpha_2) = \frac{1}{2} \alpha_1^2 y_1^2 x_1^T x_1 + \frac{1}{2} \alpha_2^2 y_2^2 x_2^T x_2 + \alpha_1 \alpha_2 y_1 y_2 x_1^T x_2 + \alpha_1 y_1 \sum_{i=3}^{N} \alpha_i y_i x_1^T x_i + \alpha_2 y_2 \sum_{i=3}^{N} \alpha_i y_i x_2^T x_i W(α1,α2)=21α12y12x1Tx1+21α22y22x2Tx2+α1α2y1y2x1Tx2+α1y1i=3∑Nαiyix1Txi+α2y2i=3∑Nαiyix2Txi
令 K i j = K ( x i , x j ) = x i T x j K_{ij} = K(x_i, x_j) = x_i^T x_j Kij=K(xi,xj)=xiTxj,则有:
W ( α 1 ′ , α 2 ) = 1 2 α 1 2 y 1 2 K 11 + 1 2 α 2 2 y 2 2 K 22 + α 1 α 2 y 1 y 2 K 12 + α 1 y 1 v 1 + α 2 y 2 v 2 − α 1 − α 2 W(\alpha_1', \alpha_2) = \frac{1}{2} \alpha_1^2 y_1^2 K_{11} + \frac{1}{2} \alpha_2^2 y_2^2 K_{22} + \alpha_1 \alpha_2 y_1 y_2 K_{12} + \alpha_1 y_1 v_1 + \alpha_2 y_2 v_2 - \alpha_1 - \alpha_2 W(α1′,α2)=21α12y12K11+21α22y22K22+α1α2y1y2K12+α1y1v1+α2y2v2−α1−α2
假设 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2 满足约束条件,固定 α 3 , … , α N \alpha_3, \ldots, \alpha_N α3,…,αN,关于变量 α 1 \alpha_1 α1 和 α 2 \alpha_2 α2 优化目标函数 W ( α 1 , α 2 ) W(\alpha_1, \alpha_2) W(α1,α2)。
根据约束条件:
∑ i = 1 N α i y i = 0 \sum_{i=1}^{N} \alpha_i y_i = 0 i=1∑Nαiyi=0
可以得到:
α 1 y 1 + α 2 y 2 = − ∑ i = 3 N α i y i = ζ (常数) \alpha_1 y_1 + \alpha_2 y_2 = - \sum_{i=3}^{N} \alpha_i y_i = \zeta \quad \text{(常数)} α1y1+α2y2=−i=3∑Nαiyi=ζ(常数)
因此:
α 1 = ζ y 1 − α 2 y 1 y 2 (两边同乘以 y 1 ,且 y 1 2 = 1 ) \alpha_1 = \zeta y_1 - \alpha_2 y_1 y_2 \quad \text{(两边同乘以 } y_1 \text{,且 } y_1^2 = 1\text{)} α1=ζy1−α2y1y2(两边同乘以 y1,且 y12=1)
有界条件:
L ≤ α 2 ≤ H L \leq \alpha_2 \leq H L≤α2≤H
6、SMO: 关于一个变量优化
将 α 1 \alpha_1 α1 写成关于 α 2 \alpha_2 α2 的等式:
α 1 = ζ y 1 − α 2 y 1 y 2 \alpha_1 = \zeta y_1 - \alpha_2 y_1 y_2 α1=ζy1−α2y1y2
目标函数 W ( α ) W(\alpha) W(α):
W ( α 1 , α 2 , … , α N ) = W ( ζ y 1 − α 2 y 1 y 2 , α 2 ) W(\alpha_1, \alpha_2, \ldots, \alpha_N) = W(\zeta y_1 - \alpha_2 y_1 y_2, \alpha_2) W(α1,α2,…,αN)=W(ζy1−α2y1y2,α2)
关于变量 α 2 \alpha_2 α2 的二次函数:
W ( α 2 ) = 1 2 ( ζ − α 2 y 2 ) 2 K 11 + 1 2 α 2 2 K 22 + y 2 ( ζ − α 2 y 2 ) α 2 K 12 + ( ζ − α 2 y 2 ) v 1 + α 2 y 2 v 2 − ζ y 1 + α 2 y 1 y 2 − α 2 W(\alpha_2) = \frac{1}{2} (\zeta - \alpha_2 y_2)^2 K_{11} + \frac{1}{2} \alpha_2^2 K_{22} + y_2 (\zeta - \alpha_2 y_2) \alpha_2 K_{12} + (\zeta - \alpha_2 y_2) v_1 + \alpha_2 y_2 v_2 - \zeta y_1 + \alpha_2 y_1 y_2 - \alpha_2 W(α2)=21(ζ−α2y2)2K11+21α22K22+y2(ζ−α2y2)α2K12+(ζ−α2y2)v1+α2y2v2−ζy1+α2y1y2−α2
不考虑 α 2 \alpha_2 α2 的取值范围,可求全局最优解:
α 2 new = α 2 old + y 2 ( E 1 − E 2 ) K 11 + K 22 − 2 K 12 \alpha_2^{\text{new}} = \alpha_2^{\text{old}} + \frac{y_2 (E_1 - E_2)}{K_{11} + K_{22} - 2 K_{12}} α2new=α2old+K11+K22−2K12y2(E1−E2)
7、求解 α 2 \alpha_2 α2
目标函数 W ( α 1 , α 2 ) W(\alpha_1, \alpha_2) W(α1,α2):
W ( α 1 , α 2 ) = 1 2 K 11 α 1 2 + 1 2 K 22 α 2 2 + α 1 α 2 y 1 y 2 K 12 + α 1 y 1 v 1 + α 2 y 2 v 2 − α 1 − α 2 + 常数 W(\alpha_1, \alpha_2) = \frac{1}{2} K_{11} \alpha_1^2 + \frac{1}{2} K_{22} \alpha_2^2 + \alpha_1 \alpha_2 y_1 y_2 K_{12} + \alpha_1 y_1 v_1 + \alpha_2 y_2 v_2 - \alpha_1 - \alpha_2 + \text{常数} W(α1,α2)=21K11α12+21K22α22+α1α2y1y2K12+α1y1v1+α2y2v2−α1−α2+常数
约束条件:
α 1 y 1 + α 2 y 2 = − ∑ i = 3 N α i y i = ζ , 0 ≤ α i ≤ C , i = 1 , 2 \alpha_1 y_1 + \alpha_2 y_2 = - \sum_{i=3}^{N} \alpha_i y_i = \zeta, \quad 0 \leq \alpha_i \leq C, i = 1, 2 α1y1+α2y2=−i=3∑Nαiyi=ζ,0≤αi≤C,i=1,2
其中:
v 1 = ∑ i = 3 N α i y i K 1 i , v 2 = ∑ i = 3 N α i y i K 2 i , K i j = K ( x i , x j ) v_1 = \sum_{i=3}^{N} \alpha_i y_i K_{1i}, \quad v_2 = \sum_{i=3}^{N} \alpha_i y_i K_{2i}, \quad K_{ij} = K(x_i, x_j) v1=i=3∑NαiyiK1i,v2=i=3∑NαiyiK2i,Kij=K(xi,xj)
由 α 1 y 1 + α 2 y 2 = − ∑ i = 3 N α i y i = ζ \alpha_1 y_1 + \alpha_2 y_2 = - \sum_{i=3}^{N} \alpha_i y_i = \zeta α1y1+α2y2=−∑i=3Nαiyi=ζ 得, α 1 = ζ y 1 − α 2 y 1 y 2 \alpha_1 = \zeta y_1 - \alpha_2 y_1 y_2 α1=ζy1−α2y1y2
目标函数 W ( α 2 ) W(\alpha_2) W(α2):
W ( α 2 ) = 1 2 ( ζ − α 2 y 2 ) 2 K 11 + 1 2 α 2 2 K 22 + y 2 ( ζ − α 2 y 2 ) α 2 K 12 + ( ζ − α 2 y 2 ) v 1 + α 2 y 2 v 2 − ζ y 1 + α 2 y 1 y 2 − α 2 + 常数 W(\alpha_2) = \frac{1}{2} (\zeta - \alpha_2 y_2)^2 K_{11} + \frac{1}{2} \alpha_2^2 K_{22} + y_2 (\zeta - \alpha_2 y_2) \alpha_2 K_{12} + (\zeta - \alpha_2 y_2) v_1 + \alpha_2 y_2 v_2 - \zeta y_1 + \alpha_2 y_1 y_2 - \alpha_2 + \text{常数} W(α2)=21(ζ−α2y2)2K11+21α22K22+y2(ζ−α2y2)α2K12+(ζ−α2y2)v1+α2y2v2−ζy1+α2y1y2−α2+常数
对 α 2 \alpha_2 α2 求导:
∂ W ( α 2 ) ∂ α 2 = ( K 11 + K 22 − 2 K 12 ) α 2 − y 2 ( ζ ( K 11 − K 12 ) + v 1 − v 2 − y 1 + y 2 ) = 0 \frac{\partial W(\alpha_2)}{\partial \alpha_2} = (K_{11} + K_{22} - 2 K_{12}) \alpha_2 - y_2 (\zeta (K_{11} - K_{12}) + v_1 - v_2 - y_1 + y_2) = 0 ∂α2∂W(α2)=(K11+K22−2K12)α2−y2(ζ(K11−K12)+v1−v2−y1+y2)=0
求解 α 2 \alpha_2 α2:
α 2 new = α 2 old + y 2 ( E 1 − E 2 ) K 11 + K 22 − 2 K 12 \alpha_2^{\text{new}} = \alpha_2^{\text{old}} + \frac{y_2 (E_1 - E_2)}{K_{11} + K_{22} - 2 K_{12}} α2new=α2old+K11+K22−2K12y2(E1−E2)
SMO高效:更新 α i \alpha_i αi 和 α j \alpha_j αj 的方法计算高效!
8、SMO: 关于一个变量优化
考虑约束条件:
α 2 new = { H α 2 new, unclipped > H α 2 new, unclipped L ≤ α 2 new, unclipped ≤ H L α 2 new, unclipped < L \alpha_2^{\text{new}} = \begin{cases} H & \alpha_2^{\text{new, unclipped}} > H \\ \alpha_2^{\text{new, unclipped}} & L \leq \alpha_2^{\text{new, unclipped}} \leq H \\ L & \alpha_2^{\text{new, unclipped}} < L \end{cases} α2new=⎩ ⎨ ⎧Hα2new, unclippedLα2new, unclipped>HL≤α2new, unclipped≤Hα2new, unclipped<L
L = max ( 0 , α 2 old − α 1 old ) L = \max(0, \alpha_2^{\text{old}} - \alpha_1^{\text{old}}) L=max(0,α2old−α1old)
H = min ( C , C + α 2 old − α 1 old ) H = \min(C, C + \alpha_2^{\text{old}} - \alpha_1^{\text{old}}) H=min(C,C+α2old−α1old)
图中展示了不同的 α 1 \alpha_1 α1和 α 2 \alpha_2 α2的取值范围,以及对应的约束条件。 α 1 \alpha_1 α1和 α 2 \alpha_2 α2的取值受到 C C C(惩罚参数)和 ζ \zeta ζ(阈值)的限制。
9、SMO: 两个变量的最优解
得到 α 2 new \alpha_2^{\text{new}} α2new后,根据 α 1 = ζ y 1 − α 2 y 1 y 2 \alpha_1 = \zeta y_1 - \alpha_2 y_1 y_2 α1=ζy1−α2y1y2可得:
α 1 old y 1 + α 2 old y 2 = α 1 new y 1 + α 2 new y 2 \alpha_1^{\text{old}} y_1 + \alpha_2^{\text{old}} y_2 = \alpha_1^{\text{new}} y_1 + \alpha_2^{\text{new}} y_2 α1oldy1+α2oldy2=α1newy1+α2newy2
α 1 new = α 1 old + y 1 y 2 ( α 2 old − α 2 new ) \alpha_1^{\text{new}} = \alpha_1^{\text{old}} + y_1 y_2 (\alpha_2^{\text{old}} - \alpha_2^{\text{new}}) α1new=α1old+y1y2(α2old−α2new)
这里展示了如何通过已知的 α 2 new \alpha_2^{\text{new}} α2new来计算 α 1 new \alpha_1^{\text{new}} α1new。
10、SMO: 第一个变量的选择
主要思想:从训练样本中选择违背KKT条件的样本,进而确定 α i \alpha_i αi。
KKT条件:
{ α i = 0 ⇒ y i ( w T x i + b ) ≥ 1 0 < α i < C ⇒ y i ( w T x i + b ) = 1 α i = C ⇒ y i ( w T x i + b ) ≤ 1 \begin{cases} \alpha_i = 0 & \Rightarrow y_i(w^T x_i + b) \geq 1 \\ 0 < \alpha_i < C & \Rightarrow y_i(w^T x_i + b) = 1 \\ \alpha_i = C & \Rightarrow y_i(w^T x_i + b) \leq 1 \end{cases} ⎩ ⎨ ⎧αi=00<αi<Cαi=C⇒yi(wTxi+b)≥1⇒yi(wTxi+b)=1⇒yi(wTxi+b)≤1
首先选择违反 0 < α i < C ⇒ y i ( w T x i + b ) = 1 0 < \alpha_i < C \Rightarrow y_i(w^T x_i + b) = 1 0<αi<C⇒yi(wTxi+b)=1的点(决策边界上的支持向量)。
如果上述支持向量都满足KKT条件,检查其他所有训练样本。
11、SMO: 第二个变量的选择
选 α 2 \alpha_2 α2的标准?
α 2 new, unclipped = α 2 old + y 2 ( E 1 − E 2 ) η \alpha_2^{\text{new, unclipped}} = \alpha_2^{\text{old}} + \frac{y_2 (E_1 - E_2)}{\eta} α2new, unclipped=α2old+ηy2(E1−E2)
其中 η = K 11 + K 22 − 2 K 12 \eta = K_{11} + K_{22} - 2K_{12} η=K11+K22−2K12。
选择使 ∣ E 1 − E 2 ∣ |E_1 - E_2| ∣E1−E2∣最大的 α 2 \alpha_2 α2。
α 1 \alpha_1 α1固定, E 1 E_1 E1固定。
- E 1 > 0 ⇒ E_1 > 0 \Rightarrow E1>0⇒ 选最小的 E i E_i Ei作为 E 2 E_2 E2
- E 1 < 0 ⇒ E_1 < 0 \Rightarrow E1<0⇒ 选最大的 E i E_i Ei作为 E 2 E_2 E2
E i E_i Ei很关键,怎么样使得算法高效?保存所有的 E i E_i Ei。
12、SMO: b b b及对偶值 E i E_i Ei
更新完变量后,更新 b b b:
- 如果 α 1 new > 0 \alpha_1^{\text{new}} > 0 α1new>0,根据KKT条件: y 1 f ( x 1 ) = y 1 ( ∑ i = 1 N α i y i K ( x i , x 1 ) + b ) = 1 y_1 f(x_1) = y_1 \left( \sum_{i=1}^{N} \alpha_i y_i K(x_i, x_1) + b \right) = 1 y1f(x1)=y1(∑i=1NαiyiK(xi,x1)+b)=1
b 1 new = y 1 − ∑ i = 3 N α i y i K i 1 − α 1 new y 1 K 11 − α 2 new y 2 K 21 b_1^{\text{new}} = y_1 - \sum_{i=3}^{N} \alpha_i y_i K_{i1} - \alpha_1^{\text{new}} y_1 K_{11} - \alpha_2^{\text{new}} y_2 K_{21} b1new=y1−i=3∑NαiyiKi1−α1newy1K11−α2newy2K21
引入: E 1 = f ( x 1 ) − y 1 = ∑ i = 3 N α i y i K i 1 + α 1 old y 1 K 11 + α 2 old y 2 K 21 + b old E_1 = f(x_1) - y_1 = \sum_{i=3}^{N} \alpha_i y_i K_{i1} + \alpha_1^{\text{old}} y_1 K_{11} + \alpha_2^{\text{old}} y_2 K_{21} + b^{\text{old}} E1=f(x1)−y1=∑i=3NαiyiKi1+α1oldy1K11+α2oldy2K21+bold
得到:
{ b 1 new = − E 1 − y 1 K 11 ( α 1 new − α 1 old ) − y 2 K 21 ( α 2 new − α 2 old ) + b old b 2 new = − E 2 − y 1 K 12 ( α 1 new − α 1 old ) − y 2 K 22 ( α 2 new − α 2 old ) + b old \begin{cases} b_1^{\text{new}} = -E_1 - y_1 K_{11} (\alpha_1^{\text{new}} - \alpha_1^{\text{old}}) - y_2 K_{21} (\alpha_2^{\text{new}} - \alpha_2^{\text{old}}) + b^{\text{old}} \\ b_2^{\text{new}} = -E_2 - y_1 K_{12} (\alpha_1^{\text{new}} - \alpha_1^{\text{old}}) - y_2 K_{22} (\alpha_2^{\text{new}} - \alpha_2^{\text{old}}) + b^{\text{old}} \end{cases} {b1new=−E1−y1K11(α1new−α1old)−y2K21(α2new−α2old)+boldb2new=−E2−y1K12(α1new−α1old)−y2K22(α2new−α2old)+bold
如果 0 < α 1 new < C 0 < \alpha_1^{\text{new}} < C 0<α1new<C, 0 < α 2 new < C 0 < \alpha_2^{\text{new}} < C 0<α2new<C,则 b new = b 1 new = b 2 new b^{\text{new}} = b_1^{\text{new}} = b_2^{\text{new}} bnew=b1new=b2new
如果 α 1 new \alpha_1^{\text{new}} α1new、 α 2 new \alpha_2^{\text{new}} α2new同时是0或 C C C, ∀ b ∈ [ min { b 1 new , b 2 new } , max { b 1 new , b 2 new } ] \forall b \in [\min\{b_1^{\text{new}}, b_2^{\text{new}}\}, \max\{b_1^{\text{new}}, b_2^{\text{new}}\}] ∀b∈[min{b1new,b2new},max{b1new,b2new}]都满足KKT条件,取
b new = b 1 new + b 2 new 2 b^{\text{new}} = \frac{b_1^{\text{new}} + b_2^{\text{new}}}{2} bnew=2b1new+b2new
更新 E i = ∑ j y j α j K ( x i , x j ) + b new − y i E_i = \sum_{j} y_j \alpha_j K(x_i, x_j) + b^{\text{new}} - y_i Ei=∑jyjαjK(xi,xj)+bnew−yi
13、SMO 算法
1. 初始化: α ( 0 ) = 0 \alpha^{(0)} = 0 α(0)=0,并计算偏移量 b ( 0 ) b^{(0)} b(0)
2. 初始化误差项 E i E_i Ei
3. 选择待优化的变量: α 1 \alpha_1 α1和 α 2 \alpha_2 α2求解优化问题的解
α 2 new, unclipped = α 2 old + y 2 ( E 1 − E 2 ) η \alpha_2^{\text{new, unclipped}} = \alpha_2^{\text{old}} + \frac{y_2 (E_1 - E_2)}{\eta} α2new, unclipped=α2old+ηy2(E1−E2)
α 2 new = { H α 2 new, unclipped > H α 2 new, unclipped L ≤ α 2 new, unclipped ≤ H L α 2 new, unclipped < L \alpha_2^{\text{new}} = \begin{cases} H & \alpha_2^{\text{new, unclipped}} > H \\ \alpha_2^{\text{new, unclipped}} & L \leq \alpha_2^{\text{new, unclipped}} \leq H \\ L & \alpha_2^{\text{new, unclipped}} < L \end{cases} α2new=⎩ ⎨ ⎧Hα2new, unclippedLα2new, unclipped>HL≤α2new, unclipped≤Hα2new, unclipped<L
η = K 11 + K 22 − 2 K 12 \eta = K_{11} + K_{22} - 2K_{12} η=K11+K22−2K12
α 1 ( t + 1 ) = α 1 ( t ) + y 1 y 2 ( α 2 ( t ) − α 2 ( t + 1 ) ) \alpha_1^{(t+1)} = \alpha_1^{(t)} + y_1 y_2 (\alpha_2^{(t)} - \alpha_2^{(t+1)}) α1(t+1)=α1(t)+y1y2(α2(t)−α2(t+1))
4. 更新 α \alpha α为 α ( t + 1 ) \alpha^{(t+1)} α(t+1),更新 E i E_i Ei,计算 b ( t + 1 ) b^{(t+1)} b(t+1)
5. 如果达到终止条件,则停止算法;否则 t = t + 1 t = t + 1 t=t+1, 转到第 ③ 步
终止条件:满足KKT条件或误差项均小于 ε \varepsilon ε
14、SMO 小结
- 启发式、迭代式算法。
- 解满足KKT条件时,得到最优解;否则选择两个变量来优化。
- 最优化问题转换为关于两个选定变量的QP问题,该问题通常有闭式解,计算高效,收敛快。
- 变量的选择方法:
- 第一个变量:违背KKT条件程度最大的变量
- 第二个变量:使目标函数值减小最快的变量
- 把一个最优化问题不换转化为若干个子问题,通过对子问题的求解得到原问题的解。
五、SVM回归(SVR)
1、ε不敏感损失函数
在之前的线性回归模型中,只有当真实值 y y y与预测值 y ^ \hat{y} y^完全相等时,我们才认为损失为0(L2损失、L1损失、Huber损失)。
在支持向量回归中,我们能容忍当真实值 y y y与预测值 y ^ \hat{y} y^有 ϵ \epsilon ϵ的偏差,即当 y y y与 y ^ \hat{y} y^之间的差异大于 ϵ \epsilon ϵ时才计算损失,称为 ϵ \epsilon ϵ不敏感损失( ϵ \epsilon ϵ insensitive loss)。
L ϵ ( y , y ^ ) = { 0 if ∣ y − y ^ ∣ ≤ ϵ ∣ y − y ^ ∣ − ϵ otherwise L_{\epsilon}(y, \hat{y}) = \begin{cases} 0 & \text{if } |y - \hat{y}| \leq \epsilon \\ |y - \hat{y}| - \epsilon & \text{otherwise} \end{cases} Lϵ(y,y^)={0∣y−y^∣−ϵif ∣y−y^∣≤ϵotherwise
- 不惩罚小的损失
- 误差大于 ϵ \epsilon ϵ时,对损失的影响是线性的,对噪声鲁棒
2、支持向量回归(Support Vector Regression,SVR)
假设回归函数为线性模型: f ( x ) = w T x + b f(x) = w^T x + b f(x)=wTx+b
同SVM分类类似,SVR的目标函数为
min w , b 1 2 ∥ w ∥ 2 2 \min_{w, b} \frac{1}{2} \|w\|_2^2 w,bmin21∥w∥22
s.t. ∣ y i − ( w T x i + b ) ∣ ≤ ϵ , i = 1 , 2 , . . . , N \text{s.t. } |y_i - (w^T x_i + b)| \leq \epsilon, \quad i = 1, 2, ..., N s.t. ∣yi−(wTxi+b)∣≤ϵ,i=1,2,...,N
3、松弛变量
类似SVM分类模型,加入松弛变量 ξ i ≥ 0 \xi_i \geq 0 ξi≥0,用于表示每个点在 ϵ \epsilon ϵ管道外的程度。
由于用的是绝对值,实际上是两个不等式,也就是说两边都需要松弛变量: ξ i + , ξ i − \xi_i^+, \xi_i^- ξi+,ξi−。
则SVR模型的目标函数变为
min w , b 1 2 ∥ w ∥ 2 2 \min_{w, b} \frac{1}{2} \|w\|_2^2 w,bmin21∥w∥22
s.t. − ϵ − ξ i − ≤ y i − ( w T x i + b ) ≤ ϵ + ξ i + , i = 1 , 2 , . . . , N \text{s.t. } -\epsilon - \xi_i^- \leq y_i - (w^T x_i + b) \leq \epsilon + \xi_i^+, \quad i = 1, 2, ..., N s.t. −ϵ−ξi−≤yi−(wTxi+b)≤ϵ+ξi+,i=1,2,...,N
ξ i + ≥ 0 , ξ i − ≥ 0 , i = 1 , 2 , . . . , N \xi_i^+ \geq 0, \quad \xi_i^- \geq 0, \quad i = 1, 2, ..., N ξi+≥0,ξi−≥0,i=1,2,...,N
4、拉格朗日函数
与支持向量机(SVM)类似,支持向量回归(SVR)的拉格朗日函数定义如下:
L ( w , b , α v , α c , ξ v , ξ c , μ v , μ c ) = 1 2 ∥ w ∥ 2 2 + C ∑ i = 1 N ( ξ i v + ξ i c ) L(w, b, \alpha^v, \alpha^c, \xi^v, \xi^c, \mu^v, \mu^c) = \frac{1}{2} \|w\|_2^2 + C \sum_{i=1}^{N} (\xi_i^v + \xi_i^c) L(w,b,αv,αc,ξv,ξc,μv,μc)=21∥w∥22+Ci=1∑N(ξiv+ξic)
目标是最小化以下表达式:
min w , b 1 2 ∥ w ∥ 2 2 \min_{w, b} \frac{1}{2} \|w\|_2^2 w,bmin21∥w∥22
同时满足以下约束条件:
s . t . − ϵ − ξ i v ≤ y i − ( w T x i + b ) ≤ ϵ + ξ i c ξ i c ≥ 0 , ξ i v ≥ 0 \begin{align*} s.t.\ -\epsilon - \xi_i^v &\leq y_i - (w^T x_i + b) \leq \epsilon + \xi_i^c \\ \xi_i^c &\geq 0, \quad \xi_i^v \geq 0 \end{align*} s.t. −ϵ−ξivξic≤yi−(wTxi+b)≤ϵ+ξic≥0,ξiv≥0
拉格朗日乘子 α i v \alpha_i^v αiv和 α i c \alpha_i^c αic以及 μ i v \mu_i^v μiv和 μ i c \mu_i^c μic的引入,使得问题可以转化为对偶问题求解。对偶问题的目标函数为:
+ ∑ i = 1 N α i v ( − ϵ − ξ i v − y i + w ⊤ x i + b ) + ∑ i = 1 N α i c ( y i − w ⊤ x i − b − ϵ − ξ i c ) − ∑ i = 1 N μ i v ξ i v − ∑ i = 1 m μ i c ξ i c \begin{align*} &+ \sum_{i=1}^{N} \alpha_i^v \left( -\epsilon - \xi_i^v - y_i + \mathbf{w}^\top \mathbf{x}_i + b \right) \\ &+ \sum_{i=1}^{N} \alpha_i^c \left( y_i - \mathbf{w}^\top \mathbf{x}_i - b - \epsilon - \xi_i^c \right) \\ &- \sum_{i=1}^{N} \mu_i^v \xi_i^v - \sum_{i=1}^{m} \mu_i^c \xi_i^c \end{align*} +i=1∑Nαiv(−ϵ−ξiv−yi+w⊤xi+b)+i=1∑Nαic(yi−w⊤xi−b−ϵ−ξic)−i=1∑Nμivξiv−i=1∑mμicξic
5、SVR的对偶问题
拉格朗日函数 L ( w , b , α v , α c , ξ v , ξ c , μ v , μ c ) L(w, b, \alpha^v, \alpha^c, \xi^v, \xi^c, \mu^v, \mu^c) L(w,b,αv,αc,ξv,ξc,μv,μc)对 w , b , ξ i ∧ , ξ i ∨ w, b, \xi_i^\wedge, \xi_i^\vee w,b,ξi∧,ξi∨的一阶导数如下:
∂ L ( w , b , α v , α c , ξ v , ξ c , μ v , μ c ) ∂ w = 0 ⇒ w = ∑ i = 1 N ( α i ∧ − α i ∨ ) x i \frac{\partial L(w, b, \alpha^v, \alpha^c, \xi^v, \xi^c, \mu^v, \mu^c)}{\partial \mathbf{w}} = 0 \Rightarrow \mathbf{w} = \sum_{i=1}^{N} (\alpha_i^\wedge - \alpha_i^\vee) \mathbf{x}_i ∂w∂L(w,b,αv,αc,ξv,ξc,μv,μc)=0⇒w=i=1∑N(αi∧−αi∨)xi
∂ L ( w , b , α v , α c , ξ v , ξ c , μ v , μ c ) ∂ b = 0 ⇒ ∑ i = 1 N ( α i ∧ − α i ∨ ) = 0 \frac{\partial L(w, b, \alpha^v, \alpha^c, \xi^v, \xi^c, \mu^v, \mu^c)}{\partial b} = 0 \Rightarrow \sum_{i=1}^{N} (\alpha_i^\wedge - \alpha_i^\vee) = 0 ∂b∂L(w,b,αv,αc,ξv,ξc,μv,μc)=0⇒i=1∑N(αi∧−αi∨)=0
∂ L ( w , b , α v , α c , ξ v , ξ c , μ v , μ c ) ∂ ξ i ∧ = 0 ⇒ C − α i ∧ + μ i ∧ \frac{\partial L(w, b, \alpha^v, \alpha^c, \xi^v, \xi^c, \mu^v, \mu^c)}{\partial \xi_i^\wedge} = 0 \Rightarrow C - \alpha_i^\wedge + \mu_i^\wedge ∂ξi∧∂L(w,b,αv,αc,ξv,ξc,μv,μc)=0⇒C−αi∧+μi∧
∂ L ( w , b , α v , α c , ξ v , ξ c , μ v , μ c ) ∂ ξ i ∨ = 0 ⇒ C − α i ∨ + μ i ∨ \frac{\partial L(w, b, \alpha^v, \alpha^c, \xi^v, \xi^c, \mu^v, \mu^c)}{\partial \xi_i^\vee} = 0 \Rightarrow C - \alpha_i^\vee + \mu_i^\vee ∂ξi∨∂L(w,b,αv,αc,ξv,ξc,μv,μc)=0⇒C−αi∨+μi∨
6、对偶问题的构建
将上述结论代入拉格朗日函数 L ( w , b , α v , α c , ξ v , ξ c , μ v , μ c ) L(w, b, \alpha^v, \alpha^c, \xi^v, \xi^c, \mu^v, \mu^c) L(w,b,αv,αc,ξv,ξc,μv,μc),得到对偶问题:
max α v , α c ( − ∑ i = 1 N ( ( ϵ − y i ) α i ∧ + ( ϵ + y i ) α i ∨ ) − ∑ i = 1 N 1 2 ( α i ∧ − α i ∨ ) ( α j ∧ − α j ∨ ) x i ⊤ x j ) \max_{\alpha^v, \alpha^c} \left( -\sum_{i=1}^{N} ((\epsilon - y_i) \alpha_i^\wedge + (\epsilon + y_i) \alpha_i^\vee) - \sum_{i=1}^{N} \frac{1}{2} (\alpha_i^\wedge - \alpha_i^\vee)(\alpha_j^\wedge - \alpha_j^\vee) \mathbf{x}_i^\top \mathbf{x}_j \right) αv,αcmax(−i=1∑N((ϵ−yi)αi∧+(ϵ+yi)αi∨)−i=1∑N21(αi∧−αi∨)(αj∧−αj∨)xi⊤xj)
约束条件为:
∑ i = 1 N ( α i ∧ − α i ∨ ) = 0 0 ≤ α i ∧ ≤ C , i = 1 , 2 , . . . , N 0 ≤ α i ∨ ≤ C , i = 1 , 2 , . . . , N \begin{align*} \sum_{i=1}^{N} (\alpha_i^\wedge - \alpha_i^\vee) &= 0 \\ 0 \leq \alpha_i^\wedge &\leq C, \quad i = 1, 2, ..., N \\ 0 \leq \alpha_i^\vee &\leq C, \quad i = 1, 2, ..., N \end{align*} i=1∑N(αi∧−αi∨)0≤αi∧0≤αi∨=0≤C,i=1,2,...,N≤C,i=1,2,...,N
去掉负号,将上述目标函数中的 max \max max换成 min \min min,得到等价问题:
min α v , α c ( ∑ i = 1 N ( ( ϵ − y i ) α i ∧ + ( ϵ + y i ) α i ∨ ) + ∑ i = 1 N 1 2 ( α i ∧ − α i ∨ ) ( α j ∧ − α j ∨ ) x i ⊤ x j ) \min_{\alpha^v, \alpha^c} \left( \sum_{i=1}^{N} ((\epsilon - y_i) \alpha_i^\wedge + (\epsilon + y_i) \alpha_i^\vee) + \sum_{i=1}^{N} \frac{1}{2} (\alpha_i^\wedge - \alpha_i^\vee)(\alpha_j^\wedge - \alpha_j^\vee) \mathbf{x}_i^\top \mathbf{x}_j \right) αv,αcmin(i=1∑N((ϵ−yi)αi∧+(ϵ+yi)αi∨)+i=1∑N21(αi∧−αi∨)(αj∧−αj∨)xi⊤xj)
7、SVR模型
求得 α \alpha α的最优值后,可计算 w , b \mathbf{w}, b w,b,从而得到SVR模型:
f ( x ) = w ⊤ x + b = ∑ i = 1 N ( α i ∧ − α i ∨ ) x i ⊤ x + b f(\mathbf{x}) = \mathbf{w}^\top \mathbf{x} + b = \sum_{i=1}^{N} (\alpha_i^\wedge - \alpha_i^\vee) \mathbf{x}_i^\top \mathbf{x} + b f(x)=w⊤x+b=i=1∑N(αi∧−αi∨)xi⊤x+b
= ∑ i = 1 N ( α i ∧ − α i ∨ ) ⟨ x i , x ⟩ + b = \sum_{i=1}^{N} (\alpha_i^\wedge - \alpha_i^\vee) \langle \mathbf{x}_i, \mathbf{x} \rangle + b =i=1∑N(αi∧−αi∨)⟨xi,x⟩+b
x \mathbf{x} x与训练数据的点积 ⟨ x i , x ⟩ \langle \mathbf{x}_i, \mathbf{x} \rangle ⟨xi,x⟩换成核函数 k ( x i , x ) k(\mathbf{x}_i, \mathbf{x}) k(xi,x),得到核化SVR模型:
f ( x ) = ∑ i = 1 N ( α i ∧ − α i ∨ ) k ( x i , x ) + b f(\mathbf{x}) = \sum_{i=1}^{N} (\alpha_i^\wedge - \alpha_i^\vee) k(\mathbf{x}_i, \mathbf{x}) + b f(x)=i=1∑N(αi∧−αi∨)k(xi,x)+b
8、SVR的支持向量
KKT条件之二为:
α i ∨ ( ϵ + ξ i ∨ + y i − ( w ⊤ x i + b ) ) = 0 \alpha_i^\vee \left( \epsilon + \xi_i^\vee + y_i - (\mathbf{w}^\top \mathbf{x}_i + b) \right) = 0 αi∨(ϵ+ξi∨+yi−(w⊤xi+b))=0
α i ∧ ( ϵ + ξ i ∧ − y i + ( w ⊤ x i + b ) ) = 0 \alpha_i^\wedge \left( \epsilon + \xi_i^\wedge - y_i + (\mathbf{w}^\top \mathbf{x}_i + b) \right) = 0 αi∧(ϵ+ξi∧−yi+(w⊤xi+b))=0
支持向量:仅当样本 ( x i , y i ) (\mathbf{x}_i, y_i) (xi,yi)落在 ϵ \epsilon ϵ间隔中, α i ∨ \alpha_i^\vee αi∨、 α i ∧ \alpha_i^\wedge αi∧才取非0值。
六、Sklearn中的SVM的API
1、Scikit-Learn中的SVM实现
sklearn.svm
模块提供支持向量机算法,可用于分类、回归和异常值检测。
分类实现有三种方式:
- LinearSVC:基于
liblinear
实现线性SVM,比基于libsvm
实现的线性SVC / NuSVC更快,同时可采用更多正则选择(L1/L2)和损失函数选择。- L1正则可以得到特征系数稀疏的效果。
- 适用于样本数更多的情况。
- SVC和NuSVC:类似,都是基于
libsvm
实现的C-SVM,二者在参数方面有细微不同(NuSVC有参数 ν \nu ν控制训练误差的上限和支持向量的下限)。 - SGDClassifier(不在
sklearn.svm
模块,在sklearn.linear_model
)实现了基于随机梯度下的线性SVM分类。
回归实现方式同分类类似。
SVM还支持非监督的异常值检测:OneClassSVM
2、LinearSVC
class sklearn.svm.LinearSVC(penalty='l2', loss='squared_hinge', dual=True, tol=0.0001, C=1.0,
multi_class='ovr', fit_intercept=True, intercept_scaling=1, class_weight=None, verbose=0,
random_state=None, max_iter=1000)
支持两种正则:L2正则和L1正则,正则参数为:penalty
、C
。
支持两种损失函数:标准的合页损失hinge
和合页损失的平方squared_hinge
。
支持不同类别的样本权重设置:class_weight
。
3、参数说明
参数 | 说明 | 备注 |
---|---|---|
penalty | 惩罚函数 / 正则函数,支持L2正则和L1正则,默认:L2 | |
loss | 损失函数,支持标准的合页损失hinge 和合页损失的平方squared_hinge 。 |
|
dual | 原问题(primal)还是对偶问题求解。默认:True | 当样本数 n _ s a m p l e s > n\_samples > n_samples>特征数目 n _ f e a t u r e s n\_features n_features时,原问题求解更简单。 |
tol | 迭代终止判据的误差范围。默认:1e-4 | |
C | 损失函数项的系数。默认:1 | |
multi_class | 多类分类处理策略,可为ovr ,crammer_singer 。ovr 为1对多,将多类分类转化为多个两类分类问题,crammer_singer 是一起优化多个分类的目标函数。缺省:ovr |
crammer_singer 理论上看起来很好,实际上很少用,因为分类效果没有更好但计算量大。 |
fit_intercept | 是否在决策函数中加入截距项。缺省:True | 如果数据已经中心化,可以不用。 |
intercept_scaling | 截距缩放因子,当fit_intercept 为True且时,输入为 [ x , s e l f . i n t e r c e p t s c a l i n g ] [x, self.intercept_scaling] [x,self.interceptscaling],即对输入特征加入1维常数项 |
增加的常数项系数也受到L1/L2正则的惩罚,所以要适当增大常数项。 |
class_weight | 不同类别样本的权重,用户指定每类样本权重或balanced (每类样本权重与该类样本出现比例成反比)。缺省:None |
在损失计算中,对不同类别的样本施加相应的权重。 |
verbose | 是否详细输出 | |
random_state | 随机种子。如果随机种子相同,每次洗牌得到的结果一样。可设置为某个整数 | |
max_iter | 最大迭代次数。缺省:1000 |
4、LinearSVC的属性
属性 | 说明 | 备注 |
---|---|---|
coef_ |
回归系数/权重,与特征维数相同。 | |
intercept_ |
截距项。 |
5、LinearSVC的方法
方法 | 说明 |
---|---|
fit(X, y[, sample_weight]) |
模型训练。参数 X , y X, y X,y为训练数据,也可以通过sample_weight 设置每个样本的权重。 |
predict(X) |
返回 X X X对应的预测值(类别标签)。 |
decision_function(X) |
预测的置信度(样本到分类超平面的带符号距离)。 |
score(X, y[, sample_weight]) |
评估模型预测性能,返回模型预测的正确率。 |
densify() |
如果之前将系数矩阵变成了稀疏模式,再将其变回稠密模式(fit 函数的格式)。 |
sparsify() |
将系数矩阵变成了稀疏模式。 |
注意:LinearSVC不能像Logistic回归那样得到每个类别的概率。
6、SVC
class sklearn.svm.SVC(C=1.0, kernel='rbf', degree=3, gamma='auto', coef0=0.0,
shrinking=True, probability=False, tol=0.001, cache_size=200,
class_weight=None, verbose=False, max_iter=-1,
decision_function_shape='ovr', random_state=None)
- 支持L2正则化。
- 支持多种核函数:‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, 'precomputed’和自定义核函数。
- 支持多类分类实现:一对一(‘ovo’)。
- 支持不同类别的样本权重设置:class_weight。
参数 | 说明 | 备注 |
---|---|---|
C | 损失函数项的系数。默认:1 | |
kernel | 核函数。支持 ‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’ 或 a callable。默认:‘rbf’。 | |
degree | 多项式核的多项式阶数 | |
gamma | 核函数(‘poly’, ‘rbf’, ‘sigmoid’)系数。默认 ‘auto’ =1/D | |
coef0 | 核函数(‘poly’, ‘sigmoid’)参数。 | |
shrinking | 是否收缩 | |
probability | 是否支持概率估计。支持概率估计会降低速度,需在模型训练(fit)之前设置。 | |
tol | 迭代终止判据的误差范围。默认:1e-3 | |
cache_size | 核的cache的大小(单位:MB) | |
class_weight | 不同类别样本的权重,用户指定每类样本权重或 ‘balanced’(每类样本权重与该类样本出现比例成反比)。缺省:None | 在损失计算中,对不同类别的样本施加相应的权重。 |
verbose | 是否详细输出 | |
max_iter | 最大迭代次数。缺省:-1,没有限制 | |
decision_function_shape | 决策函数的形式,可为 ‘ovo’,‘ovr’。‘ovr’ 为1对多,将多类分类转化为多个两类分类问题。‘ovo’ 为libsvm原始决策函数形式,1对1,每两个类之间有一个分类面。缺省:‘ovr’ | |
random_state | 随机种子。如果随机种子相同,每次洗牌得到的结果一样。可设置为某个整数。 | 用于概率估计的数据重排时的伪随机数生成器的种子。 |
7、SVC的属性
属性 | 说明 | 备注 |
---|---|---|
coef_ | 原问题的系数/权重(线性核有效),与特征维数相同。 | f ( x ) = ∑ i = 1 N α i y i k ( x , x i ) + b f(x) = \sum_{i=1}^{N} \alpha_i y_i k(x, x_i) + b f(x)=∑i=1Nαiyik(x,xi)+b |
intercept_ | 截距项。 | |
support_ | 支持向量的索引 | |
support_vectors_ | 支持向量 | |
n_support_ | 每个类的支持向量的数目 | |
dual_coef_ | 对偶系数 α \alpha α |
注意:LinearSVC没有支持向量等属性。
8、SVC的常用方法
方法 | 说明 |
---|---|
fit(X, y[, sample_weight]) | 模型训练。参数X, y为训练数据,也可以通过sample_weight设置每个样本的权重。 |
predict(X) | 返回X对应的预测值(类别标签) |
decision_function(X) | 预测的置信度(样本到分类超平面的带符号距离) |
score(X, y[, sample_weight]) | 评估模型预测性能,返回模型预测的正确率。 |
predict_log_proba(X) | 返回X对应的预测值(每个类别对应的概率的log值) |
predict_proba(X) | 返回X对应的预测值(每个类别对应的概率) |
注意:如果参数probability被设为True,则可以得到属于每个类别的概率估计(predict_proba和predict_log_proba方法可用)。
9、核函数参数
核函数的参数有 d e g r e e ( M ) degree(M) degree(M)、 g a m m a ( γ ) gamma(\gamma) gamma(γ)、 c o e f 0 ( θ ) coef0(\theta) coef0(θ),核函数可以有以下几种选择:
- 线性核: k ( x , x ′ ) = x T x ′ k(x, x') = x^T x' k(x,x′)=xTx′
- 多项式核,缺省为3阶多项式: k ( x , x ′ ) = ( γ x T x ′ + r ) M k(x, x') = (\gamma x^T x' + r)^M k(x,x′)=(γxTx′+r)M
- 径向基函数(RBF): k ( x , x ′ ) = exp ( − γ ∥ x − x ′ ∥ 2 2 ) k(x, x') = \exp(-\gamma \|x - x'\|_2^2) k(x,x′)=exp(−γ∥x−x′∥22)
- sigmoid函数: k ( x , x ′ ) = tanh ( − γ x T x ′ + θ ) k(x, x') = \tanh(-\gamma x^T x' + \theta) k(x,x′)=tanh(−γxTx′+θ)
10、多类别分类
- SVM最初是处理二分类问题的。多类别分类通过一对一(One vs. One,‘ovo’)方案实现(SVC、NuSVC)。
- 一对一法:假设进行 C C C个类别的分类任务,一对一法在任意两类样本之间设计一个SVM,构造 C × ( C − 1 ) / 2 C \times (C - 1) / 2 C×(C−1)/2个分类器。当对一个未知样本进行分类时,最后得票最多的类别即为该样本的类别。
- 为了提供一个和其它分类器一致的接口,参数decision_function_shape允许调用者将所有“一对一”分类器的结果聚合进一个 ( n _ s a m p l e s , n _ c l a s s e s ) (n\_samples, n\_classes) (n_samples,n_classes)的决策函数。
- LinearSVC实现“一对多”分类法(‘ovr’),训练 C C C个模型。
11、得分与概率
- SVC中的decision_function方法对每个样本都会给出在各个类别上的分数(在两类分类问题中,对每个样本只给出一个分数)。
- 如果构造函数的参数probability被设为True,则可以得到属于每个类别的概率估计(通过predict_proba和predict_log_proba方法)。概率使用Platt缩放进行调整,通过在训练集上做额外的交叉检验来拟合一个在SVM分数上的Logistic回归。
- Platt缩放中的交叉检验在大数据集上是一个代价很高的操作
- 概率估计与实际得分可能会不一致,即使得分取得了最大值,概率并不一定也能取到最大值
- Platt的方法在理论上也有一些问题
- 如果需要拿到置信分数,而这些分数又不一定非得是概率,则建议把probability置为False,并且使用decision_function,而不是predict_proba。
12、计算复杂度
- 支持向量机很强大,一度是处理机器学习任务的首选算法。
- 但随着训练样本数目的增加,它们对计算和存储资源的需求也快速增长。
- SVM的核心是二次规划问题(QP)。令特征维数为 D D D,训练样本数目为 N N N,取决于libsvm缓存在实践中使用的效率(依赖于数据集),基于libsvm的实现所用的QP求解器时间复杂度在 D N 2 DN^2 DN2到 D N 3 DN^3 DN3不等。如果数据非常稀疏, D D D为一个样本中的平均非零特征数目。因此通常在 N < 100000 N < 100000 N<100000时可用。
- 对线性的情况,基于liblinear实现的LinearSVC的算法比基于libsvm实现的SVC效率要高很多,liblinear在处理以百万计的样本和/或特征时仅以线性增长。