机器学习算法系列之–支持向量机(揭开SVM的神秘面纱)
支持向量机(Support Vector Machine :SVM):二分类算法模型,数据集较小时,分类效果甚至优于神经网络。
其最大的特点在于:能够造出最大间距的决策边界,从而提高分类算法的鲁棒性。
主要用于解决模式识别领域中的数据分类问题,属于有监督学习算法的一种
一、算法概述
- 我们希望寻找到这样的直线,使得距离这条直线最近的点到这条直线的距离最短。
- 我们从如下右图直观来解释这一句话就是要求的两条外面的线之间的间隔最大。
- 这是可以理解的,因为假如数据样本是随机出现的,那么这样分割之后数据点落入到其类别一侧的概率越高那么最终预测的准确率也会越高。
- 在高维空间中这样的直线称之为超平面,因为当维数大于三的时候我们已经无法想象出这个平面的具体样子。
- 那些距离这个超平面最近的点就是所谓支持向量,实际上如果确定了支持向量也就确定了这个超平面,找到这些支持向量之后其他样本就不会起作用了。
基本模型是定义在特征空间上的间隔最大的先行分类器,目标是找到一个决策边界(超平面),使得离超平面最近的点到超平面的距离越远越好。例如下图,3条线都可以将两类数据分开,如何选择“最好的”一条线,是支持向量机(SVM)算法思想的核心。
- 超平面:如果空间是3维的,那么它的超平面是2维平面,而如果空间是2维的,则其超平面是1维线。
二、算法原理
2.1、线性可分支持向量机
- 支持向量机最简单的就是线性可分支持向量机,解决线性可分问题(能由一条线完全分为两类)。当训练数据线性可分时,通过硬间隔最大化,学习一个线性的分类器,也称为硬间隔支持向量机,可以表示为凸二次规划问题。
- 有些概念会提到,可能不清楚,但别急,往下看,自然就清楚了。
2.1.1、算法描述:
- 给定训练样本集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) , 标签: y i ∈ D = {(x_1,y_1),(x_2,y_2),...,(x_m, y_m)} , 标签:y_i\in D=(x1,y1),(x2,y2),...,(xm,ym),标签:yi∈{-1, +1}
- 假设训练样本的数据集是线性可分的。
- 学习得到分离差超平面: w T x i + b = 0 w^Tx_i+b=0 wTxi+b=0。(一般化的向量形式)
- 对应分类决策函数:
f
(
x
)
=
s
i
g
n
(
w
T
+
b
)
f(x)=sign(w^T+b)
f(x)=sign(wT+b),其中sign( )为符号函数,
s i g n ( x ) = { + 1 , x ≥ 0 − 1 , x ≤ 0 ; sign(x)= \begin{cases} +1, x\ge0\\ -1, x\le0 \end{cases}; sign(x)={+1,x≥0−1,x≤0;
目标:“硬间隔”最大化
注:(w,b)是带定参数,其中w是向量,b是常数; w = ( w 1 , w 2 , . . . , w n ) T w=(w_1,w_2,...,w_n)^T w=(w1,w2,...,wn)T, x 1 = ( x 1 , x 2 , . . . , x n ) T x_1=(x_1,x_2,...,x_n)^T x1=(x1,x2,...,xn)T
(1)硬间隔、硬间隔最大化
样本空间中任意点x到超平面的距离可以写为
d
=
∣
w
T
x
+
b
∣
∣
∣
w
∣
∣
d=\frac{|w^Tx+b|}{||w||}
d=∣∣w∣∣∣wTx+b∣
其中||W||为超平面的范数:
w
2
\sqrt{w^2}
w2,常数b类似于直线方程中的截距。
-
二维空间中点(x, y)到直线的距离:(x,y) = ∣ A x + B y + C ∣ A 2 + B 2 \frac{|Ax+By+C|}{\sqrt{A^2+B^2}} A2+B2∣Ax+By+C∣
-
三维空间中点(x, y, z)到平面的距离:(x,y,z)= ∣ A x + B y + C z + D ∣ A 2 + B 2 + C 2 \frac{|Ax+By+Cz+D|}{\sqrt{A^2+B^2+C^2}} A2+B2+C2∣Ax+By+Cz+D∣
支持向量:离超平面最近的几个训练样本点,使得
y
i
(
w
T
x
i
+
b
)
=
+
1
y_i(w^Tx_i+b)=+1
yi(wTxi+b)=+1成立.
间隔:两个异类支持向量到超平面的距离和: d
硬间隔:满足所有样本都划分正确。
-
图中 A 点即为支持向量,由其所在直线表达式可知: ∣ w T x + b ∣ = 1 |w^Tx+b|=1 ∣wTx+b∣=1,
-
最优分隔超平面由支持向量完全决定。
-
因此,支持向量到分割超平面距离d为: 1 ∣ ∣ w ∣ ∣ + 1 ∣ ∣ w ∣ ∣ = 2 ∣ ∣ w ∣ ∣ \frac{1}{||w||}+\frac{1}{||w||}=\frac{2}{||w||} ∣∣w∣∣1+∣∣w∣∣1=∣∣w∣∣2;因此,离超平面最近的点到超平面的距离越远越好
-
对于形状为“x”的点,必定满足 w T x + b ≥ 1 w^Tx+b\ge1 wTx+b≥1的约束条件;
-
对于形状为“·”的点,必定满足 w T x + b ≤ − 1 w^Tx+b\le-1 wTx+b≤−1的约束条件。
-
相当于使用+1,-1当作类别标签,类似于逻辑回归中的0,1都是为了简化数学表达。
我们要求的就是距离d的最大值,于是可以转化为其等价形式:最小化
1
2
∣
∣
w
∣
∣
2
=
1
2
∑
j
=
1
n
w
j
2
s
.
t
.
:
y
i
(
w
x
i
+
b
)
−
1
≥
0
,
i
=
1
,
2
,
.
.
.
,
N
\frac{1}{2}||w||^2=\frac{1}{2}\sum_{j=1}^{n}w_j^2\\ s.t. :y_i(wx_i+b)-1\ge0,i=1,2,...,N
21∣∣w∣∣2=21j=1∑nwj2s.t.:yi(wxi+b)−1≥0,i=1,2,...,N其中
1
2
\frac{1}{2}
21是为了便于求导运算加上的,可简化运算。
这是一个凸二次规划问题。
(2)间隔最大化求解----拉格朗日乘子法
一般的极值优化问题的三种情况:
• 无约束条件:求导找到极值点、梯度下降: min f(x) ;
• 等式约束条件:拉格朗日乘子法、消元法转化问题
m
i
n
f
(
x
)
,
h
(
x
)
=
0.
minf(x),\\h(x)=0.
minf(x),h(x)=0.
• 不等式约束条件:拉格朗日乘子法 + KKT条件
m
i
n
f
(
x
)
,
g
(
x
)
≤
0
h
(
x
)
=
0.
minf(x),\\g(x)\le0\\h(x)=0.
minf(x),g(x)≤0h(x)=0.该约束最优化问题也就是凸优化问题。
其中
目标函数
f
(
x
)
和约束函数
g
(
x
)
目标函数f(x)和约束函数g(x)
目标函数f(x)和约束函数g(x)都是连续可微凸函数,约束函数
h
(
x
)
h(x)
h(x)是仿射函数。
当目标函数是二次函数,且约束函数g(x)是仿射函数时,上述凸最优化问题成为凸二次规划问题。
在约束最优化问题中,常常利用拉格朗日对偶性将原始问题转换为对偶问题,通过对对偶问题求解得到原问题的解:
- 第一步:利用拉格朗日乘子法,得到原问题的对偶问题;
- 第二步:再利用KKT条件,解得最优参数w,b。
二次规划的对偶问题:
优点,是对偶问题往往更容易求解,二,自然引入核函数,进而推广到非线性分类问题
- 首先将目标函数与约束条件构建成拉格朗日函数。为此,对每一个不等式约束引入拉格朗日乘子α。
根据拉格朗日的对偶性,原始问题极小极大问题转变为对偶问题极大极小问题 - 将拉格朗日函数
L
(
w
,
b
,
α
)
L(w,b,\alpha)
L(w,b,α) 分别对w, b, α求偏导并令其为0(会涉及矩阵求导)。
得到:
- 将结果带入拉格朗日函数中,消去w,b:
- 求
m
i
n
w
,
b
L
(
w
,
b
,
α
)
对
α
min_{w,b}L(w,b,\alpha)对\alpha
minw,bL(w,b,α)对α的极大,即得到对偶问题:
将其转化为求最小之后,便得到:
m
i
n
1
2
∑
i
=
1
N
∑
j
=
1
N
α
i
α
j
y
i
y
j
(
x
i
⋅
x
j
)
−
∑
i
=
1
N
α
i
s
.
t
.
:
∑
i
=
1
N
α
i
y
i
=
0
,
(
α
i
≥
0
,
i
=
1
,
2
,
.
.
.
,
N
)
min \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^N\alpha_i\\ s.t.:\sum_{i=1}^N\alpha_iy_i=0, (\alpha_i\ge0,i=1,2,...,N)
min21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαis.t.:i=1∑Nαiyi=0,(αi≥0,i=1,2,...,N)
其中,
α
=
(
α
1
,
.
.
.
,
α
N
)
\alpha=(\alpha_1,...,\alpha_N)
α=(α1,...,αN)是拉格朗日乘子向量。
通常,通过求解对偶问题学习线性可分支持向量机,即首先求解对偶问题的最优值
α
∗
\alpha^*
α∗,然后求最优值
w
∗
w^*
w∗和
b
∗
b^*
b∗,得出分隔超平面和分类决策函数。
KKT条件要求:
由上可得,设 α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α m ∗ \alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_m^* α∗=(α1∗,α2∗,...,αm∗是对偶问题的最优解,则存在下标j,使得0< α j ∗ \alpha_j^* αj∗<C,使得原始问题的最优参数 w ∗ , b ∗ w^*,b^* w∗,b∗为:
2.1.2算法流程总结
- 输入:线性可分训练集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) , 标签: y i ∈ D = {(x_1,y_1),(x_2,y_2),...,(x_m, y_m)} , 标签:y_i\in D=(x1,y1),(x2,y2),...,(xm,ym),标签:yi∈{-1, +1}
- 输出:分离超平面和分类决策函数
①、构造并求解带约束的最优化问题:
求得最优解(对偶问题的解) α ∗ = ( α 1 ∗ , α 2 ∗ , . . . , α N ∗ ) \alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_N^*) α∗=(α1∗,α2∗,...,αN∗)。
②、计算: w ∗ = ∑ i = 1 N α i ∗ y i x i w^*=\sum_{i=1}^N\alpha_i^*y_ix_i w∗=∑i=1Nαi∗yixi
并选择 α ∗ \alpha^* α∗的一个正分量 α j ∗ \alpha_j^* αj∗>0,计算 b ∗ = y j − ∑ i = 1 N α i ∗ y i x i T x j b^*=y_j-\sum_{i=1}^N\alpha_i^*y_ix_i^Tx_j b∗=yj−∑i=1Nαi∗yixiTxj
③、由此求得分离超平面: w ∗ x + b ∗ = 0 w^*x+b^*=0 w∗x+b∗=0;以及分类决策函数: f ( x ) = s i g n ( w ∗ x + b ∗ ) f(x) = sign(w^*x+b^*) f(x)=sign(w∗x+b∗)
注:
- 只要D线性可分,那就一定可以求出一个(w,b),存在且唯一存在;若线性不可分,则无法求出。
- 一句话总结:求解SVM算法,就是在约束条件 y i ( w T x + b ) ≥ 1 y_i(w^Tx+b)\ge1 yi(wTx+b)≥1的前提下,求解 ∣ ∣ w ∣ ∣ 2 的最小值 ||w||^2的最小值 ∣∣w∣∣2的最小值
- 在决定超平面时只有支持向量起作用,其他样本点并不起作用,所以这种分类模型称为支持向量机。
- 向量的个数一般很少,所以支持向量机是由“重要的”少量的训练样本确定的
2.2、线性支持向量机
2.2.1算法描述
前面的讨论中,我们一直假定训练样本在样本空间中是线性可分的,即存在一个超平面能将不同类的样本完全划分开,也就是硬间隔。然而现实任务中往往不太可能;
因此,我们引入软间隔,允许支持向量机在某些样本上出错。这样的线性支持向量机也成为软间隔支持向量机
硬间隔:所有样本都必须划分正确
软间隔:允许一些样本出错,也就是允许一些样本不满足 y i ( w T + b ) ≥ 1 y_i(w^T+b)\ge1 yi(wT+b)≥1
松弛系数:为了解决无法找到最大间距的分割超平面问题,引入了一个参数 ε \varepsilon ε,称为松弛系数
此时,为确保在最大化间隔,同时误分类点尽量少。对每个松弛标量付出一定的代价,所以目标优化函数变为
m
i
n
w
,
b
,
ε
i
1
2
∣
∣
w
∣
∣
2
+
R
∑
i
=
1
m
ε
i
min_{w,b,\varepsilon_i} \frac{1}{2}||w||^2+R\sum_{i=1}^m\varepsilon_i
minw,b,εi21∣∣w∣∣2+Ri=1∑mεi
其中m为数据集的个数,R为算法参数,其对应的约束条件(s.t.)也变成:
y
i
(
w
T
x
+
b
)
≥
1
−
ε
i
ε
i
≥
0
y_i(w^Tx+b)\ge1-\varepsilon_i\\ \varepsilon_i\ge0
yi(wTx+b)≥1−εiεi≥0
如何理解松弛系数?我们可以把
ε
i
\varepsilon_i
εi理解为样本数据违反最大间距规则的程度,对于正常样本,即满足约束条件
ε
\varepsilon
ε=0;而对于部分违反最大间距规则的样本
ε
\varepsilon
ε>0。
参数R则为惩罚参数,R值大,对误分类的惩罚增大,反之减小(以一定的步伐变化,找出最好的那个)。
可以看出,引入松弛系数类似于逻辑回归里成本函数引入正则项,目的都是为了纠正过拟合问题,让支持向量机对噪声数据有更强的适应性。
求参数也是采用拉格朗日乘子法,和上述方法步骤相同(仅多了一个惩罚因子),算法流程也基本相同。
对偶问题:
- 根据目标优化函数,通过拉格朗日乘子法得到拉格朗日函数:
- 分别对参数求偏导并令其为0:
- 将结果带入,得到对偶问题:
等价于:
m i n 1 2 ∑ i = 1 N ∑ j = 1 N α i α j y i y j ( x i ⋅ x j ) − ∑ i = 1 N α i s . t . : ∑ i = 1 N α i y i = 0 , ( 0 ≤ α i ≤ C , i = 1 , 2 , . . . , N ) min \frac{1}{2}\sum_{i=1}^N\sum_{j=1}^N\alpha_i\alpha_jy_iy_j(x_i\cdot x_j)-\sum_{i=1}^N\alpha_i\\ s.t.:\sum_{i=1}^N\alpha_iy_i=0, \\ (0\le\alpha_i\le C,i=1,2,...,N) min21i=1∑Nj=1∑Nαiαjyiyj(xi⋅xj)−i=1∑Nαis.t.:i=1∑Nαiyi=0,(0≤αi≤C,i=1,2,...,N)
2.2.2算法流程总结
- 输入:线性可分训练集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) , 标签: y i ∈ D = {(x_1,y_1),(x_2,y_2),...,(x_m, y_m)} , 标签:y_i\in D=(x1,y1),(x2,y2),...,(xm,ym),标签:yi∈{-1, +1}
- 输出:分离超平面和分类决策函数
①、构造并求解带约束的最优化问题:
求得最优解(对偶问题的解)
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
\alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_N^*)
α∗=(α1∗,α2∗,...,αN∗)。
②、计算:
w
∗
=
∑
i
=
1
N
α
i
∗
y
i
x
i
w^*=\sum_{i=1}^N\alpha_i^*y_ix_i
w∗=∑i=1Nαi∗yixi
并选择
α
∗
\alpha^*
α∗的一个正分量
0
<
α
j
∗
0<\alpha_j^*
0<αj∗<C,计算
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
x
i
T
x
j
b^*=y_j-\sum_{i=1}^N\alpha_i^*y_ix_i^Tx_j
b∗=yj−∑i=1Nαi∗yixiTxj
③、由此求得分离超平面:
w
∗
x
+
b
∗
=
0
w^*x+b^*=0
w∗x+b∗=0;以及分类决策函数:
f
(
x
)
=
s
i
g
n
(
w
∗
x
+
b
∗
)
f(x) = sign(w^*x+b^*)
f(x)=sign(w∗x+b∗)
注:此处的解
w
∗
唯一,但
b
∗
不一定
w^*唯一,但b^*不一定
w∗唯一,但b∗不一定
2.3、非线性支持向量机与核函数
在现实任务中,原始的样本空间可能并不存在一个能正确划分两类样本的超平面,因此,需要利用非线性模型才能很好地进行分类。这时可以使用非线性支持向量机,主要特点就是利用核技巧(kernel trick)。
2.3.1、核技巧
非线性问题往往不好求解,所以我们希望能用解线性分类问题的方法来解决该问题。所以需要采取非线性变换,将非线性问题转变为线性问题,进而求解原来非线性问题。核技巧就属于这样的方法:
- 高维映射:首先使用一个变换将原空间的数据映射到新空间(更高的维度);定义从原样本空间到新空间的变换(映射)函数为 φ ( x ) \varphi(x) φ(x)
- 然后在新空间里用线性分类学习方法从训练数据中学习分类模型
注:
φ
(
x
)
\varphi(x)
φ(x)是无限维。
也就是将样本映射到一个更高维度的特征空间中,使得其线性可分。如:
如果原始空间是有限维,即属性数有限,那么一定存在一个高维特征空间使样本可分;且维度越高,越容易被线性划分
令
φ
(
x
)
\varphi(x)
φ(x)为将x映射后的特征向量,于是在新的特征空间中划分超平面可以表示为
f
(
x
)
=
w
T
φ
(
x
)
+
b
f(x)=w^T\varphi(x)+b
f(x)=wTφ(x)+b
使用软间隔最大化,目标函数为:
m
i
n
w
,
b
,
ε
1
2
∣
∣
w
∣
∣
2
+
R
∑
i
=
1
m
ε
i
s
.
t
.
(
约束条件
)
:
{
y
i
(
w
T
φ
(
x
i
)
+
b
)
≥
1
−
ε
i
,
此处将
x
i
替换为了
φ
(
x
i
)
ε
i
≥
0
,
i
=
1
,
2
,
.
.
.
,
m
min_{w,b,\varepsilon} \frac{1}{2}||w||^2+R\sum_{i=1}^m\varepsilon_i\\ s.t.(约束条件):\begin{cases} y_i(w^T\varphi(x_i)+b)\ge1-\varepsilon_i, 此处将x_i替换为了\varphi(x_i)\\ \varepsilon_i\ge0, i = 1,2,...,m \end{cases}
minw,b,ε21∣∣w∣∣2+Ri=1∑mεis.t.(约束条件):{yi(wTφ(xi)+b)≥1−εi,此处将xi替换为了φ(xi)εi≥0,i=1,2,...,m
其中w,b是模型参数,类似有: m i n w , b 1 2 ∣ ∣ w ∣ ∣ 2 min_{w,b} \frac{1}{2}||w||^2 minw,b21∣∣w∣∣2
对偶问题:
由于特征维数可能很高,直接计算
ϕ
(
x
i
)
T
ϕ
(
x
j
)
\phi(x_i)^T\phi(x_j)
ϕ(xi)Tϕ(xj)通常会很困难,因此引入了核函数。于是,我们将对偶问题重写
核函数带入之后进行求解,可得分类决策函数为:
2.3.2、核函数
定义:设
χ
\chi
χ是输入空间,
ψ
\psi
ψ为特征空间,如果存在一个从
χ
\chi
χ到
ψ
\psi
ψ的映射:
ϕ
(
x
)
\phi(x)
ϕ(x),使得对所有的
x
,
z
∈
χ
x,z\in\chi
x,z∈χ,函数
K
(
x
,
z
)
K(x,z)
K(x,z)满足条件
K
(
x
,
z
)
=
ϕ
(
x
)
⋅
ϕ
(
z
)
K(x,z)=\phi(x)\cdot\phi(z)
K(x,z)=ϕ(x)⋅ϕ(z)
则称K(x, z)为核函数(二者的内积),
ϕ
(
x
)
\phi(x)
ϕ(x)为映射函数。
- 我们不需要知道无限维映射函数 ϕ ( x ) \phi(x) ϕ(x)的显示表达,我们只需要知道一个核函数(kernel function)K(x,z)= ϕ ( x ) T ϕ ( z ) \phi(x)^T\phi(z) ϕ(x)Tϕ(z)(两个无限维向量的内积),替换掉软间隔限制条件中的 x i 或者 φ ( x i ) x_i或者\varphi(x_i) xi或者φ(xi),则对应的优化式仍然是可解的。
-
注:K(x,z)能写成 ϕ ( x ) T ϕ ( z ) \phi(x)^T\phi(z) ϕ(x)Tϕ(z)的充要条件如下(Mercer’s Theorem),
① 交换性:K(x,z)= K(z, x)
② 半正定性: ∀ C i , X i ( i = 1 , 2 , . . . , N ) , 有 ∑ i = 1 N ∑ j = 1 N C i C j K ( X i , X j ) ≥ 0 \forall C_i,X_i(i=1,2,...,N),有 \sum_{i=1}^N\sum_{j=1}^NC_iC_jK(X_i, X_j) \ge0 ∀Ci,Xi(i=1,2,...,N),有∑i=1N∑j=1NCiCjK(Xi,Xj)≥0 -
在实际应用中往往依赖领域知识直接选择核函数,核函数的选择成为支持向量机最大的变数,模型的有效性需要通过实验验证。
常用的核函数:
-
线性核Linear
K ( x i , x j ) = x i T x j K(x_i,x_j)=x_i^Tx_j K(xi,xj)=xiTxj
两向量的内积,相当于没有用核。 -
多项式核Ploy(常用)
K ( x i , x j ) = ( x i T x j ) d K(x_i,x_j)=(x_i^Tx_j)^d K(xi,xj)=(xiTxj)d
其中d大于等于1,为多项式的次数;
d值越大,维度越高。
当d=1时,退化为线性核。 -
高斯核Rbf(常用)
K ( x i , x j ) = e − ∣ ∣ x i − x j ∣ ∣ 2 2 σ 2 K(x_i,x_j)=e^{-\frac{||x_i-x_j||^2}{2\sigma^2}} K(xi,xj)=e−2σ2∣∣xi−xj∣∣2
其中 σ \sigma σ为高斯核的带宽(width);
例如,如果我们输入的特征是一维的标量,高斯核函数对应的形状是一个反钟形的曲线,该参数就是控制其宽度的。
该核对应的 ϕ ( x ) \phi(x) ϕ(x)是无限维的:函数可以将输入特征映射到无限多维。公式的推导会用到泰勒公式。 -
拉普拉斯核
K ( x i , x j ) = e − ∣ ∣ x i − x j ∣ ∣ σ K(x_i,x_j)=e^{-\frac{||x_i-x_j||}{\sigma}} K(xi,xj)=e−σ∣∣xi−xj∣∣
其中 σ > 0 \sigma>0 σ>0 -
sigmoid核(常用)
K ( x i , x j ) = t a n h ( β x T + b ) K(x_i,x_j)=tanh(\beta x^T+b) K(xi,xj)=tanh(βxT+b)
其中tanh为双曲正切函数: t a n h ( x ) = e x − e − x e x + e − x , β > 0 , b < 0 tanh(x)=\frac{e^x-e^{-x}}{e^x+e^{-x}}, \beta>0, b<0 tanh(x)=ex+e−xex−e−x,β>0,b<0
PS: 情况不明时可先尝试高斯核
2.3.3算法流程总结
- 输入:训练集 D = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) , 标签: y i ∈ D = {(x_1,y_1),(x_2,y_2),...,(x_m, y_m)} , 标签:y_i\in D=(x1,y1),(x2,y2),...,(xm,ym),标签:yi∈{-1, +1}
- 输出:分离超平面和分类决策函数
①、构造并求解带约束的最优化问题:
求得最优解(对偶问题的解)
α
∗
=
(
α
1
∗
,
α
2
∗
,
.
.
.
,
α
N
∗
)
\alpha^*=(\alpha_1^*,\alpha_2^*,...,\alpha_N^*)
α∗=(α1∗,α2∗,...,αN∗)。
②、计算:
w
∗
=
∑
i
=
1
N
α
i
∗
y
i
K
(
x
i
,
x
j
)
w^*=\sum_{i=1}^N\alpha_i^*y_iK(x_i,x_j)
w∗=∑i=1Nαi∗yiK(xi,xj)
并选择
α
∗
\alpha^*
α∗的一个正分量
0
<
α
j
∗
0<\alpha_j^*
0<αj∗<C,计算
b
∗
=
y
j
−
∑
i
=
1
N
α
i
∗
y
i
x
i
T
K
(
x
i
,
x
j
)
b^*=y_j-\sum_{i=1}^N\alpha_i^*y_ix_i^TK(x_i,x_j)
b∗=yj−∑i=1Nαi∗yixiTK(xi,xj)
③、由此求得分离超平面:
w
∗
x
+
b
∗
=
0
w^*x+b^*=0
w∗x+b∗=0;以及分类决策函数:
f
(
x
)
=
s
i
g
n
(
w
∗
x
+
b
∗
)
f(x) = sign(w^*x+b^*)
f(x)=sign(w∗x+b∗)
三、SVM算法总结
优点:
• 使用核函数可以向高维空间进行映射,解决非线性的分类;
• 分类思想很简单:将样本与决策面的间隔最大化;
• 分类效果较好,计算开销不大;
• SVM 是一种有坚实理论基础的小样本学习方法
缺点:
• 对缺失数据敏感,对参数调节和核函数的选择敏感;
• 对大规模数据训练比较困难
对偶问题以及KKT条件
- 对偶问题就是使求解更加高效且目标函数值不变,通过先消去w,b,得到关于α的函数,然后单独计算 α,通过得到的α反求w,b,最后获得超平面的参数
- 相比于先对α的不等式约束进行计算,对偶的方式使得计算更加便捷。
- 另外KKT条件就是在约束下求得目标函数极值时αi满足的条件,只有满足了kkt条件,才算是满足了目标函数和约束函数,因此下面描述的计算迭代算法也是基于KKT条件,通过不断修改不满足KKT条件的α,使其满足KKT条件,从而求出目标函数的最优值。
四、序列最小最优化算法(SMO算法)
当训练样本容量很大时,很多实现算法往往变得非常低效,以至于无法使用。
SMO是一种启发式算法,基本思路是:
- 如果所有变量的解都满足此最优化问题的KKT条件,那么这个最优化问题的解就得到了。(KKT条件是该最优化问题的充分必要条件)
- 否则,选择两个变量,固定其他变量,针对这两个变量构建一个二次规划问题。(这个二次规划问题,关于这两个变量的解应该更接近原始二次规划问题的解,因为这会使得原始二次规划问题的目标函数值变得更小,这样就可以大大提高整个算法的计算速度,)
- 子问题有两个变量,一个是违反KKT条件最严重的那一个,另一个由约束条件自动确定
如此SMO算法将原问题不断分解为子问题,并对子问题求解,直至全都满足KKT条件为止,进而达到求解原问题的目的
整个SMO算法包括两个部分:求解两个变量二次规划的解析方法,和选择变量的启发式方法
详细推导过程可参考:SVM支持向量机-SMO算法公式推导(2)
伪代码
- 输入:训练数据集 T = ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x m , y m ) , 标签: y i ∈ T = {(x_1,y_1),(x_2,y_2),...,(x_m, y_m)} , 标签:y_i\in T=(x1,y1),(x2,y2),...,(xm,ym),标签:yi∈{-1, +1},i=1,2,…,N,精度 ε \varepsilon ε;
- 输出近似解
α
\alpha
α估计值。
(1) 取初值 α ( 0 ) \alpha^{(0)} α(0),令k=0;
(2)选取优化变量 α 1 ( k ) \alpha_1^{(k)} α1(k), α 2 ( k ) \alpha_2^{(k)} α2(k),解析求解两个变量的最优化问题,求得最优解 α 1 ( k + 1 ) \alpha_1^{(k+1)} α1(k+1) α 2 ( k + 1 ) \alpha_2^{(k+1)} α2(k+1),更新 α \alpha α为 α ( k + 1 ) \alpha^{(k+1)} α(k+1)
(3)若在精度 ε \varepsilon ε范围内满足停机条件,则转(4);否则令k=k+1,转(2);
(4)取 α \alpha α估计值= α ( k + 1 ) \alpha^{(k+1)} α(k+1)。
SMO算法是支持向量机学习的一种快速算法,其特点是不断地将原二次规划问题分解为只有两个变量的二次规划子问题,并对子问题进行解析求解,知道所有变量满足KKT条件为止。这样通过启发式的方法得到原二次规划问题的最优解。因为子问题有解析解,所以每次计算子问题都很快,虽然计算子问题次数很多,但在总体上还是高效的。
四、算法实战
SVM支持向量机算法实战(SMO)可参考该博客:《机器学习实战》第六章 Python3代码-(亲自修改测试可成功运行)
以上就是关于决策树的分享,若有不妥之处,欢迎各路大佬不吝赐教~
参考:
《统计学习方法》,李航, 清华大学出版社,第二版
《机器学习》,周志华,清华大学出版社
https://blog.csdn.net/BIT_666/article/details/79865225
喜欢的伙伴点个赞关注一下吧~