西瓜书笔记02:支持向量基

支持向量基

@[拉格朗日乘子法|对偶问题|KKT条件|核函数|hinge损失]

存在多个超平面将样本划分的情况下,选择对训练样本局部扰动容忍性最好的。

间隔与支持向量

划分超平面的法向量为 w=(w1;w2;...;wd) w = ( w 1 ; w 2 ; . . . ; w d ) ,则超平面为 wTx+b=0 w T x + b = 0 。任一点x到超平面(w,b)距离为

r=wTx+bw. r = | w T x + b | ‖ w ‖ .

假设超平面将样本正确分类,则对于 (xi,yi)D ( x i , y i ) ∈ D ,若 yi=+1 y i = + 1 ,有 wTxi+b>0 w T x i + b > 0 ;若 yi=1 y i = − 1 ,有 wTxi+b<0 w T x i + b < 0 。令
{wTxi+b+1,wTxi+b1,yi=+1yi=1 { w T x i + b ≥ + 1 , y i = + 1 w T x i + b ≤ − 1 , y i = − 1

wTx+b=±1 w T x + b = ± 1 为”支持向量“,支持向量间距离,即“间隔”为 γ=2w γ = 2 ‖ w ‖

欲找到“最大间隔”的超平面,即最大化 w1 ‖ w ‖ − 1 ,等价于最小化 w2 ‖ w ‖ 2 。于是支持向量基的基本型为

min12w2 m i n 1 2 ‖ w ‖ 2

s.t.yi(wTxi+b)1 s . t . y i ( w T x i + b ) ≥ 1

对偶问题

对基本型问题应用拉格朗日乘子法得到其“对偶问题”,求解对偶问题更高效。基本型的拉格朗日函数为

L(w,b,α)=12w2+i=1mαi(1yi(wTxi+b)) L ( w , b , α ) = 1 2 ‖ w ‖ 2 + ∑ i = 1 m α i ( 1 − y i ( w T x i + b ) )

令L对w和b偏导为0,代入L得对偶问题为
maxi=1mαi12i=1mj=1mαiαjyiyjxTixj m a x ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j

s.t.i=1mαiyi=0 s . t . ∑ i = 1 m α i y i = 0

αi0 α i ≥ 0

上述过程需满足KKT条件
αi0yif(xi)10αi(yif(xi)1)=0 { α i ≥ 0 y i f ( x i ) − 1 ≥ 0 α i ( y i f ( x i ) − 1 ) = 0

SMO算法求解对偶问题。思路是每次选择两个变量 αiαj α i 、 α j ,固定其他参数,求解对偶问题问题更新 αiαj α i 、 α j ,直到收敛。

违背KKT条件程度越大,变量更新后导致的目标函数值减幅越大,所以每次选择的样本尽量有很大的差别。

核函数

如果样本不是线性可分的,可将样本从原始空间映射到更高维的特征空间,使样本在高维空间里线性可分。

  • φ(x) φ ( x ) 表示将x映射后的特征向量,于是特征空间中划分超平面为 f(x)=wTφ(x)+b f ( x ) = w T φ ( x ) + b ,并有类似上文的原问题及对偶问题。
  • 计算对偶问题涉及内积计算,对无穷维计算内积很困难,因此将特征空间的内积定义为原始样本空间的”核函数“。

常用核函数:
线性核 κ(xi,xj)=xTixj κ ( x i , x j ) = x i T x j
高斯核 κ(xi,xj)=exp(xixj22δ2) κ ( x i , x j ) = e x p ( − ‖ x i − x j ‖ 2 2 δ 2 )

软间隔与正则化

防止过拟合,允许软间隔,即最大化间隔的同时,不满足样本尽可能少并引入松弛变量。于是优化函数为

min12w2+Ci=1mι0/1(yi(wTxi+b)1) m i n 1 2 ‖ w ‖ 2 + C ∑ i = 1 m ι 0 / 1 ( y i ( w T x i + b ) − 1 )

“0-1损失函数”不连续,一般用替代损失函数,如
hinge损失 ιhinge(z)=max(0,1z) ι h i n g e ( z ) = m a x ( 0 , 1 − z )

python sklearn实现

import pandas as pd
import numpy as np
from sklearn import svm
from sklearn.model_selection import train_test_split,cross_val_score
import matplotlib.pyplot as plt
import matplotlib as mpl

# txt也可以用read_csv读成dataframe,.loc取出需要的列 行数表示到某一行
iris = pd.read_csv('E:\\study\\data\\iris.txt',sep=',',skiprows=[1])
X = iris.loc[:,['sepal length','sepal width']]
y = iris.loc[:,['class']]

x_train,x_test,y_train,y_test = train_test_split(X,y,test_size=0.3)
clf = svm.SVC(C=0.8,kernel='rbf',gamma=20,decision_function_shape='ovr')
clf.fit(x_train,y_train)
print clf.score(x_test,y_test) #精确度0.778

优缺点

优点:只关心支持向量,模型鲁棒性高,适用小样本。线性可分情况下SVM相当于逻辑回归,可使用非线性核解决线性不可分的情况。
缺点:噪声敏感,对大规模训练样本难以实施,对多分类问题存在困难。

tips

  • 如果feature数量很大,跟样本数量差不多,选用LR或者线性核的SVM;
  • 如果feature数量小,样本数量一般,选用高斯核SVM;
  • 如果feature数量小,样本数量多,需要手工添加一些feature变成第一种情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值