支持向量机推导过程
支持向量机是机器学习中最复杂的内容之一,以下就展示支持向量机具体推导过程。
推导分为以下几个部分:
- 数据线性可分
- 拉格朗日乘子以及对偶问题
- 数据部分线性可分
-
当数据线性可分时原始优化问题推导
支持向量机的核心在于在空间中找到一个超平面(决策平面):
w T x + b = 0 {w^T}x + b = 0 wTx+b=0使得两类样本点分布在超平面的两侧,对于正样本y=+1,满足:
w T x + b > 0 {w^T}x + b > 0 wTx+b>0对于负样本y=-1,满足:
w T x + b < 0 {w^T}x + b < 0 wTx+b<0假设正负样本中都有一些点离这个超平面最近,那么这些样本点所在的平面为:
w T x + b = ± A {w^T}x + b = \pm A wTx+b=±A这里A的大小没有意义,可以用1来代替,原因是A只是表示两个平面之间的相对距离的远近而已,我们想求的是绝对距离。
绝对距离为:
2 ∥ w ∥ \frac{{2}}{{\left\| w \right\|}} ∥w∥2
样本点满足的约束为:
w T x i + b ≥ 1 , f o r    y i = 1 w T x i + b ≤ − 1 , f o r    y i = − 1 \begin{array}{l} {w^T}{x_i} + b \ge 1,for\;{y_i} = 1\\ {w^T}{x_i} + b \le -1,for\;{y_i} = - 1 \end{array} wTxi+b≥1,foryi=1wTxi+b≤−1,foryi=−1即:
y i ( w T x i + b ) ≥ 1 {y_i}({w^T}{x_i} + b) \ge 1 yi(wTxi+b)≥1支持向量机的分类方法就是让离超平面最近的正负样本所在的平面之间的距离尽可能大,因此问题转化成一个最优化问题:
{ min w , b        1 2 ∥ w ∥ 2 s . t .            y i ( w T x i + b ) ≥ 1 ,            i = 1 , 2 , . . . , n \left\{ \begin{array}{l} \mathop {\min }\limits_{w,b} \;\;\;\frac{1}{2}{\left\| w \right\|^2}\\ s.t.\;\;\;\;\;{y_i}\left( {{w^T}{x_i} + b} \right) \ge 1,\;\;\;\;\;i = 1,2,...,n \end{array} \right. {w,bmin21∥w∥2s.t.yi(wTxi+b)≥1,i=1,2,...,n -
原始问题转化成对偶问题
由于原始问题存在约束条件,为了简化问题,我们想到将目标函数和约束融入一个新的函数,也就是拉格朗日函数,通过这个函数来寻找最值。
原始问题的拉格朗日函数为:
L = 1 2 ∥ w ∥ 2 + ∑ i = 1 n α i ( 1 − y i ( w T x i + b ) ) ,            i = 1 , 2 , . . . n L = \frac{1}{2}{\left\| w \right\|^2} + \sum\limits_{i = 1}^n {{\alpha _i}\left( {1 - {y_i}\left( {{w^T}{x_i} + b} \right)} \right)} ,\;\;\;\;\;i = 1,2,...n L=21∥w∥2+i=1∑nαi(1−yi(wTxi+b)),i=1,2,...n原始问题等价于:
{ m i n w , b m a x α L ( w , b , α ) s . t            α i ≥ 0 \left\{ \begin{array}{l} \mathop {min}\limits_{w,b} \mathop {max}\limits_\alpha L\left( {w,b,\alpha} \right)\\ s.t\;\;\;\;\;{\alpha _i} \ge 0 \end{array} \right. {w,bminαmaxL(w,b,α)s.tαi≥0
转化成对偶问题:
{ m a x α m i n w , b L ( w , b , α ) s . t            α i ≥ 0 \left\{ \begin{array}{l} \mathop {max}\limits_\alpha \mathop {min}\limits_{w,b} L\left( {w,b,\alpha } \right)\\ s.t\;\;\;\;\;{\alpha _i} \ge 0 \end{array} \right. {αmaxw,bminL(w,b,α)s.tαi≥0只所以能够转化成对偶问题,简单来说函数最大值的最小值肯定大于等于最小值的最大值,也就是说对偶问题是原问题的下界。
求解上述对偶问题:
{ ∂ L ∂ w = 0 ∂ L ∂ b = 0 ⇒ { w = ∑ i = 1 n α i y i x i ∑ i = 1 n α i y i = 0 \left\{ \begin{array}{l} \frac{{\partial L}}{{\partial w}} = 0\\ \frac{{\partial L}}{{\partial b}} = 0 \end{array} \right. \Rightarrow \left\{ \begin{array}{l} w = \sum\limits_{i = 1}^n {{\alpha _i}{y_i}{x_i}} \\ \sum\limits_{i = 1}^n {{\alpha _i}{y_i} = 0} \end{array} \right. {∂w∂L=0∂b∂L=0⇒⎩⎪⎨⎪⎧w=i=1∑nαiyixii=1∑nαiyi=0带入对偶问题得
{ m i n α 1 2 ∥ w ∥ 2 − ∑ i = 1 n α i = m i n α 1 2 ∑ i = 1 n ∑ j n α i α j y i y j x i T x j − ∑ i = 1 n α i s . t            α i ≥ 0 ∑ i = 1 n α i y i = 0 \left\{ \begin{array}{l} \mathop {min}\limits_\alpha \frac{1}{2}{\left\| w \right\|^2} - \sum\limits_{i = 1}^n {{\alpha _i}} = \mathop {min}\limits_\alpha \frac{1}{2}\sum\limits_{i = 1}^n {\sum\limits_j^n {{\alpha _i}{\alpha _j}{y_i}{y_j}x_i^T{x_j} - \sum\limits_{i = 1}^n {{\alpha _i}} } } \\ s.t\;\;\;\;\;{\alpha _i} \ge 0\\ \sum\limits_{i = 1}^n {{\alpha _i}{y_i} = 0} \end{array} \right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧αmin21∥w∥2−i=1∑nαi=αmin21i=1∑nj∑nαiαjyiyjxiTxj−i=1∑nαis.tαi≥0i=1∑nαiyi=0对偶问题是通过SMO或者 Pegasos来求解得,这里就不再叙述,假设我们通过以上方法求得了 α i {\alpha _i} αi,那么根据KKT条件:- 主问题可行: y i ( w T x i + b ) ≤ 1 {y_i}\left( {{w^T}{x_i} + b} \right) \le 1 yi(wTxi+b)≤1
- 对偶问题可行: α i ≥ 0 {\alpha _i} \ge 0 αi≥0
- 互补松弛条件:
α
i
(
1
−
y
i
(
w
T
x
i
+
b
)
)
=
0
{\alpha _i}\left( {1 - {y_i}\left( {{w^T}{x_i} + b} \right)} \right) = 0
αi(1−yi(wTxi+b))=0
我们可以求出:
w ∗ = ∑ i = 1 n α i y i x i b ∗ = y k − w T x k            α k > 0 \begin{array}{l} {w^*} = \sum\limits_{i = 1}^n {{\alpha _i}{y_i}{x_i}} \\ {b^*} = {y_k} - {w^T}{x_k}\;\;\;\;\;{\alpha _k} > 0 \end{array} w∗=i=1∑nαiyixib∗=yk−wTxkαk>0
-
当数据部分线性可分
有些点满足 y i ( w T x + b ) ≤ 1 {y_i}\left( {{w^T}x + b} \right) \le 1 yi(wTx+b)≤1,对于这些点我们在目标函数上施加惩罚,惩罚的大小就是 1 − y i ( w T x + b ) 1 - {y_i}\left( {{w^T}x + b} \right) 1−yi(wTx+b),即:
m i n w , b 1 2 ∥ w ∥ 2 + ∑ i = 1 n m a x { 0 , 1 − y i ( w T x i + b ) } \mathop {min}\limits_{w,b} \frac{1}{2}{\left\| w \right\|^2} + \sum\limits_{i = 1}^n {max\left\{ {0,1 - {y_i}\left( {{w^T}{x_i} + b} \right)} \right\}} w,bmin21∥w∥2+i=1∑nmax{0,1−yi(wTxi+b)}令 ζ i = 1 − y i ( w T x i + b ) {\zeta _i} = 1 - {y_i}\left( {{w^T}{x_i} + b} \right) ζi=1−yi(wTxi+b),得到优化函数为:
{ m i n w , b 1 2 ∥ w ∥ 2 + C ∑ i = 1 n ζ i s . t .            y i ( w T x + b ) ≥ 1 − ζ i      ζ i ≥ 0 \left\{ \begin{array}{l} \mathop {min}\limits_{w,b} \frac{1}{2}{\left\| w \right\|^2} + C\sum\limits_{i = 1}^n {{\zeta _i}} \\ s.t.\;\;\;\;\;{y_i}\left( {{w^T}x + b} \right) \ge 1 - {\zeta _i}\;\;{\zeta _i} \ge 0 \end{array} \right. ⎩⎨⎧w,bmin21∥w∥2+Ci=1∑nζis.t.yi(wTx+b)≥1−ζiζi≥0同样的引入拉格朗日乘子,将原问题转化成对偶问题:
{ m i n w , b 1 2 ∑ i = 1 n ∑ j = 1 n α i α j y i y j ( x i T x j ) − ∑ i = 1 n α i s . t .            C − α i − μ i = 0                    α i ≥ 0      μ i ≥ 0      i = 1 , 2 , . . . n \left\{ \begin{array}{l} \mathop {min}\limits_{w,b} \frac{1}{2}\sum\limits_{i = 1}^n {\sum\limits_{j = 1}^n {{\alpha _i}{\alpha _j}{y_i}{y_j}\left( {x_i^T{x_j}} \right)} } - \sum\limits_{i = 1}^n {{\alpha _i}} \\ s.t.\;\;\;\;\;C - {\alpha _i} - {\mu _i} = 0\\ \;\;\;\;\;\;\;\;\;{\alpha _i} \ge 0\;\;{\mu _i} \ge 0\;\;i = 1,2,...n \end{array} \right. ⎩⎪⎪⎨⎪⎪⎧w,bmin21i=1∑nj=1∑nαiαjyiyj(xiTxj)−i=1∑nαis.t.C−αi−μi=0αi≥0μi≥0i=1,2,...n我们可以看到引入松弛变量的目标函数和原来一样,只是限制条件有所不同,同样的,用SMO算法解出 α i {\alpha _i} αi后可得:
w ∗ = ∑ i = 1 n α i y i x i b ∗ = y k − w ∗ x k \begin{array}{l} {w^*} = \sum\limits_{i = 1}^n {{\alpha _i}{y_i}{x_i}} \\ {b^*} = {y_k} - {w^*}{x_k} \end{array} w∗=i=1∑nαiyixib∗=yk−w∗xk和线性可分的情况一模一样。
支持向量机工具包
sklearn中有两种关于SVM的算法库,一种用于分类,包括SVC、NuSVC和LinearSVC。另一种用于回归,包括SVR、NuSVR和LinearSVR。
from sklearn.svm import SVC
#C代表惩罚系数,C影响泛化能力,C越大泛化能力越差
#kernel的选择:特征数远大于样本数,使用线性核,线性核速度比高斯核快
#gamma是核函数的参数,值越大,支持向量越少,越容易过拟合。
clf= SVC(C=1.0,kernel='rbf',gamma='auto')
clf.fit(data, labels)
支持向量机面试题
- 手推SVM
- SVM优缺点
优点:
a. 小样本情况下精度高
b. 适用于样本特征比较多的情况
c. 鲁棒性比较强,因为分离超平面只取决支持向量
缺点:
a. 不适用大样本,计算量大,很耗内存
b. 类别多的情况效果差 - SVM中核函数是什么?如何选择核函数
核函数用来代替高维空间中的内积运算,需要满足Mercer条件(半正定函数)。常见的核函数有以下几种,它们分别使用如下场合:
a. 线性核,适用于特征数大于样本数
b. 高斯核,适用于样本数远大于特征数 - 为什么原问题要转化成对偶问题求解?
对偶问题改变了问题的复杂度,当你的样本维度比较大,用对偶问题求解的复杂度取决于样本数量。如果你的样本维度比样本数量小,就不需要转化成对偶问题。对偶问题还有内积的形式,引出了核函数的概念。