cs229_part3

接下来就是最最最重要的一个有监督学习算法了。

支持向量机

问题背景

样本集表示:
\[(x,y)\in D, x\in R^n, y\in \{-1,+1\}\]

回到之前的逻辑回归模型中:
逻辑回归中如果\(h ( x ) =g(\theta^Tx)\geq 0.5\)我们就认为是正例(y=1)。也就是\(\theta^Tx\geq 0\),且\(\theta^Tx\)趋向于无穷大的时候h(x)输出的概率也会越接近于1。所以说:

在图像上来理解的话,中间那条线是我们的决策边界。也就是说点离我们的决策边界越远我们越是确信这个点是属于一类。所以我们如何基于这样的间距想法来构造一个模型呢。或者说我们如何构造一个模型,找点一条线使得不同种类的点离这条线都足够远呢。
即SVM是一个最大间距分类器

构造假设

这里我们要把之前用的符号换一下,把\(\theta^Tx\)表示成\(w^Tx+b\),实际上就是把偏置项给显示地拿了出来。还有一个要注意的是样本集中的分类标签改为了+1和-1而不是之前的0和1。
基于刚才问题背景中的想法,我们构造的假设函数就是:
\[ h(x) = \left\{ \begin{array} { c l } { +1,} & { w^Tx+b \geq 0} \\ { - 1,} & { w^Tx+b < 0} \end{array} \right. \]

衡量误差

于是我们现在要的就是如何使得点离我们分类直线的距离足够大。
既然要求距离最大,先找一个方法和衡量点到直线的距离,即给定一个训练样本,我们先定义函数间隔为:
\[ { \gamma } ^ { ( i ) } = y ^ { ( i ) } \left( w ^ { T } x^{(i)} + b \right) \]
但是这个函数间隔有个问题,当我们对参数w和b进行缩放的时候,函数间隔会也会缩放,但是我们的决策边际还是原本的决策边际。可以想象成我们对坐标进行缩放,点到直线的距离虽然也缩放了,但是线还是那条线,并不会改变决策边际。
所以做一下标准化处理得到几何间隔
\[ { \gamma } ^ { ( i ) } = y ^ { ( i ) } \left( w ^ { T } x^{(i)} + b \right)\frac1{||w||} \]
如果我们令\({||w||}=1\)那么\({ \gamma } ^ { ( i ) }={ \hat\gamma } ^ { ( i ) }\)几何间隔就会等于函数间隔。
我们再在全部的样本集上定义最小几何间隔
\[\gamma = \min _ { i = 1,\ldots ,m } \gamma ^ { ( i ) }\]

于是我们求解的问题就变成了求解最大的最小的几何间隔
\[ \begin{array} { r l } { \max _ { w ,b } } & { \gamma } \\ { \text{ s.t. } } & { y ^ { ( i ) } ( w ^ { T } x ^ { ( i ) } + b ) \geq \gamma ,\quad i = 1,\ldots ,m } \\ { \text{ s.t. } }&{ \| w \| = 1} \end{array} \]
st表示服从什么的条件。
\({||w||}=1\)的作用前面已经说过了,再强调一下是让几何间隔等于函数间隔。
$ y ^ { ( i )} ( w ^ { T } x ^ { ( i ) } + b ) \geq \gamma\(这条式子实际上就是\)\gamma = \min _ { i = 1,\ldots ,m } \gamma ^ { ( i ) }$。这里把它作为条件显式地写出来是为了后面求解的方便。

问题求解

求解问题前我们暂时还要做一个很重要的假设就是假设样本集线性可分。后面我们会放宽这个条件。
在上面的衡量误差部分中我们已经得到了最原始的问题。但这个问题性质还不够好,也就是说这是个非凸问题,并不好解决,我们还要再做几个假设。
首先我们先减少一个条件,即把几何距离转化为函数距离:
\[ \left.\begin{array} { r l } { \max _ { w ,b } } & { \frac { \hat { \gamma } } { \| w \| } } \\ { \text{ s.t. } } & { y ^ { ( i ) } ( w ^ { T } x ^ { ( i ) } + b ) \geq \hat { \gamma } ,\quad i = 1,\dots ,m } \end{array} \right. \]
我们知道函数距离是可以任意缩放的,所以我们把函数距离缩放为1。求\(\max\frac{1}{||w||}\)也就是求\(\min{||w||}\)
最终得到:
\[ \left.\begin{array} { r l } { \min_{ w ,b } } & \| w \| \\ { \text{ s.t. } } & { y ^ { ( i ) } ( w ^ { T } x ^ { ( i ) } + b ) \geq 1 ,\quad i = 1,\dots ,m } \end{array} \right. \]
那么这就是一个二次规划问题了。详细求解翻阅一下凸优化教程。

另一种解法

虽然可以用二次规划求解这个问题,但是为了后面的核函数,这里要介绍另一种解法。
高等数学中我们学过用拉格朗日算子求条件极值。
对于这样的不等式约束问题:
\[ \begin{array} { r l } { \min _ { \gamma ,w ,b } } & { \frac { 1} { 2} | | w | | ^ { 2} } \\ { \text{ s.t. } } & g_i=-{ y ^ { ( i ) } ( w ^ { T } x ^ { ( i ) } + b ) +1 \leq 0 ,\quad i = 1,\dots ,m } \end{array} . \]
我们求拉格朗日函数:
\[ \mathcal { L } ( w ,b ,\alpha ) = \frac { 1} { 2} | | w | | ^ { 2} - \sum _ { i = 1} ^ { m } \alpha _ { i } \left[ y ^ { ( i ) } \left( w ^ { T } x ^ { ( i ) } + b \right) - 1\right] \]
再对w求导可以得到:
\[ w = \sum _ { i = 1} ^ { m } \alpha _ { i } y ^ { ( i ) } x ^ { ( i ) } \]
然后替换原来的假设函数,\(<x,y>\)表示内积计算。
\[ \left.\begin{aligned} h(x)=w ^ { T } x + b & = \left( \sum _ { i = 1} ^ { m } \alpha _ { i } y ^ { ( i ) } x ^ { ( i ) } \right) ^ { T } x + b \\ & = \sum _ { i = 1} ^ { m } \alpha _ { i } y ^ { ( i ) } \left\langle x ^ { ( i ) } ,x \right\rangle + b \end{aligned} \right. \]
这一部分的推导还有一个关于α和b怎么求解的问题比较复杂,我就省略掉了,后面的参考中会给出。如果看不懂像上面那样简单理解就好。

名称由来

一般来说条件约束的函数极值一般会在约束处取到极值。所以说如下图所示:

我们取到约束的地方就是那两条虚线的地方。在虚线上的点就叫做支持向量,这也是支持向量机名称的由来。也就是说因为我们衡量误差的方式,最后求解的问题只会和这个支持向量相关,即我们直线只由支持向量决定。

核函数

问题背景

回忆一下我们在求解问题中提到的基本假设就是,样本集线性可分,但是对于线性不可分的情况怎么办呢。
我们可以把样本集映射到更高维度空间上使得其线性可分。比如上面那张图,是二维平面上面样本集,如果我们把这些点投影到一维空间上面,比如说x轴。点就会变密。如果投影到零维空间上,那么所有点都变成了一个点。基于这样的直觉,我们可以认为样本集在越高维度空间上是越稀疏的。所以核函数的作用就是把样本集投影到更高维度空间上使其稀疏变得线性可分

构造假设

在拉格朗日乘子法中我们求解得到了α并用α替代了w得到了新的假设函数:
\[ h(x)= \sum _ { i = 1} ^ { n } \alpha _ { i } y ^ { ( i ) } \left\langle x ^ { ( i ) } ,x \right\rangle + b \]
也就是说如果新来了一个样本,我们要判断类别的话,只要和原来样本集中的点做内积计算即可。

回到刚才的问题上来,我们想把样本集映射到更高维度的空间上。假设函数中的我们做了内积运算\(\langle x ^ { ( i ) } ,x\rangle\)得到了一个值。所以要做的就是把x映射到更高维的空间再做内积运算即可。
如果\(\phi ( x )\)表示的是对向量x的一个映射,那么定义核函数k就是:
\[ K ( x ,z ) = \phi ( x ) ^ { T } \phi ( z ) \]
比如我们一个核函数为:
\[ K ( x ,z ) = \left( x ^ { T } z \right) ^ { 2} \]
即:
\[ \left.\begin{aligned} K ( x ,z ) & = \left( \sum _ { i = 1} ^ { n } x _ { i } z _ { i } \right) \left( \sum _ { j = 1} ^ { n } x _ { i } z _ { i } \right) \\ & = \sum _ { i = 1} ^ { n } \sum _ { j = 1} ^ { n } x _ { i } x _ { j } z _ { i } z _ { j } \\ & = \sum _ { i ,j = 1} ^ { n } \left( x _ { i } x _ { j } \right) \left( z _ { i } z _ { j } \right) \end{aligned} \right. \]
那么\(\phi ( x )\)的映射就是:
\[ \phi ( x ) = \left[ \begin{array} { c } { x _ { 1} x _ { 1} } \\ { x _ { 1} x _ { 2} } \\ { x _ { 1} x _ { 3} } \\ { x _ { 2} x _ { 1} } \\ { x _ { 2} x _ { 1} } \\ { x _ { 2} x _ { 1} } \\ { x _ { 2} x _ { 2} } \\ { x _ { 3} x _ { 2} } \\ { x _ { 3} x _ { 3} } \end{array} \right] \]

那么是不是任意的映射都可以作为核函数呢,当然并不是。详细请翻一下参考。

软间距

问题背景

仍然是回到之前那个线性可分的假设中,首先我们假设样本集线性可分,如果线性不可分就映射到高维使得其线性可分。但是如果映射到高纬度还是线性不可分呢。或者这样的一种情况:

本来我们的决策边界是左边这样的,但是如果出现了一个新的样本o我们的决策边界可能会变成右边这样。然而我们仔细思考一下对于右边这个样本集是不是虚线那条决策边界会更好一下。因为很有可能新的那个样本是一个被采样错误的样本。
于是因为存在线性不可分和采样错误的样本的存在。我们需要在衡量误差的时候对被假设函数分类错误的样本有一定的容忍度。

衡量误差

我们引入一个\(\xi\)值(也叫做松弛变量)表示我们对分类错误的容忍度。
\[ \left.\begin{array} { c l } \min _ {w ,b }& \frac { 1} { 2} | | w | | ^ { 2} + C \sum _ { i = 1} ^ { m } \xi _ { i }\\{ \text{ s.t. } } & { y ^ { ( i ) } \left( w ^ { T } x ^ { ( i ) } + b \right) \geq 1- \xi _ { i } ,\quad i = 1,\ldots ,m } \\ & { \xi _ { i } \geq 0,} \quad { i = 1,\ldots ,m } \end{array} \right. \]
写在约束条件中的\(1-\xi\)其实就是允许支持向量向着决策边界方向移动了,这样间距就会变小,所以叫软间距,这给予了我们容忍分类错误的能力。
而写在优化条件里面中的\(\xi\)是使得分类错误不能太多,所以常数C就是我们对于错误的容忍度。
于是我们可以调节C改变优化的条件来使得这个分类器对于错误容忍度不同来构造更健壮的分类器。

小结

首先我们由最大间距的直觉来构造了一个新的分类器,而且不断放宽条件得到了核函数和软间距分类。

参考

猜你喜欢

转载自www.cnblogs.com/nevermoes/p/cs229_part3.html