支持向量机 SVM 简要介绍

那些我从来没有理解过的概念(1)

下面是我在学习过程中遇到的对我很难理解的概念和我抄下来的笔记

主要资料来源: 《统计学习方法》,维基百科

拉格朗日对偶

问题是什么

假设 f(x),ci(x),hj(x) 是 定义在 Rn 上的连续可微函数,考虑以下最优化问题:

$$
\min_{x \in R^n}{f(x)} \

c_i(x) \leq 0, i = 1, 2, \dots , k\

h_j(x) = 0, j = 1, 2, \dots , l
$$

是一个凸优化问题

叫做约束最优化问题的原始问题

h l都为0, 即没有约束条件的情况下, 只需要找到

f(x)=0
对应的 x 就可以得出最优解

拉格朗日函数能干什么

利用拉格朗日函数消除掉约束条件,把求原函数的最优解转化为求解其对应的拉格朗日函数的最优解,

拉格朗日函数是什么

引入广义拉格朗日函数(generalized Lagrange function):

L(x,α,β)=f(x)+i=1kαici(x)+j=1lβjhj(x)

其中引入的 α β 是拉格朗日乘子,其中 αi0 .

引入拉格朗日函数之后能做什么

先把x看作常量,那么 L(x,α,β) 则是关于 α,β 的函数, 我们先对这它们求最大值,即:

maxα,β:αi0L(x,α,β)

那么当我们确定了 α β 的值使得函数值最大,则得到的 maxα,β:αi0L(x,α,β) 是一个仅与 x 有关的函数,我们定义:
θP(x)=maxα,β:αi0L(x,α,β)

如何体现原问题中的约束函数

很明显, 如果 x 不满足我们给它的限定条件, 那么其对应的函数值不应在我们考虑最小值的范围中

那么我们可以定义:

对于x, 如果 ci(x)>0 ,或者 hj(x)0 ,那么

θP(x)=maxα,β:αi0[f(x)+i=1kαici(x)+j=1lβjhj(x)]=+

