支持向量机

Posted bermaker

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了支持向量机相关的知识,希望对你有一定的参考价值。

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

线性可分支持向量机与硬间隔最大化

线性可分支持向量机

输入空间和特征空间

假设输入空间和特征空间为两个不同的空间,输入空间为欧氏空间或离散集合,特征空间为欧氏空间或希尔伯特空间。线性可分支持向量机、线性支持向量机假设这两个空间的元素一一对应,并将输入空间中的输入映射为特征空间中的特征向量。非线性支持向量机利用一个从输入空间到特征空间的非线性映射将输入映射为特征向量。所以,输入都由输入空间转换到特征空间,支持向量机的学习是在特征空间进行的。

一般地,当训练数据集线性可分时,存在无穷多个分离超平面可将两类数据正确分开。感知机利用误分类最小的策略,求得分离超平面,不过这时的解有无穷多个。线性可分支持向量机利用间隔最大化求最优分离超平面,这时,解是唯一的。

线性可分支持向量机

定义

函数间隔和几何间隔

函数间隔

定义

函数间隔可以表示分类预测的正确性和确信度。

几何间隔

定义

间隔最大化

支持向量机学习的基本思想是求解能够正确划分训练数据集并且几何间隔最大的分离超平面。对线性可分的训练数据集而言,线性可分分离超平面有无穷多个(等价于感知机),但是几何间隔最大的分离超平面是唯一的。这里的间隔最大化又称为硬间隔最大化。

最大间隔分离超平面

线性可分支持向量机学习的最优化问题
[ egin{align*} & min limits_{w, b} quad frac{1}{2} {left | w ight |}^2 & ext{s.t.} quad y_i(w cdot x_i + b) - 1 geq 0, quad i=1,2, cdots, N \\end{align*} ]

最大间隔分离超平面的存在唯一性

线性可分训练数据集的最大间隔分离超平面是存在且唯一的。

支持向量和间隔边界

在线性可分情况下,训练数据集中的样本点与分离超平面距离最近的样本点的实例称为支持向量。

在决定分离超平面时只有支持向量起作用,而其他实例点并不起作用。

支持向量的个数一般很少,所以支持向量机由很少的重要的训练样本确定。

学习的对偶算法

需要了解拉格朗日对偶性

通过求解对偶问题(dual problem)得到原始问题(primal problem)的最优解,这就是线性可分支持向量机的对偶算法(dual algorithm)。

这样做的优点,一是对偶问题往往更容易求解;而是自然引入核函数,进而推广到非线性分类问题。

推导过程

先构建拉格朗日函数,即:
[ egin{align*} L(w, b, alpha) = frac{1}{2} {left | w ight |}^2 - sum_{i=1}^{N} alpha{_i} y_i (w cdot x_i + b) + sum_{i=1}^{N} alpha_i end{align*} ]
其中,(alpha = (alpha_1, alpha_2, cdots, alpha_N )^T)为拉格朗日乘子向量。

根据朗格朗日对偶性,原始问题的对偶问题是极大极小问题:
[ egin{align*} max limits_{alpha} min limits_{w, b} L(w, b, alpha) end{align*} ]

为了得到对偶问题的解,需要先求(L(w, b, alpha))(w, b)的极小,再求对(alpha)的极大。

(1) 求(min limits_{w,b} L(w, b, alpha))

分别对(w, b)求偏导数并令其等于0,得到
[ egin{align*} & w = sum_{i=1}^{N} alpha_i y_i x_i & sum_{i=1}^{N} alpha_i y_i = 0 end{align*} ]
代入到拉格朗日函数,得到
[ egin{align*} min_{w, b} L(w, b, alpha) = - frac{1}{2} sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j (x_i cdot x_j) + sum_{i=1}^{N}alpha_i end{align*} ]

(2) 求(min limits_{w,b} L(w, b, alpha))(alpha)的极大,即是对偶问题
[ egin{align*} & max_{alpha} quad {-frac{1}{2} sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j (x_i cdot x_j) + sum_{i=1}^{N}alpha_i} & ext{s.t.} qquad sum_{i=1}^{N} alpha_i y_i = 0 & alpha_i geq 0, quad i=1,2,cdots,N end{align*} ]

将目标函数由求极大转换成求极小,如下:
[ egin{align*} & min limits_{alpha} quad {frac{1}{2} sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j (x_i cdot x_j) - sum_{i=1}^{N}alpha_i} & ext{s.t.} qquad sum_{i=1}^{N} alpha_i y_i = 0 & alpha_i geq 0, quad i=1,2,cdots,N end{align*} ]

线性可分支持向量机学习算法

