Andrew Ng机器学习笔记(七)

简介

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

主要内容

Support Vector Machines

Optimization objective

Andrew Ng机器学习笔记(七)

选定sigmoid函数作为激励函数,当y=1的时候,我们想要假设函数的值与实际的值相等,那么就要让假设函数的值为1,这个时候z要远大于零才能满足条件,同理,当y=0的时候,z远小于0才能满足条件。

Andrew Ng机器学习笔记(七)

还是用z表示θ的转置X,当y=1的时候,目标函数只有前一项起作用,得到左图,当z增大的时候,z对应的值会变得非常小,对整个代价函数而言,影响也非常小,所以在逻辑回归中观察到正样本y=1的时候,一般讲z设置得非常大,因为,在代价函数中,这一项会变得非常小。紫红色的线条代表新的代价函数曲线,这里的线是直线,这样画出曲线在之后的优化问题当中非常有用,计算起来会比较方便。当y=0的时候,只有第二项起作用,的到右图。这时候,样本的代价是代价函数的贡献,新的代价函数也是紫红色的线条。

Andrew Ng机器学习笔记(七)

上面的公式是我们在逻辑回归里面使用的加上了正则化参数之后代价函数的公式,首先要出去1/m项,在最小化问题当中,无论前面是否有1m这一项,我们得到的最优值都是一样的。对于逻辑回归,我们有
1.训练样本的代价,
2.正则化项,一般我们用正则化项来平衡整体的。若我们想要最小化A加上正则化参数λB,A表示第一项,B表示第二项,保证正则化参数足够小,也是对于B项而言,但对于支持向量机,将使用一个不同的参数C替换λ来权衡这两项,改为CA+B,因此,在逻辑回归中,如果给定λ为一个非常大的值,那么也就是说给予B更大的权重,对应于将C设定为一个非常小的值,相应的将会给BA更大的权重。这里就是用参数来决定是多考虑第一项还是多考虑第二项的优化。如果C=1λ,那么两个优化目标的到相同的最优值θ,删掉λ,并且用C来代替,就得到了在支持向量机中的整个优化目标函数,然后最小化这个函数,得到SVM学习到的参数C

Andrew Ng机器学习笔记(七)

当θ的转置X0的时候假设函数预测为1,其他情况下预测为0.这里支持向量机的假设有别于逻辑回归输出的概率。所以,学习参数θ就是支持向量机假设函数的形式。


Large margin intuition:

Andrew Ng机器学习笔记(七)

支持向量机也叫最大间距分类器。上图左边的为y=1的时候正样本的代价函数,右边的为y=0的时候负样本的代价函数,横轴表示z。如果我有一个正样本,y=1,只有在z1的时候,代价函数才为0。也就是说,如果我有一个正样本,我们会希望θ的转置X1,反之,如果y=0,代价函数只有在z1的时候函数值为0。但实际上,如果有一个正样本,只要z≥0的时候就能够把这个样本恰当分出来,负样本z0的时候就可以将负例正确分离,但是,支持向量机的要求却很高,不仅要能够正确分离正样本,即不仅要求z0,而且要求z的值比0大很多,比如1,同理,分离负样本的时候,要求z1.这就相当于在支持向量机里面嵌入了一个额外的安全因子。

Andrew Ng机器学习笔记(七)

当我们把C设置地非常大的时候,将代价函数最小化时,我们可以很快找到一个使得第一项为0的最优解,因此,当我们已经知道一个训练样本的标签y=1的时候,如果想要第一项为0,就是要找到一个θ,使得θ的转置X1,类似的,如果一个训练样本的标签y=0.为了使代价函数值为0,我们需要让θ的转置X1.所以,我们现在可以选择参数,使得第一项等于0,这个时候C0+1/2(i=1)nθj2=1/2(i=1)nθj2 ,将上式优化为最小就行了。

Andrew Ng机器学习笔记(七)

如上图所示:将两类样本分开的决策边界很多,但是最好的边界是黑色的那一条,因为黑色的那条决策边界到正样本与负样本之间有最大间距,就是蓝色于黑色的线之间的距离。支持向量机就是最大间距的一种分类方式。

支持向量机又叫最大间距分类器,当正则化参数很大的时候,支持向量机的分类很容易受到异常点的影响,比如当C设置地比较小的时候,添加了左下角的红色样本点,决策边界就会从黑线变成粉色的线了,但是往往仅根据一个样本就改变决策边界是十分不明智的,所以我们在选择正则化参数的时候也要选好参数的大小,这样甚至在数据是线性不可分的情况下,支持向量机往往也能给出很好的决策边界。这里的C=1λC较大的时候,λ较小,可能会导致过拟合,高方差;C较小的时候,λ较大,可能会导致欠拟合,高偏差。


The mathematics behind large margin classification(optional):

Andrew Ng机器学习笔记(七)

上图为计算内积的方法,二范数算出来的是欧式距离。

Andrew Ng机器学习笔记(七)

θ0=0,这样比较容易画出示意图。令特征数n=2,所以现在只有两个特征x1x2,上图公式可得,我们的目标函数就是12||θ||2.所以支持向量机做的全部事情就是极小化参数向量θ范数的平方或者说长度的平方。

