吴恩达机器学习笔记及作业代码实现中文版
第十章 支持向量机
直观上对大间隔的理解
-
人们有时将支持向量机看作是大间距分类器。
-
支持向量机模型的代价函数,在左边这里我画出了关于 z 的代价函数cost1(z)cost_1(z)cost1(z),此函数用于正样本,而在右边这里我画出了关于 z 的代价函数cost0(z)cost_0(z)cost0(z),横轴表示 z。
-
最小化代价函数的必要条件
- 如果你有一个正样本,y=1y=1y=1,则只有在z >= 1时,代价函数cost1(z)cost_1(z)cost1(z)才等于0。换句话说,如果你有一个正样本,我们会希望θTx>=1\theta^Tx>=1θTx>=1,反之,如果y=0y=0y=0,函数cost0(z)cost_0(z)cost0(z),它只有在z <= -1的区间里函数值为 0。
- 事实上,如果你有一个正样本y=1y=1y=1,则其实我们仅仅要求θTx\theta^TxθTx大于等于 0,就能将该样本恰当分出,这是因为如果θTx>0\theta^Tx>0θTx>0的话,我们的模型代价函数值为0,类似地,如果你有一个负样本,则仅需要θTx<=0\theta^Tx<=0θTx<=0就会将负例正确分离。
- 但是,支持向量机的要求更高,不仅仅要能正确分开输入的样本,即不仅仅要求θTx>0\theta^Tx>0θTx>0,我们需要的是比0值大很多,比如大于等于1,或者比0小很多,比如我希望它小于等于-1,这就相当于在支持向量机中嵌入了一个额外的安全因子,或者说安全的间距因子。
-
如果CCC非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为 0 的最优解。因此,让我们尝试在代价项的第一项为 0 的情形下理解该优化问题。
- 首先支持向量机的代价函数表示如下:minθC∑i=1m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+12∑i=1nθj2min_\theta C\sum_{i=1}^{m}[y^{(i)}cost_1(\theta^Tx^{(i)})+(1-y^{(i)})cost_0(\theta^Tx^{(i)})]+\frac{1}{2}\sum_{i=1}^{n}\theta_j^2minθC∑i=1m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+21∑i=1nθj2。
- 我们已经看到输入一个训练样本标签为y=1y=1y=1,你想令第一项为 0,你需要做的是找到一个θ\thetaθ,使得θTx>=1\theta^Tx>=1θTx>=1,类似地,对于一个训练样本,标签为y=0y=0y=0,为了使cost0(z)cost_0(z)cost0(z)函数的值为0,我们需要θTx<=−1\theta^Tx<=-1θTx<=−1。
- 因为我们将选择参数使第一项为0,因此这个函数的第一项为0,因此是CCC乘以 0 加上二分之一乘以第二项。这将遵从以下的约束:θTx>=1\theta^Tx>=1θTx>=1,如果y(i)y^{(i)}y(i)是等于 1 的,θTx<=−1\theta^Tx<=-1θTx<=−1,如果样本y(i)y^{(i)}y(i)是一个负样本。
-
具体而言,如果你考察下面这样一个数据集,其中有正样本,也有负样本,可以看到这个数据集是线性可分的。
-
支持向量机将会选择这个黑色的决策边界,黑线看起来是更稳健的决策界。在分离正样本和负样本上它显得的更好。数学上来讲,这条黑线有更大的距离,这个距离叫做间距(margin)。
-
当画出两条额外的蓝线,我们看到黑色的决策界和训练样本之间有更大的最短距离。然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本,因此支持向量机有时被称为大间距分类器。
-
我们将这个大间距分类器中的正则化因子常数CCC设置的非常大,因此对这样的一个数据集,也许我们将选择黑线这样的决策界,从而最大间距地分离开正样本和负样本。
-
在让代价函数最小化的过程中,我们希望找出在y=1y=1y=1和y=0y=0y=0两种情况下都使得代价函数中左边的这一项尽量为零的参数。如果我们找到了这样的参数,则我们的最小化问题便转变成:
-
事实上,支持向量机现在要比这个大间距分类器所体现得更成熟,尤其是当你使用大间距分类器的时候,你的学习算法会受异常点(outlier)的影响。
- 比如我们加入一个额外的正样本:
- 在这里,如果你加了这个样本,为了将样本用最大间距分开,也许我最终会得到一条类似这样粉色的线的决策界,仅仅基于一个异常值,仅仅基于一个样本,就将我的决策界从这条黑线变到这条粉线,这实在是不明智的。
- 而如果正则化参数CCC设置的非常大,这事实上正是支持向量机将会做的。它将决策界,从黑线变到了粉线,但是如果CCC设置的小一点, 如果你将CCC设置的不要太大,则你最终会得到这条黑线。
- 当然数据如果不是线性可分的,如果你在这里有一些正样本或者你在这里有一些负样本,则支持向量机也会将它们恰当分开。因此,大间距分类器的描述,仅仅是从直观上给出了正则化参数CCC非常大的情形。
- CCC的作用类似于1/λ1/\lambda1/λ, λ\lambdaλ是我们之前使用过的正则化参数。这只是CCC非常大的情形,或者等价λ\lambdaλ非常小的情形。你最终会得到类似粉线这样的决策界,但是实际上应用支持向量机的时候,当CCC不是非常非常大的时候,它可以忽略掉一些异常点的影响,得到更好的决策界。甚至当你的数据不是线性可分的时候,支持向量机也可以给出好的结果。
- 比如我们加入一个额外的正样本:
-
CCC较大时,相当于λ\lambdaλ较小,可能会导致过拟合,高方差;CCC较小时,相当于λ\lambdaλ较大,可能会导致低拟合,高偏差。