机器学习数学原理(7)——SVM支持向量机

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/z_x_1996/article/details/72783224

机器学习数学原理(7)——SVM支持向量机

这篇博文笔者将默认读者已经了解了最优间隔分类器以及泛化拉格朗日乘子法,如果部分读者还不是很了解,我这里给出前面一篇博文的链接《机器学习数学原理(6)——最优间隔分类器》。总之,这篇博文将不会再赘述相关的知识,而是直接给出其结论。

由于笔者水平有限,如果读者发现任何不妥或者错误之处,欢迎批评指出。

1 简介

我们来看看前面最优间隔分类器的前提:线性可分的样本空间。但是很遗憾的是大部分的需要解决的问题都不是线性可分的样本空间的问题,因此SVM支持向量机算法孕育而生。

支持向量机(Support Vector Machine,SVM)Corinna CortesVapnik等于1995年首先提出的,它在解决小样本、非线性及高维模式识别中表现出许多特有的优势,并能够推广应用到函数拟合等其他机器学习问题中。
在机器学习中,支持向量机(SVM,还支持矢量网络)是与相关的学习算法有关的监督学习模型,可以分析数据,识别模式,用于分类和回归分析。

在机器学习中,SVM是一个非常朴实但十分重要的算法,甚至有着举足轻重的地位。很多人都把SVM看做是机器学习中最好的分类算法。虽然这样的说法有些不妥,但逐一证明其的重要性。

SVM的核心思想便是将线性不可分的特征空间映射到一个更加高维的空间使其能够线性可分,从而在高维特征空间构建最优间隔分类器实现分类。接下来便是具体的的推导了。

2 Kernel核函数

要想了解SVM支持向量机算法,首先得了解核函数(Kernel),但是这里我们需要知道的是核函数并不仅仅能应用到SVM支持向量机中,还有很多其他的领域也会大量使用核函数的思想。

2.1 核函数的引出

任何方法的产生都是建立在一个问题上的,那么首先我们来看一下核函数针对的问题。

在上一篇博文中我们说明了最优间隔分类器并且导出了优化问题的对偶优化问题如下:

当然还得满足KKT条件。

现在我们来考虑SVM的核心思想将线性不可分的特征空间映射到一个更加高维的空间,即我们需要将x通过函数映射成另外一个特征向量φ(x),然后在高维的空间使用最优间隔分类器,则式子变为如下:

那么现在问题便来了,φ(x)的维度可能非常的高,甚至有可能是无限维的,这如果使用计算机进行计算会付出巨大的计算代价,有时候甚至无法计算!

这时候便是核函数的表演舞台了。我们观察式子,发现其实我们根本不需要讲映射函数φ显式的求出来,而只需要求出那个内积便可以了,于是这里定义

K便是核函数。

下面我们来举个例子帮助读者更加深刻的理解核函数对于减少运算复杂度的作用。

我们现在以x作为样本空间来分两类,x的维度为3。假如我们现在选取的映射函数φ

现在我们来计算内积

这样一来核函数的计算复杂度只有O(3),而如果直接使用φ来进行内积的话计算复杂度为O(9)(这里的书写有些不规范,但读者领会到意思就行),从而计算复杂度减小了,值得一提的是,当K采用高斯型核函数的时候,对应的φ有无限维(这里笔者就不给出证明了,有兴趣的读者可以自己查阅资料),而显然我们无法直接计算φ的内积,则我们可以发现核函数会大大提高计算效率。

这里笔者给出一些常用的核函数(从网上copy的,笔者还是有点懒的)

刚才所说的高斯型核函数就是图中的径向基核函数。

这里有一种不是很严谨的关于核函数的直观理解,即核函数的值表示了两个样本的相似程度。

2.2 核函数的合法性

现在我们已经定义出了核函数,那么现在便来讨论一下核函数的合法性,所谓的合法性即核函数对应的φ是否存在

比如我们这里给一个比较极端的例子,K=-1,这个显然是找不到对应的φ的。那么下面我们便来讨论核函数合法的充要条件。

下面我们假设核函数K(x,z)是合法的,同时假设有m个样本。现在我们定义一个**核函数矩阵(Kernel Matrix)**k(为m*m尺寸),其中位于(i,j)上的元素值为:

现在我们给出任意一个特征向量z,我们可以发现:

说明k为一个半正定矩阵,同时由核函数K的定义我们可以看出k还是一个对称矩阵。

同时我们也可以证明反过来依然成立,即核函数矩阵对称半正定是核函数合法的充要条件。该定理也被称为Mercer定理

至此我们便将核函数的大概说完了,即现在我们可以在高维的空间非常有效率的计算内积。

3 正则化以及非线性例子

正则化主要是通过增加惩罚项来防止算法过拟合,防止异常点对分类器进行干扰的一种手段,这里笔者不准备详细叙述了,如果感兴趣的读者可以参考下面这篇博文:《正则化方法:L1和L2 regularization、数据集扩增、dropout》。通过正则化后的优化模型变为:

4 SMO算法

现在我们已经一步一步的将优化问题模型表示了出来:

接下来我们就应该通过算法来确定α了。通常我们采用的算法为SMO算法(Sequential Minimal Optimization),但是为了方便读者理解这个算法,我们先来看一下另外一个算法:坐标上升算法(Coordinate Ascent)

4.1 坐标上升算法

我们现在先来看一个无约束的优化问题:

坐标上升算法的核心思想便是每次只改变一个参数来优化,其余参数看做常量。写成伪代码形式即为

while(收敛){
    for(int i=1;i<=m;i++){
        αi = argmax W;//通过调节单变量αi使得W最大。
    }
}

参数更新的情况类似于下图(只有两个参数的时候):

这个方法很好理解,但是任然有一些细节问题,但笔者不准备详细叙述了。

4.2 SMO算法

SMO算法的思想和坐标上升算法大致相同,SMO算法可以看做有约束条件的坐标上升算法。我们现在来看看我们的优化模型:

我们可以发现,如果我们想像坐标上升算法一样的思路进行,有一个很大的问题就是,我们不能只改变一个参数而固定其他参数,因为由于约束条件的存在,当其他参数固定过后剩下的那个参数自然也就固定了,所以现在我们选择改变两个参数而固定其他参数。

假设现在我们选择更新α1和α2。那么从约束条件我们可以得出:

现在我们来看看优化空间:

可以发现通过优化空间我们可以确定α1的取值范围,然后我们把α2用α1表示出来然后代入L中我们就可以得到一个单变量的优化问题,剩下的就很容易解决了。下面笔者给出伪代码方便读者理解:

while(收敛){
    选择更新参数对αi,αj;
    固定其他参数,通过使L取得最大值从而更新αi,αj;
}

也非常的清晰易懂。当然这儿也有很多的细节问题需要读者自己下来查阅资料了,比如如何选择更新参数对使得算法更加高效。

到这里SVM支持向量机的介绍就基本完了,在实际应用中,SVM支持向量机还分为不同的形式(大部分都是通过正则化方式的不同来分的),故如果用于实际,读者还需要对SVM进行一个更加深入的学习。

猜你喜欢

转载自blog.csdn.net/z_x_1996/article/details/72783224