Andrew Ng机器学习笔记(七)

参上左图为第一个样本,参数θ的投影为短红线,同理,第二个样本为粉红色的线段,为第二个样本到参数向量θ的投影,这个投影非常短,粉红色线段表示的实际上是一个负值。


Kernels 1:

Andrew Ng机器学习笔记(七)

如果能够得到上图所示的决策边界,那么我们的模型可能是上图写出的函数模型,然后用f来替换模型中的每一项x,可以得到上图下面的公式。

Andrew Ng机器学习笔记(七)

给定一个训练实例x,利用x的各个特征与预先选定的地标的近似程度来选取新的特征f1f2f3.

Andrew Ng机器学习笔记(七)

f1等于上图中的公式的时候,||xl(1)||2=j=1n(xjlj(1))2,此式为地标l(1)之间的距离的和,上式中的f1就是核函数,具体而言,这里是一个高斯核函数,这个函数看上去和正态分布很像,但是实际上和正态分布没有什么关系。

Andrew Ng机器学习笔记(七)

如果一个训练实例x与地标l之间的距离近似于0,则新的特征f近似等于1e0等于1),如果训练实例x与地标l之间的距离较远,那么f近似于e的较高次幂=0.上图中水平面的坐标代表x,纵坐标代表f,只有当xl(1)重合的时候f才有最大值,随着x的改变,f的值改变速率收到σ2的控制。随着σ的值增大,下降到最小值的距离也变大了。

Andrew Ng机器学习笔记(七)

当实例位于紫色的点的时候,因为它离l(1)更近,但是离l(2)l(3)较远,所以f1接近1,而f2f3接近0这个时候假设函数大于0,可以预测y=1,同理,绿色的点离l(2)比较近,也可以预测y=1,但是对于蓝绿色的点,离三个地标都比较远,预测y=0.所以,图中红色封闭曲线所表示的范围,便是我们依据一个单一的训练实例和我们所选择的地标得出的决策边界,在预测的时候,采用的特征不是训练实例本身的特征,而是通过核函数计算出来的新的特征f1f2f3.


Kernels 2:

Andrew Ng机器学习笔记(七)

我们通常是根据训练集的数量选择地标的数量的,也就是说,如果训练集中有m个实例,则我们选择m个地标.

Andrew Ng机器学习笔记(七)

l(1)=x1l(2)=x2l(3)=x3这样做可以使我们得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上。

Andrew Ng机器学习笔记(七)

给定x,计算出新特征f,当θ的转置f0的时候,预测y=1,否则预测y=0,相应修改代价函数为上式training之后的式子,在具体的实施过程中,还需要对最后的归一化项进行微调,用θTMθ=θTθ,其中M是根据我们选择的核函数的不同而变化的一个矩阵,这样做是为了简化运算。理论上我们也可以在逻辑回归当中使用核函数,但是使用M来简化计算的方法不适用于逻辑回归,因此计算将非常耗时间。当支持向量机不使用核函数的时候称为线性核函数。当不采用非常复杂的函数,或者当我们的训练集特征非常多但是实例非常少的时候,可以采用不带核函数的支持向量机。

Andrew Ng机器学习笔记(七)

C较大时,相当于λ较小,可能会导致过拟合,高方差;C较小的时候,相当于λ较大,导致欠拟合,高偏差。σ较大的时候,导致过拟合,σ较小的时候,导致欠拟合。


Using an SVM:

Andrew Ng机器学习笔记(七)

使用现有的一些SVM软件包(比如liblinear,libsvm等)去解决参数θ的问题。首先要选择参数C,然后选择一个核函数。

Andrew Ng机器学习笔记(七)

上图使用的是一个高斯核函数。

Andrew Ng机器学习笔记(七)

除了高斯核函数,我们还可以选择一些其他的核函数,比如:polynomial kernel、string kernel、chi-square kernel、histogram intersection kernel等等。

Andrew Ng机器学习笔记(七)

如果一共有k个类别,那么我们需要k个模型,以及k个参数向量θ,同样我们也可以训练k个支持向量机来解决多分类问题,但是大多数的支持向量机软件包都有内置的多类分类功能,我们只需要直接使用就可以了。

Andrew Ng机器学习笔记(七)

n为特征数,m为训练样本数。
如果相较于nm大很多,也就是说训练集数据不够支持我们训练一个复杂的非线性模型的时候,一般选用逻辑回归或者是不带核函数的支持向量机解决问题;如果n比较小,m中等大小的时候,使用高斯核函数的支持向量机。如果n比较小,m比较大的时候,使用支持向量机会比较慢,这时候,我们一般可以增加更多的特征,然后使用逻辑回归或者不带核函数的支持向量机。神经网络在上述三种情况下都可以运行很好,但是训练神经网络可能会比较慢。


参考链接

https://baike.baidu.com/item/%E6%94%AF%E6%8C%81%E5%90%91%E9%87%8F%E6%9C%BA
https://www.zhihu.com/question/21094489
http://www.cnblogs.com/jerrylead/archive/2011/03/13/1982639.html
http://blog.****.net/passball/article/details/7661887