机器学习 04:软间隔支持向量机




主要思想


上篇文章提到了线性可分支持向量机,顾名思义,这个算法可以解决线性可分的数据,但在实际情况下几乎不存在完全线性可分的数据,为解决这个问题,需要引入“软间隔”这个概念,意思是允许一些点不满足约束条件 y i ( w ⃗ ⋅ x ⃗ j + b ) ≥ 1 y_i(\vec w\cdot\vec x_j+b)\ge1 yi(w x j+b)1



引入 Hinge 函数


使用 h i n g e hinge hinge 损失函数将原优化问题

min ⁡ w ⃗ 1 2 ∥ w ⃗ ∥ 2 s . t .   y i ( w ⃗ ⋅ x ⃗ j + b ) ≥ 1 \min\limits_{\vec w}\frac{1}{2}\parallel\vec w\parallel^2\\s.t.\ y_i(\vec w\cdot\vec x_j+b)\ge1 w min21w 2s.t. yi(w x j+b)1

改写为:

min ⁡ w ⃗ 1 2 ∥ w ⃗ ∥ 2 + C ∑ i = 1 N ξ i s . t .   y i ( w ⃗ ⋅ x ⃗ j + b ) ≥ 1 − ξ i \min\limits_{\vec w}\frac{1}{2}\parallel\vec w\parallel^2+C\sum\limits^N_{i=1}\xi_i\\s.t.\ y_i(\vec w\cdot\vec x_j+b)\ge1-\xi_i w min21w 2+Ci=1Nξis.t. yi(w x j+b)1ξi

其中 ξ i \xi_i ξi 为“松弛变量”, ξ i = max ⁡ ( 0 , 1 − y i ( w ⃗ ⋅ x ⃗ i + b ) ) \xi_i=\max(0,1-y_i(\vec w\cdot\vec x_i+b)) ξi=max(0,1yi(w x i+b)),是一个 h i n g e hinge hinge 损失函数,它反应了所有在边界内的点(也就是分类错误的点)到边界的距离。每一个样本对应一个松弛变量,松弛变量描绘了该样本不满足约束的程度。

C > 0 C>0 C>0 为惩罚函数, C C C 越大,对分类的惩罚越大。或者可以理解为, C C C 越大,边界越小(因为一但有一个在边界内的点都会带来很大的惩罚)



拉格朗日乘子法


把原优化问题

min ⁡ w ⃗ , b , x ⃗ i 1 2 ∥ w ⃗ ∥ 2 + C ∑ i = 1 N ξ i s . t .   y i ( w ⃗ ⋅ x ⃗ i + b ) ≥ 1 − ξ i ,   ξ ≥ 0 \min\limits_{\vec w,b,\vec x_i}\frac{1}{2}\parallel\vec w\parallel^2+C\sum\limits^N_{i=1}\xi_i\\s.t.\ y_i(\vec w\cdot\vec x_i+b)\ge1-\xi_i,\ \xi\ge0 w ,b,x imin21w 2+Ci=1Nξis.t. yi(w x i+b)1ξi, ξ0

转换成拉格朗日函数

L ( w ⃗ , b , α ⃗ , ξ ⃗ , μ ⃗ ) = 1 2 ∥ w ⃗ ∥ 2 + C ∑ i = 1 N ξ i − ∑ i = 1 N α i ( y i ( w ⃗ ⋅ x ⃗ i + b ) − 1 + ξ i ) − ∑ i = 1 N μ i ξ i L(\vec w,b,\vec\alpha,\vec\xi,\vec\mu)=\frac{1}{2}\parallel\vec w\parallel^2+C\sum\limits^N_{i=1}\xi_i-\sum\limits^N_{i=1}\alpha_i(y_i(\vec w\cdot\vec x_i+b)-1+\xi_i)-\sum\limits^N_{i=1}\mu_i\xi_i L(w ,b,α ,ξ ,μ )=21w 2+Ci=1Nξii=1Nαi(yi(w x i+b)1+ξi)i=1Nμiξi

其中 α i ≥ 0 , μ i ≥ 0 \alpha_i\ge0,\mu_i\ge0 αi0,μi0

L ( w ⃗ , b , ξ ⃗ ) L(\vec w,b,\vec \xi) L(w ,b,ξ ) w ⃗ , b , ξ ⃗ \vec w,b,\vec \xi w ,b,ξ 求偏导(中间略去的过程参考线性可分支持向量机

w ⃗ = ∑ i = 1 N α i y i x ⃗ i ∑ i = 1 N α i y i = 0 C = α i + μ i \vec w=\sum\limits^N_{i=1}\alpha_iy_i\vec x_i\\\sum\limits^N_{i=1}\alpha_iy_i=0\\C=\alpha_i+\mu_i w =i=1Nαiyix ii=1Nαiyi=0C=αi+μi

代回原式:

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 \max\limits_{\vec\alpha}\sum\limits^N_{i=1}\alpha_i-\frac{1}{2}\sum\limits^N_{i=1}\sum\limits^N_{j=1}\alpha_i\alpha_jy_iy_j\vec x_i^T\vec x_j\\s.t.\ \sum\limits^N_{i=1}\alpha_iy_i=0,\ 0\le\alpha_i\le C α maxi=1Nαi21i=1Nj=1Nαiαjyiyjx iTx js.t. i=1Nαiyi=0, 0αiC

之后的过程与线性可分支持向量机相同。


调库实现:

from sklearn import svm
from sklearn import datasets
from sklearn.model_selection import train_test_split

My_Data = datasets.load_iris()
x = My_Data['data']
y = My_Data['target']
train_x, test_x, train_y, test_y = train_test_split(x, y, test_size = 0.3)

clf = svm.SVC(C = 1, kernel='linear')
clf.fit(train_x, train_y)

clf.predict(test_x)
print(clf.score(test_x, test_y))




同步更新于:SP-FA 的博客


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SP FA

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值