支持向量机

支持向量机(support vector machines,SVM)是一种二类分类模型。它的基本模型是定义在特征空间上的间隔最大的线性分类器,间隔最大使它有别于感知机;支持向量机还包括核技巧,这使它成为实质上的非线性分类器。支持向量机的学习策略就是间隔最大化,可形式化为一个求解凸二次规划的问题,也等价于正则化的合页损失函数的最小化问题。支持向量机的学习算法是求解凸二次规划的最优化算法。

关于支持向量机一个通俗易懂的例子:Support Vector Machines explained well
对应的中文翻译:支持向量机(SVM)是什么意思?
对应的视频解释:https://www.youtube.com/watch?v=3liCbRZPrZA

看完上面的例子,应该对SVM有了一个基本的了解。

在样本空间中,划分超平面可通过如下线性方程来描述:

wTx+b=0,(1) (1) w T x + b = 0 ,

样本空间中任意点x到超平面(w, b)的距离可写为:
r=|wTx+b|||w||(2) (2) r = | w T x + b | | | w | |

假设超平面(w, b)能将训练样本正确分类,即对于 (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,yi=+1;wTxi+b1,yi=1.(3) (3) w T x i + b ≥ + 1 , y i = + 1 ; w T x i + b ≤ − 1 , y i = − 1.

如下图所示,距离超平面最近的几个训练样本使上式的等号成立,他们被称为“支持向量”(support vector),两个异类支持向量到超平面的距离之和为
γ=2||w||(4) (4) γ = 2 | | w | |

它被称为“间隔”(margin).


这里写图片描述

欲找到具有“最大间隔”(maximum margin)的划分超平面,也就是要找到满足上式中约束的参数w和b,使得 γ γ 最大,即

maxw,b2||w||s.t.yi(wTxi+b)1,i=1,2,,m.(7)(8)(5) (5) (7) max w , b 2 | | w | | (8) s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , ⋯ , m .

显然,为了最大化间隔,仅需要最大化 ||w||1 | | w | | − 1 ,于是,式(5)可重写为
minw,b12||w||2s.t.yi(wTxi+b)1,i=1,2,,m.(9)(10)(6) (6) (9) min w , b 1 2 | | w | | 2 (10) s . t . y i ( w T x i + b ) ≥ 1 , i = 1 , 2 , ⋯ , m .

在这就是支持向量机的基本型。

对偶问题
式(6)是一个凸二次规划问题,能直接用现成的优化包求解,但我们可以有更高效的办法。对上式使用拉格朗日乘子法可得其“对偶问题”(dural problem)。

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

其中 α=(α1;α2;;αm) α = ( α 1 ; α 2 ; ⋯ ; α m ) 。令 L(w,b,α) L ( w , b , α ) w w 和b的偏导为零可得
w=i=1mαiyixi(8) (8) w = ∑ i = 1 m α i y i x i

0=i=1mαiyi(9) (9) 0 = ∑ i = 1 m α i y i

将式(8)代入式(7), 就得到式(6)的对偶问题
maxαi=1mαi12i=1mj=1mαiαjyiyjxTixjs.t.i=1mαiyi=0αi0,i=1,2,,m.(11)(12)(10) (11) max α ∑ i = 1 m α i − 1 2 ∑ i = 1 m ∑ j = 1 m α i α j y i y j x i T x j (12) s . t . ∑ i = 1 m α i y i = 0 (10) α i ≥ 0 , i = 1 , 2 , ⋯ , m .

软间隔
在前面的讨论中, 我们一直假定训练样本在样本空间是线性可分的,即存在一个超平面能将不同类的样本完全分开。当线性不可分时,可以引入“软间隔”(soft magin)的概念。
前面介绍的支持向量机要求所有的样本均满足约束(3),这称为硬间隔,而软间隔则是允许某些样本不满足约束。当然,在最大化间隔的同时,不满足约束的样本应尽可能少。

sklearn实现

线性可分时:

import numpy as np
X = np.array([[-2, -1], [-1, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
from sklearn.svm import SVC
clf = SVC()
clf.fit(X, y)

SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
decision_function_shape=’ovr’, degree=3, gamma=’auto’, kernel=’rbf’,
max_iter=-1, probability=False, random_state=None, shrinking=True,
tol=0.001, verbose=False)
上面是分类器的默认参数

预测点(-0.8, -1)

print(clf.predict([[-0.8, -1]]))

得到:[1]

可视化决策边界:

import matplotlib.pyplot as plt
h = .02
x_min, x_max = -5.5, 5.5
y_min, y_max = -5.5, 5.5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h),
                     np.arange(y_min, y_max, h))

color_map = {1: (1, 0, 0),  2: (0, 0, 1)}

Z = clf.predict(np.c_[xx.ravel(), yy.ravel()])

# Put the result into a color plot
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.Paired)

# Plot also the training points
colors = [color_map[y1] for y1 in y]
plt.scatter(X[:, 0], X[:, 1], c=colors, edgecolors='black')

plt.title('SVC with rbf kernel')
plt.show()


这里写图片描述

由上面分类其的默认参数 kernel=’rbf’ 可知,核函数是径向基函数,可以分类非线性可分的数据。
我们将数据变为线性不可分,只需要将y变为[1, 2, 1, 2]即可,其他代码不变,获取的分类器如下图所示:


这里写图片描述

参考:机器学习, 周志华 著
sklearn.svm.SVC

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值