【ML】_03_SVM(支持向量机)


 


 

【一】 SVM(Support Vector Machine,支持向量机)

 

【有监督】拥有核函数的分类算法,数学理论基础丰富

 


 

【二】 拉格朗日 & KKT条件(LAGrange)

 

  • 拉格朗日(LAGrange)可以把 constrain 变成 non-constrain,举个例子:
     
    { m i n      x 1 2 + x 2 2 s . t       x 2 − x 1 = − 1        ⇒        m i n        x 1 2 + x 2 2 + λ    ( x 2 − x 1 + 1 ) \left\{ \begin{array} { l } { \bm { min \;\; {x_1}^2 + {x_2}^2 } } \\ \\ { \bm { s.t \;\,\,\, x_2-x_1 = -1 } } \end{array} \right. \;\;\;\bm \Rightarrow \;\;\; \bm { min \;\;\;x _ { 1 } ^ { 2 } + x _ { 2 } ^ { 2 } + \lambda \; ( x _ { 2 } - x _ { 1 } + 1 ) } minx12+x22s.tx2x1=1minx12+x22+λ(x2x1+1)

 

  • 等号 条件处理
     
    { m i n      f ( x ) s . t       g i ( x ) = 0 ,        i = 1 , 2 , . . . , m        ⇒        m i n        f ( x ) + ∑ i = 1 m λ i ⋅ g i ( x ) \left\{ \begin{array} { l } { \bm { min \;\; f ( x ) } } \\ \\ { \bm { s.t \;\,\,\, g _ i(x) = 0, \;\;\; i = 1,2,...,m } } \end{array} \right. \;\;\;\bm \Rightarrow \;\;\; \bm { min \;\;\; f ( x ) + \sum _ { i = 1 } ^ { m } \red { \lambda _ { i } \cdot g _ { i } ( x ) } } minf(x)s.tgi(x)=0,i=1,2,...,mminf(x)+i=1mλigi(x)
     
  • 不等号 条件处理
     
    { m i n      f ( x ) s . t       h i ( x ) ≤ 0 ,        i = 1 , 2 , . . . , m        ⇒        { m i n        f ( x ) + ∑ i = 1 m λ i ⋅ h i ( x ) s . t       λ i = 0 ,      h i ( x ) ≤ 0 s . t       λ i > 0 ,      h i ( x ) = 0 \left\{ \begin{array} { l } { \bm { min \;\; f ( x ) } } \\ \\ { \bm { s.t \;\,\,\, h _ i(x) \leq 0, \;\;\; i = 1,2,...,m } } \end{array} \right. \;\;\;\bm \Rightarrow \;\;\; \left\{ \begin{array} { l } { \bm { min \;\;\; f ( x ) + \sum _ { i = 1 } ^ { m } \red { \lambda _ { i } \cdot h _ { i } ( x ) } } } \\ \\ { \bm { s.t \;\,\,\, \lambda _ { i } = 0, \;\;h _ { i } ( x ) \leq 0 } } \\ \\ { \bm { s.t \;\,\,\, \lambda _ { i } > 0, \;\;h _ { i } ( x ) = 0 } }\end{array} \right. minf(x)s.thi(x)0,i=1,2,...,mminf(x)+i=1mλihi(x)s.tλi=0,hi(x)0s.tλi>0,hi(x)=0
     
  • KKT条件
    m i n        f ( x ) + ∑ i = 1 m λ i ⋅ g i ( x ) + ∑ j = 1 m ′ μ j ⋅ h j ( x ) \bm { min \;\;\; f ( x ) + \sum _ { i = 1 } ^ { m } \red { \lambda _ { i } \cdot g _ { i } ( x ) } + \sum _ { j = 1 } ^ { m ^ { \prime } } \red { \mu _ { j } \cdot h _ { j } ( x ) } } minf(x)+i=1mλigi(x)+j=1mμjhj(x)

s . t    { λ i   ,    μ j ≥ 0 ,        ∀ i     ∀ j h j ( x ) ≤ 0 ,        μ j ⋅ h j ( x ) = 0 ,        ∀ j s.t \; \left\{ \begin{array} { l } { \bm { \lambda _ { i } \, , \; \mu _ { j } \geq 0 , \;\;\; \forall i \;\,\forall j} } \\ \\ { \bm { h _ { j } ( x ) \leq 0, \;\;\; \mu _ { j } \cdot h _ { j } ( x ) = 0 , \;\;\; \forall j } } \end{array} \right. s.tλi,μj0,ijhj(x)0,μjhj(x)=0,j

 


 

【三】 手撕 SVM(必须掌握)

 

  • 函数距离 d ^ \hat { d } d^)+ 几何距离(d)

 

  • 函数距离几何距离 之间的关系(||W|| 是矩阵 W 的模)
     
    d = d ^ ∥ W ∥ d = \frac { \hat { d } } { \| W \| } d=Wd^

 

  • 最大化 两条虚线间的间隔
     
    γ = 2 ∥ W ∥ \gamma = \frac { 2 } { \| W \| } γ=W2

 

  • 目标函数(数学模型)
     
    { m i n   1 2 ∥ w ∥ 2 y i ⋅ ( w T x i + b ) ≥ 1 \left\{ \begin{array} { l } { \bm { min \, \frac { 1 } { 2 } \| w \| ^ { 2 } } } \\ \\ { \bm { y _ { i } \cdot ( w ^ { T } x _ { i } + b ) \geq 1 } } \end{array} \right. min21w2yi(wTxi+b)1
     
  • 个别点 不满足限制条件:添加松弛变量 ξ
                

 

  • 引入 松弛变量 ξ 后的 目标函数
     
    { m i n     1 2 ∥ w ∥ 2 + λ ∑ i = 1 n ξ i y i ⋅ ( w T x i + b ) ≥ 1 − ξ i \left\{ \begin{array} { l } { \bm { min \,\; \frac { 1 } { 2 } \| w \| ^ { 2 } + \lambda \sum _ { i = 1 } ^ { n } \xi _ { i }} } \\ \\ { \bm { y _ { i } \cdot ( w ^ { T } x _ { i } + b ) \geq { 1- \xi_i } } } \end{array} \right. min21w2+λi=1nξiyi(wTxi+b)1ξi
     
  • Hinge Loss 损失函数 :正是因为 HingeLoss 的 零区域 对应的正是 非支持向量 的普通样本,从而所有的普通样本都 不参与 最终超平面的决定,这才是支持向量机最大的优势所在,对训练样本数目的依赖大大减少,而且提高了训练效率
     
    L o s s = m a x   (   0   ,   1 − y i ( w T x i + b   ) \bm { Loss = max \,(\, 0 \,,\, 1-y _ { i } ( w ^ { T } x _ { i } + b \,) } Loss=max(0,1yi(wTxi+b)
     
  • SVM 的 KKT 条件(不等号处理)
     
    m i n        1 2 ∣ ∣ w ∣ ∣ 2 + ∑ i = 1 n λ i ⋅ [   1 − y i ⋅ ( w T x i + b )   ] \bm { min \;\;\; \frac { 1 } { 2 } | | w | | ^ { 2 } + \sum _ { i = 1 } ^ { n } \lambda _ { i } \cdot [\, 1 - y _ { i } \cdot ( w ^ { T } x _ { i } + b ) \,] } min21w2+i=1nλi[1yi(wTxi+b)]

s . t    { λ i ≥ 0 ,        ∀ i [   1 − y i ⋅ ( w T x i + b )   ] ≤ 0 ,        ∀ i λ i ⋅ [   1 − y i ⋅ ( w T x i + b )   ] = 0 ,        ∀ i s.t \; \left\{ \begin{array} { l } { \bm { \lambda _ { i } \geq 0 , \;\;\; \forall i } } \\ \\ { \bm { [\, 1 - y _ { i } \cdot ( w ^ { T } x _ { i } + b ) \,] \leq0 , \;\;\; \forall i } } \\ \\ { \bm { \lambda _i \cdot [\, 1 - y _ { i } \cdot ( w ^ { T } x _ { i } + b ) \,] = 0 , \;\;\; \forall i } } \end{array} \right. s.tλi0,i[1yi(wTxi+b)]0,iλi[1yi(wTxi+b)]=0,i
 

  • SVM 的 Dual Problem(对偶问题, x i T x j \bm \red { x _ { i } ^ { T } x _ { j } } xiTxj 是使用 Kernel Trick 的关键)
     
    m i n        − 1 2 ∑ i = 1 n ∑ j = 1 n λ i   λ j   y i   y j   x i T x j + 1 2 ∑ i = 1 n λ i \bm { min \;\;\; - \frac { 1 } { 2 } \sum _ { i = 1 } ^ { n } \sum _ { j = 1 } ^ { n } \lambda _ { i } \, \lambda _ { j } \, y _ { i } \, y _ { j } \, \red { x _ { i } ^ { T } x _ { j } } + \frac { 1 } { 2 } \sum _ { i = 1 } ^ { n } \lambda _ { i } } min21i=1nj=1nλiλjyiyjxiTxj+21i=1nλi

s . t    { λ i ≥ 0 ,        ∀ i [   1 − y i ⋅ ( w T x i + b )   ] ≤ 0 ,        ∀ i λ i ⋅ [   1 − y i ⋅ ( w T x i + b )   ] = 0 ,        ∀ i ∂ L ∂ w : w = ∑ i = 1 n λ i y i x i ∂ L ∂ b : ∑ i = 1 n λ i y i = 0 s.t \; \left\{ \begin{array} { l } { \bm { \lambda _ { i } \geq 0 , \;\;\; \forall i } } \\ \\ { \bm { [\, 1 - y _ { i } \cdot ( w ^ { T } x _ { i } + b ) \,] \leq0 , \;\;\; \forall i } } \\ \\ { \bm { \lambda _i \cdot [\, 1 - y _ { i } \cdot ( w ^ { T } x _ { i } + b ) \,] = 0 , \;\;\; \forall i } } \\ \\ { \bm { \frac { \partial L } { \partial w } : w = \sum _ { i = 1 } ^ { n } \lambda _ { i } y _ { i } x _ { i } } } \\ \\ { \bm { \frac { \partial L } { \partial b } : \sum _ { i = 1 } ^ { n } \lambda _ { i } y _ { i } = 0 } } \end{array} \right. s.tλi0,i[1yi(wTxi+b)]0,iλi[1yi(wTxi+b)]=0,iwL:w=i=1nλiyixibL:i=1nλiyi=0

 


 

【四】 Kernel Trick(核函数)

 

  • Linear(线性核)
    k ( x , y ) = x T y k ( x , y ) = \bm {x ^ { T } y} k(x,y)=xTy

 

  • Polynomial(多项式核)
    k ( x , y ) = ( 1 + x T y ) d k ( x , y ) = \bm { ( 1 + x ^ { T } y ) ^ { d }} k(x,y)=(1+xTy)d

 

  • Gaussian(高斯核)
    k ( x , y ) = e x p   ( − ∥ x − y ∥ 2 2 σ 2 ) k ( x , y ) = \bm {exp \,(\frac { - \| x - y \| ^ { 2 } } { 2 \sigma ^ { 2 } })} k(x,y)=exp(2σ2xy2)

 

  • 如何选择核函数
  1. 如果特征的数量大到和样本数量差不多,则选用 LR 或者 线性核 的SVM
  2. 如果特征的数量小,样本的数量正常,则选用 SVM+高斯核函数
  3. 如果特征的数量小,样本的数量非常大,则需要手工添加一些特征从而变成第一种情况

 


 

【五】 SVM 代码使用(Sklearn)

 

from sklearn.svm import SVC, LinearSVC
'''
:param (参数)
decision_function_shape: 'ovo' 实现多分类
kernel: 选择不同的核函数
'''
svm = SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=None, degree=3,
		  gamma='auto', kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True,
    	  tol=0.001, verbose=False)

svm = LinearSVC(C=1.0, class_weight=None, dual=True, fit_intercept=True, intercept_scaling=1,loss='squared_hinge', 
		  		max_iter=1000, multi_class='ovr', penalty='l2', random_state=None, tol=0.0001, verbose=0)
'''
:object (方法)
svm.fit(X,y): SVM 是有监督的机器学习算法
svm.predict(X): 返回数据 X 预测的类别
'''
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值