一、优化目标
支持向量机(Support Vector Machine ,SVM)是另一种监督式学习算法。它有时候更加的简洁和强大。
我们将逻辑回归中的代价函数转化一下,并使用两段直线来尝试替代曲线,这被称作hinge loss 函数。
我们把第一项定义为cost1(z),第二项定义为cost0(z),那么可以说cost1(z)是当y=1时进行分类的代价函数,cost0(z)是当y=0时进行分类的代价函数。
用cost1和cost0代替,进而有:
对公式稍作变形,乘上一个m/λ,并记C=1/λ,于是就变成:
这就是通常使用的SVM代价函数,这个系数C本质上和λ一样的,都是改变普通代价函数项和正则项的权重关系。也就是说,如果我们想要加强正则化强度来处理过拟合,那么减小C;如果想要减少正则化强度来处理欠拟合,那么增大C。
最后,与逻辑回归中不同的是,SVM算法的假设函数并不代表y=0或1的概率,而是只输出0或1:
二、直观上对大间隔的理解(Large Margin Intuition)
有时人们会把支持向量机称作大间距分类器(Large Margin Intuition)。
因为在实际分类中,逻辑回归可能会绘画出粉色或者绿色或者蓝色的决策边界线,但是SVM会绘制出黑色的决策边界,具有鲁棒性(robustness)。
在SVM算法中,决策边界的性质是:尽可能地远离正数据集与负数据集。为什么这样做呢?因为这样会使决策边界对于两种数据集都有一些余地,也就是有一些容错率。
有几点要注意的是:
- 样本与决策边界之间的距离称为余量(margin),由于SVM需要最大化余量,因而又被称为大余量分类器(Large Margin Classifier)。
- SVM的大间距性质仅当C非常大的时候才能实现。
- 如果我们存在一些偏差较大的数据(outlier),又不想让其过分影响决策边界时,那么我们需要减小C的数值。
三、大间隔分类器的数学原理
我们将代价函数最小化的过程,实质上是令数据集构成的向量X,在决策边界θ上的投影大于1或者小于-1。对于所有的数据X(i)都进行这样的操作,就使得决策边界与所有数据集之间的余量变大了。
比起左边的绿色决策边界,右边的绿色决策边界更符合SVM的原理。因此称为大间距分类器。
PS:支持向量机的决策边界与θ向量是正交的。因为θTx=0
四、核函数(kernels)
1、Kernels I – 高斯核函数与“地标”
之前,我们在处理非线性决策边界时,使用的方法是引入多项式:
我们可以将其抽象为:
其中:
问题是,除了使用幂次项,还有别的办法替代f1、f2吗?
我们的做法是,假设我们的坐标系上有一些“地标”(landmark),我们要做的是,计算数据样本x与地标之间的接近程度,这里引入了一个新的函数similarity:
我们称作高斯核函数(Gaussian Kernel)。这是核函数里面的一种。
它的性质是:
因此,我们通过标记点和相似性函数,来定义新的特征变量,从而训练复杂的非线性边界。
2、Kernels II – 地标的选取
获取地标的一种方法是,直接将训练样本作为标记点。这样我们可以得到m个地标,每个地标对应着一个训练样例。即为:
因此,对于某个训练样本xi要计算的特征f为:
参数θ如何得到呢:
其中n=m。
PS:这里有一些对于参数C的总结:
- 如果C比较大,那么我们会有更高的方差、更低的偏差(过拟合)
- 如果C比较小,那么我们会有更高的偏差、更低的方差(欠拟合)
还有一些对于参数σ2的总结:
- 如果σ2比较大,那么特征量变化会更加平滑,这意味着更高的偏差、更低的方差(欠拟合)
- 如果σ2比较小,那么特征量变化会没那么平滑,这意味着更高的方差、更低的偏差(过拟合)
五、使用SVM
吴恩达建议直接使用现成的SVM软件包去优化参数θ,比如 ‘liblinear’ 和 ‘libsvm’,而不是自己去编写。
但是自己在编写程序的时候还应该注意一下几点:
- 参数C的选择
- 核函数的选择
- 在使用核函数之前,要将特征向量的大小按比例归一化。
- 并不是所有相似函数都可以作为有效的核函数,必须满足默塞尔定理。(最常用的就是线性核函数和高斯核函数)
- 多类型分类时,可以使用one vs all方法
- 逻辑回归和SVM的选择技巧:
假设n代表特征数量,m代表训练样本。如果n>>>m,那么使用逻辑回归,或者是无核函数的SVM算法(线性核函数);如果n比较小,m适中,那么使用高斯核函数支持的SVM算法;如果n比较小,m非常大,那么手动地添加更多的特征量,然后使用逻辑回归或者不带核函数的SVM算法
SVM是一种凸优化方法!!!