(1) 构造并求解约束最优化问题
[ egin{align*} & min_{alpha} quad {frac{1}{2} sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j (x_i cdot x_j) - sum_{i=1}^{N}alpha_i} & ext{s.t.} qquad sum_{i=1}^{N} alpha_i y_i = 0 & alpha_i geq 0, quad i=1,2,cdotcdotcdot,N end{align*} ]

求得最优解(alpha^*=(alpha_1^*, alpha_2^*, cdotcdotcdot, alpha_N^*)^T)

(2) 计算
[ egin{align*} w^* = sum_{i=1}^{N} alpha^*y_ix_i end{align*} ]

并选择(alpha^*)的一个正分量(alpha_j^* > 0),计算

[ egin{align*} b^* = y_j - sum_{i=1}^{N} alpha_i^*y_i(x_i cdot x_j) end{align*} ]

(3) 求得分离超平面
[ egin{align*} w^* cdot x + b^* = 0 end{align*} ]

分类决策函数:
[ egin{align*} f(x) = ext{sign}(w^* cdot x + b^*) end{align*} ]

支持向量
将训练数据集中对应于(alpha_i^* > 0)的样本点((x_i, y_i))的实例(x_i)称为支持向量。

线性支持向量机与软间隔最大化

线性支持向量机

为了能适用线性不可分数据集,对每个样本点引入一个松弛变量$xi_i geq 0$,使得函数间隔加上松弛变量大于等于1。

线性不可分的线性支持向量机的学习问题(原始问题):
[ egin{align*} & min limits_{w, b, xi} quad frac{1}{2} {left | w ight |}^2 + C sum_{i=1}^{N} xi_i & ext{s.t.} quad y_i(w cdot x_i + b) geq 1 - xi_i, quad i=1,2, cdots,N & xi_i geq 0, quad i=1,2, cdots, N end{align*} ]

称这样的模型为训练样本线性不可分时的线性支持向量机,简称线性支持向量机。

其中,(C>0)称为惩罚参数,一般由应用问题决定,(C)值大时对误分类的惩罚增大,(C)值小时对误分类的惩罚减小。

最小化目标函数包含两层含义:使(frac{1}{2} {left | w ight |}^2)尽量下即间隔尽量大,同时使误分类点的个数尽量小,(C)是调和二者的系数。

学习的对偶算法

原始问题的对偶问题是:
[ egin{align*} & min limits_{alpha} quad {frac{1}{2} sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j (x_i cdot x_j) - sum_{i=1}^{N}alpha_i} & ext{s.t.} qquad sum_{i=1}^{N} alpha_i y_i = 0 & 0 leq alpha_i leq C, quad i=1,2,cdots,N end{align*} ]

学习算法

(1) 选择惩罚参数(C > 0),构造并求解凸二次规划问题
[ egin{align*} & min limits_{alpha} quad frac{1}{2} sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j (x_i cdot x_j) - sum_{i=1}^{N}alpha_i & ext{s.t.} qquad sum_{i=1}^{N} alpha_i y_i = 0 & 0 leq alpha_i leq C, quad i=1,2,cdots,N end{align*} ]

求得最优解(alpha^* = (alpha_1^*, alpha_2^*, cdots, alpha_N^*)^T)

(2) 计算
[ egin{align*} w^* = sum_{i=1}^{N} alpha^*y_ix_i end{align*} ]

并选择(alpha^*)的一个分量(0 < alpha_j^* < C),计算
$$
egin{align}
b^
= y_j - sum_{i=1}^{N} alpha_i^y_i(x_i cdot x_j)
end{align
}

(3) 求得分离超平面

[ egin{align*} w^* cdot x + b^* = 0 end{align*} ]

分类决策函数:
[ egin{align*} f(x) = ext{sign}(w^* cdot x + b^*) end{align*} ]

步骤(2)中,对任一适合条件的(alpha_j^*),求出(b^*),但是由于原始问题对(b)的解并不唯一,所以实际计算时可以取在所有符合条件的样本点上的平均值。

支持向量

合页损失函数

定理

线性支持向量机原始最优化问题:

[ egin{align*} & min limits_{w, b, xi} quad frac{1}{2} {left | w ight |}^2 + C sum_{i=1}^{N} xi_i & ext{s.t.} quad y_i(w cdot x_i + b) geq 1 - xi_i, quad i=1,2, cdots,N & xi_i geq 0, quad i=1,2, cdots, N end{align*} ]

等价于最优化问题
$$
egin{align*}
min limits_{w,b} quad sum_{i=1}^{N} left [ 1 - y_i (w cdot x_i + b) ight ]_+ + lambda left | w ight |^2
end{align*}

合页损失函数

函数
[ egin{align*} L(y(w cdot x + b)) = left [ 1 - y(w cdot x + b) ight ]_+ end{align*} ]