那么我们可以发现,
θP(x)={f(x)+x  else

所以 minxθP(x) 与 原优化问题等价,所以使用 minxθP(x) 代替原始问题,

并使用 p 代表原始问题的最优解,即:

p=minxθP(x)

那么现在变成了优化一个无约束条件的函数

接下来做什么?

原问题的对偶问题

对偶问题是什么

对原始问题的处理时,我们把 α,β 视为常量并得到了以 x 为唯一变元的函数,

那么我们可以考虑把 x 看作常量, 并把 α,β 当作变量, 则得到了 θP(x) 的对偶函数:

θD(α,β)=minxL(x,α,β)

对偶问题则是极大化对偶函数的值,即

maxα,β:αi0θD(α,β)=maxα,β:αi0minxL(x,α,β)

看上去与原问题很对称

是的,这个是原问题:

minxθP(x)=minxmaxα,β:αi0L(x,α,β)

我们可以看到它们形式上的对称性。

类似于原问题,我们令其最值为 d , 那么:

d=maxα,β:α0θD(α,β)

然后呢,对偶函数有什么用呢

如果转化后得到的拉格朗日函数并不是凸的,而其对偶函数是凸的,我们可以利用强对偶性把求原问题的最优解转化为求对偶问题的最优解

首先我们需要证明一个定理:

原问题最优解与对偶问题最优解之间有什么关系呢

定理:

d=maxα,β:α0minxL(x,α,β)minxmaxα,β:αi0L(x,α,β)=p

这个东西也叫做 弱对偶性

其中 θP(x)θD(α,β) 叫做对偶间隔

pd 叫做最佳对偶间隔

这玩意怎么证

很简单:

首先我们有:

θD(x)=minxL(x,α,β)maxα,β:α0L(x,α,β)=θP(x)

然后就证完了

这定理有什么用呢

我们得到了结论:原始问题的最优解不小于对偶问题的最优解,那么我们只需要使两个解相等, 就能通过对偶问题得到原问题的最优解。

所以有:

设存在两组原始问题和对偶问题的解分别为 x,α,β , 当原始问题的解 p 与对偶问题的解 d 相等时,则此 x α,β 分别是原始问题和对偶问题的最优解。

这种性质叫做强对偶

那么在什么情况下才会有强对偶性呢

满足KKT条件的情况

什么是KKT条件

定理:对于待优化函数 f(x) 和其约束条件函数 ci(x) hj(x) , 如果 f(x) ci(x) 为凸函数, hj(x) 为仿射函数(由一阶多项式组成的函数),并且不等式约束 ci(x) 是严格的, 那么一组解 x,α,β 是原始问题和对偶问题的最优解的充分必要条件是:

x(x,α,β)=0α(x,α,β)=0β(x,α,β)=0αici(x)=0,i=1,2,,kαi0,i=1,2,,kci(x)0,i=1,2,,khj(x)=0,j=1,2,,l

总结

满足KKT条件的优化问题我们可以使用拉格朗日对偶来把求解原问题的最优解转化为求解其对偶问题的最优解从而降低解决问题的难度。

线性可分支持向量机

线性可分支持向量机是什么

对于一个二分类问题,线性可分支持向量机 或者 线性支持向量机 假设输入空间与特征空间的元素一一对应,并将 输入空间中的输入映射为特征空间的特征向量

线性可分支持向量机能干什么

在特征空间中找到一个分离超平面,将实例分到不同的类。该分离超平面对应于方程:

wx+b=0

其中 w 是法向量, b 是截距。 分离超平面把特征空间划分为两部分,法向量指向的一侧为正类,另一侧为负类。

线性可分支持向量机会利用间隔最大化,找到唯一的一个分离超平面

线性可分支持向量机对应的分类决策函数为:

f(x)=sign(wx+b)

为了描述”间隔最大化“这一概念,我们引入 函数间隔 这一概念

函数间隔是什么

对于给定的训练数据集 T 和超平面 (w,b) 定义超平面关于样本点 (xi,yi) 的函数间隔为:

γ^i=yi(wxi+b)

定义超平面到训练数据集的函数间隔为所有样本的函数间隔的最小值:
γ^=mini=1,2,,Nγ^i

如何防止超平面的系数对函数间隔的值产生影响

为了防止超平面法向量的系数对于函数间隔的干扰,我们可以对平面法向量 w 施加某些约束。

通常我们可以使用规范化,即 :使 ||w||=1

这时的函数间隔成为了几何间隔。

几何间隔是什么

对于给定的训练数据集 T 和超平面 (w,b) 定义超平面关于样本点 (xi,yi) 的几何间隔为:

γi=yi(w||w||xi+b||w||)

类似于函数间隔,超平面对于数据集 T 的几何间隔为

γ=mini=1,2,,Nγi

为什么要间隔最大化

间隔最大化意味着分割平面有着充分大的确信度对训练数据进行分类。即使是在最难以分类的实例点也有足够大的确信度来分开它们

如何间隔最大化

得到一个间隔最大化的超平面,等价于求解以下最优化问题:

maxw,bγyi(w||w||x+b||w||)γ,i=1,2,,N

转化为函数间隔的形式:
maxw,bγ^||w||yi(wx+b)γ^,i=1,2,,N

事实上我们可以发现,如果等比例改变超平面的系数,则函数间隔也会等比例改变

则不妨设

γ^=1

并带入到刚才的最优化问题中。

则待优化项的形式则为: maxw,b1||w|| , 这个问题是等价于求 minw,b12||w||2

那么得到了线性可分支持向量机所要学习的最优化问题:

minw,b12||w||2s.t.yi(wxi+b)+10,i=1,2,,N

这是一个 凸优化问题, 我们可以考虑使用拉格朗日对偶化,通过求解对偶问题得到原问题的最优解。

对于这个问题,我们构建的拉格朗日函数为(其中的 αi 是拉格朗日乘子):

L(w,b,α)=12||w||2i=1Nαiyi(wxi+b)+i=1Nαi

转化后的原问题为:
minw,bmaxαL(w,b,α)

所以对应的对偶问题是
maxαminw,bL(w,b,α)

那么如何求解对偶问题

先求解 minw,bL(w,b,α) ,考虑极值点导数为 0 ,有:

wL(w,b,α)=wi=1Nαixiyi=0bL(w,b,α)=i=1Nαiyi=0

得:

w=i=1nαixiyii=1Nαiyi=0

带回到拉格朗日函数得表达式中得到:
L(w,b,α)=12i=1Nj=1Nαiαjyiyj(xixj)i=1Nαiyi((j=1Nαjxjyj)xi+b)+i=1Nαi

经过简单得计算化简后得到:
L(w,b,α)=12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi

那么得到得对偶问题的真正形式是:
maxα12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαis.t.i=1Nαiyi=0αi0,i=1,2,,N

原始问题是满足 KKT条件的,所以存在 w , b , α 使得 w , b 是原始问题的最优解,且 α 是对偶问题的最优解

直接带入KKT条件中的公式:

αi(yi(wx+b)1)=0

得到:
w=i=1Nαiyixib=yji=1Nαiyi(xixj)

其中 j 1 N 中任意一个数

所以,我们可以把分类决策函数写成:

f(x)=sign(i=1Nαiyi(xxi)+b)

类似于感知机,我们把这个称作线性可分支持向量机的对偶形式

所以我们每次只需要求出 L(w,b,α) 对于各个 αi 的偏导数并令其为0即可得到极值

总结

对于线性可分的数据,使用线性可分支持向量机可以得到相当完美的结果。

但是实际问题并不可能有这么好的性质,所以线性可分支持向量机只能作为一个简单的理论模型。

我们需要一个更为一般的学习算法。

线性支持向量机

为什么需要线性支持向量机

线性可分支持向量机处理问题的局限性,对于线性不可分的数据集,或者仅仅是经过混淆后的线性可分数据集都不能工作

考虑下面这个数据集:训练数据中存在一些特异点,将特异点去除后得到的大部份样本是线性可分的。

那么如何改动线性可分支持向量机来得到线性支持向量机呢

我们要修改“硬间隔最大化”为“软间隔最大化”

线性不可分意味着某些样本点无法满足线性可分支持向量机中对函数间隔的要求,为了解决这个问题,我们可以对每个样本点引入一个松弛变量: ξi0 , 使函数间隔大于等于1, 于是在线性支持向量机对应的问题中,约束条件变为:

yi(wxi+b)1ξi

松弛当然是需要付出代价的,我们相应的把目标函数改为:
12||w||2+Ci=1Nξi

这里的 C>0 叫做惩罚参数。通过调整 C 我们可以控制分类的结果

得到的问题是什么

线性不可分的线性支持向量机的学习问题变成如下的下凸二次规划问题

minw,b,ξ12+Ci=1Nξis.t.yi(wxi+b)1ξiξi0,i=1,2,,N

得到的解为 w , b 得到的分离超平面和线性可分支持向量机形式一致:
wx+b=0f(x)=sign(wx+b)

原始问题的拉格朗日函数是什么

考虑到新加的限制条件和变量,对于线性支持向量机的拉格朗日函数是:

L(w,b,ξ,α,μ)=12||w||2+Ci=1Nξii=1Nαi(yi(wxi+b)1+ξi)i=1Nμiξi

其中
αi0,μi0
为拉格朗日乘子。

对偶问题是拉格朗日函数的极大极小问题。

首先求拉格朗日函数 L(w,b,ξ,α,μ)

w,b,ξ
的极小值,于是先对这三个变量求导:
wL(w,b,ξ,α,μ)=wi=1Nαiyixi=0bL(w,b,ξ,α,μ)=i=1Nαiyi=0ξiL(w,b,ξ,α,μ)=Cαiμi=0

所以有:
w=i=1Nαiyixii=1Nαiyi=0αi+μi=C

带入到拉格朗日函数后我们发现 ξiμi 都消掉了:
L(w,b,ξ,α,μ)=12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi

跟线性可分支持向量机的形式是一样的。

拉格朗日函数形式的原问题和对偶问题是什么

原问题为:

minw,b,ξL(w,b,ξ,α,μ)=12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαi

其对偶问题是:
maxα12i=1Nj=1Nαiαjyiyj(xixj)+i=1Nαis.t.i=1Nαiyi=0Cαiμi=0αi0μi0

我们可以利用等式约束消去 μi , 并讲约束条件写为
0αiC

如何通过对偶问题的解求出原问题的解

同样类似于线性可分支持向量机,假设对偶问题的最优解为 α ,则原问题的最优解 w,b 为:

w=i=1Nαiyixib=yji=1Nαiyi(xixj)

分离超平面可以写成:
i=1Nαiyi(xxi)+b=0

学习到的决策函数可以写为:
f(x)=sign(i=1Nαiyi(xxi)+b)

所以我们的学习算法即是求解对偶问题并得到一组合适的 α 来得到决策函数

对偶问题的答案和样本点之间的关系是什么呢

得到的 α=(α1,α2,,αN) αi0 对应的样本中的实例 xi 称作支持向量

如果 αi<C , 则 ξi=0 , 即样本恰好落在间隔边界上。

如果 αi=C,0<ξi<1 ,则分类正确,且在分割超平面与间隔边界之间

如果 αi=C,ξi=1 ,则分类正确,且在分割超平面上

如果 αi=C,1<ξi ,则分类错误,且在分割超平面误分的一侧

那么除了软间隔最大化以外还有什么模型来解释线性支持向量机的学习呢?

有——合页损失函数

什么是合页损失函数

线性支持向量机也可以视作最小化以下目标函数:

i=1N[1yi(wxi+b)]++λ||w||2

目标函数的第一项是 经验损失风险,函数:
L(y(wx+b))=[1y(wx+b)]+

叫做合页损失函数,其下标 + 表面其只取正值

合页损失函数说明了什么

当样本点被正确分类 且 函数间隔(这里也可以理解为置信度yi(wxi+b) 大于 1 时,损失为 0 ,否则是 1y(wx+b)

但我们其实稍微注意一下就能发现, 合页损失函数不过是原问题约束条件的另外一种表示方法


刚才讨论的都是线性的问题, 那么如果样本数据集并不是线性可分的或者大多数不是线性可分的呢?

那么我们应该使用非线性支持向量机

非线性支持向量机

提到非线性支持向量机,首先需要提到的就是核技巧(Kernel trick)

什么是核技巧

核技巧用来把非线性分类问题转化为线性分类问题

什么是非线性分类问题

非线性分类问题是指通过利用非线性模型才能很好地进行分类的问题。

一般的来说,对于训练数据集 T={(x1,y1),(x2,y2),,(xN,yN)},xiRn,yi{1,+1} ,如果能用 Rn 上的一个超曲面将正负例正确分开,则称这个问题是非线性可分问题

那么如何用解决非线性分类问题呢

首先使用一个变换将原空间的数据映射到新的空间上,然后在新空间使用线性分类学习方法得到分类模型。

核技巧就是这样的一种方法。

核技巧通过一个非线性变换将输入空间对应到一个特征空间,使得输入空间上的超曲面对应于该特征空间上的超平面,于是原来的问题只需要通过线性支持向量机就能解决了。

我们需要引入核函数

核函数是什么

定义: 设 X 是输入空间,(欧式空间 Rn 的子集或离散集合), 又 H 为特征空间(希尔伯特空间),如果存在一个从 X H 的映射

ϕ(x):XH

使得对所有的 x,zX ,函数 K(x,z) 满足条件
K(x,z)=ϕ(x)ϕ(z)

则称 K(x,z) 核函数 ϕ(x) 是映射函数。

引入核函数的意义是什么

通常在学习和预测中只定义 K(x,z) 而不定义 ϕ(x) 。通常计算前者比较容易,而通过计算 ϕ(x),ϕ(z) 来计算其内积相当复杂。而且在 K(x,z) 固定的情况下, ϕ(x) H 的取值是有无穷种情况的。

 如何在支持向量机中应用核技巧

我们注意到在线性支持向量机的对偶问题中,目标函数与决策函数都仅仅涉及到输入实例与实例之间的内积,那么我们只需要将 xxi K(x,xi) 来代替,那么对偶问题的目标函数则成为:

W(α)=12i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαi

则分类决策函数为:
f(x)=sign(i=1Nαiyi(ϕ(xi)ϕ(x))=sign(i=1Nαiyi(K(xi,x)))

这等价于通过映射函数 ϕ(x) 把原来的输入空间映射到一个新的特征空间,并在新的特征空间中学习线性支持向量机。

也就是说,我们只需要定义核函数,而不需要显式地定义映射函数和特征空间就能将原数据集转化为线性可分的数据集

这种技巧就是核技巧

如何选择核技巧呢

在实际应用中,往往依赖领域知识直接选择核函数,并通过实验进行验证

函数 K(x,z) 需要满足什么条件才能当作核函数呢

没有学过泛函分析所以只写一种定义

XRn K(x,z) 是定义在 X×X 上的对称函数,如果对于 xiX K(x,z) 对应的

Gram
矩阵
K=[K(xi,xj)]m×m

是半正定矩阵,则称 K(x,z) 是正定核

常用的核函数
多项式核函数 (polynomial kernel function)

K(x,z)=(xz+1)p

对应的支持向量机是一个 p 次多项式分类器, 在此情形下,分类决策函数的形式为:

f(x)=sign(i=1Naiyi(xix+1)p+b)

高斯函数 (Gaussian kernel function)

K(x,z)=exp(||xz||22σ2)

对应的支持向量机是高斯径向基函数(radial basis function) 分类器

字符串核函数

核函数同样可以定义在离散的集合上,例如字符串

维基的说法:

In machine learning and data mining, a string kernel is a kernel function that operates on strings, i.e. finite sequences of symbols that need not be of the same length. String kernels can be intuitively understood as functions measuring the similarity of pairs of strings: the more similar two strings a and b are, the higher the value of a string kernel K(a, b) will be.

在机器学习和数据挖掘中,字符串核函数是一种对字符串进行处理的核函数。例如,由有限字符集中的元素组成的长度不一的序列们。你可以直接把字符串核函数当作度量两个字符串的相似度的函数:两个字符串 a b 越相似,那么它们对应的核函数的值 K(a,b) 越大

考虑 Σ 是一个有限字符表,字符串 s 是从 Σ 中取出有限个字符组成的序列,包括空字符串。字符串 s 的长度用 |s| 表示。所有长度为 n 的字符串的集合记作 Σn ,所有字符串的集合记作

Σ=n=0Σn

考虑字符串 s 的字串 u ,给定一个指标序列 i=(i1,i2,,i|u|),1i1<i2<<i|u||s| s 的子串 u 定义为 u=s(i)=s(i1)s(s2)s(i|u|) ,其长度记作 l(i)=i|u|i1+1 ,如果 i 是连续的,则 l(i)=|u| ;否则, l(i)>|u| ,

假设 S 是长度大于或等于 n 的字符串的集合, s S 中的元素,现在建立字符串集合 S 到特征空间 Hn=RΣn 的映射 ϕn(s) RΣn 表示定义在 Σn 上的实数空间,其每一维对应一个字符串 uΣn ,映射 ϕn(s) 把字符串 s 对应于空间 RΣn 的一个向量,其在第 u 维的取值是:

[ϕn(s)]u=i:s(i)=uλl(i)

这里的 0<λ1 是一个参数, l(i) 表示字符串 i 的长度,求和在 s 所有的与 u 相同的子串上进行。

例子:

假设 Σ 是英文字符集, n=3 S 为长度大于或等于 3 的字符串的集合,考虑将字符串集 S 映射到特征空间 H3 上。

对于 H3 的某一维: asd , 字符串 Nasdaq 在这一维的值为: [ϕ3(Nasdaq)]asd=λ3 asd 子序列在 Nasdaq 中一共出现过一次,且该子序列跨越的长度为 3 , 所以取值为 λ3;再考虑字符串 lassdas ,它对应的这一维的值是 [ϕ3(lassdas)]asd=2λ5 ,同样的,在 lassdsa 中出现过两次相同的子序列,而且它们都跨越了 5 的长度.

基于这个映射,我们给出字符串核函数的定义:

kn(s,t)=uΣn[ϕn(s)]u[ϕn(t)]u=uΣn(i,j):s(i)=j(j)=uλl(i)λl(j)

只要你看懂了上面那一大片在说什么,这个式子相必应该也挺好理解。

如果不能理解,回去再看一遍。

怎么计算以后可以再开一篇笔记

### 非线性支持向量机

通过核技巧,我们可以把线性分类的学习方法应用到非线性分类问题

下面具体地描述非线性支持向量机学习算法:

(1) 选取适当地核函数 K(x,z) 和适当的参数 C ,构造并求解最优化问题:

minα12i=1Nj=1NαiαjyiyjK(xi,xj)i=1Nαis.t.i=1Nαiyi=00αiC,i=1,2,,N

求得最优解 α=(α1,α2,,αN)T

(2) 选择 α 的一个分量 αi ,计算

b=yji=1NαiyiK(xi,xj)

(3) 构造决策函数:
f(x)=sign(i=1NαiyiK(x,xi)+b)

当我们选定的 K(x,z) 是正定核函数时,得到的问题是凸二次优化问题,存在最优解。

你可能感兴趣的:(机器学习,svm,支持向量机,拉格朗日对偶,机器学习)