称为合页损失函数(hinge loss function),下标“+”表示以下取正值的函数。
[ left[ z ight]_+ = left{ egin{aligned} z, qquad z > 0 , qquad z leq 0 end{aligned} ight. ]

线性支持向量机学习等价于最小化二阶范数正则化的合页函数。

非线性支持向量机与核函数

核技巧

非线性分类问题

用线性分类方法求解非线性问题分为两步:首先使用一个变换将原空间的数据映射到新空间;然后在新空间里用线性分类学习方法从训练数据中学习分类模型。

核技巧就属于这样的方法。

核技巧应用到支持向量机,其基本思想就是通过一个非线性变换将输入空间对应于一个特征空间,使得在输入空间中的超曲面模型对应于特征空间中的超平面模型。这样,分类问题的学习任务通过在特征空间中求解线性支持向量机就可以完成。

核函数的定义

[ egin{align*} K(x, z) = phi(x) cdot phi(z) end{align*} ]

核函数在支持向量机中的应用

在线性支持向量机的对偶问题中,无论是目标函数还是决策函数都只涉及输入实例与实例之间的内积。在对偶问题的目标函数中的内积$x_i cdot x_j$
可以用核函数(K(x_i, x_j) = phi(x_i) cdot phi(x_j))来代替。

学习是隐式地在特征空间进行的,不需要显示地定义特征空间和映射函数。这样的技巧称为核技巧,它是巧妙地利用线性分类学习方法与核函数解决非线性问题的技术。

在实际应用中,往往依赖领域知识直接选择核函数,核函数选择的有效性需要通过实验验证。

正定核

函数满足什么条件才能成为核函数?

通常所说的核函数就是正定核函数(positive definite kernel function)。

正定核的充要条件

在实际问题中往往应用已有的核函数。

常用核函数

多项式核函数(polynomial kernel function)

[ egin{align*} K(x, z) = (x cdot z + 1)^p end{align*} ]

对应的支持向量机是一个(p)次多项式分类器。在此情形下,分类决策函数成为:
[ egin{align*} f(x) = ext{sign} (sum_{i=1}^{N} alpha_i^* y_i (x_i + 1)^p + b^*) end{align*} ]

高斯核函数(Gaussian kernel function)

[ egin{align*} K(x, z) = ext{exp} (- frac{{left | x-z ight |}^2}{2 ho^2}) end{align*} ]

对应的支持向量机是高斯径向基函数(radial basis function)分类器。在此情形下,分类决策函数成为:
[ egin{align*} f(x) = ext{sign} (sum_{i=1}^{N} alpha_i^* y_i ext{exp} (- frac{{left | x-z ight |}^2}{2 ho^2}) + b^*) end{align*} ]

字符串核函数

核函数不仅可以定义在欧氏空间上,还可以定义在离散数据的集合上。比如,字符串核实定义在字符串集合上的核函数。字符串核函数在文本分类、信息检索、生物信息学等方面都有应用。

非线性支持向量机

利用核技巧,可以将线性分类的学习方法应用到非线性分类问题中去。将线性支持向量机扩展到非线性支持向量机,只需将线性支持向量机对偶形式中的内积换成核函数。

非线性支持向量机学习算法

(1) 选择适当的核函数(K(x, z))和适当的参数(C),构造并求解最优化问题:
[ egin{align*} & min limits_{alpha} quad {frac{1}{2} sum_{i=1}^{N} sum_{j=1}^{N} alpha_i alpha_j y_i y_j K(x_i, x_j) - sum_{i=1}^{N}alpha_i} & ext{s.t.} qquad sum_{i=1}^{N} alpha_i y_i = 0 & 0 leq alpha_i leq C, quad i=1,2,cdots,N end{align*} ]

求得最优解(alpha^* = (alpha_1^*,alpha_2^*, cdots, alpha_N^*)^T)

(2) 选择(alpha^*)中的一个正分量(0 < alpha_j^* < C),计算
[ b^* = y_j - sum_{i=1}^{N} alpha_i^* y_i K(x_i, x_j) ]

(3) 构造决策函数
[ f(x) = ext{sign} (sum_{i=1}^{N} alpha_i^* y_i K(x, x_i) + b^*) ]

序列最小最优化算法

序列最小最优化(sequential minimal optimization, SMO)算法

Reference

  1. 统计学习方法
  2. pluskid支持向量机系列
  3. JerryLead支持向量机
  4. July支持向量机通俗导论
  5. Support Vector Machines

以上是关于支持向量机的主要内容,如果未能解决你的问题,请参考以下文章

支持向量机

支持向量机

支持向量机——核函数与支持向量回归(附Python代码)

支持向量机

支持向量机基本原理 matlab程序及其应用

机器学习算法及代码实现–支持向量机