本节目录:
1 优化目标
2 大边界的理解
3 大间距分类器
4 核函数
5 使用支持向量机
1.优化目标
大量数据在应用算法时,表现情况往往依赖于操作水平,比如 算法设计特征量的选择、如何选择正则化参数等。
逻辑回归中的假设函数服从这样的规律:
如果有一个y=1的样本,我们希望ℎ𝜃(𝑥) 趋 近 1。因为我们想要正确地将此样本分类,这就意味着当 ℎ𝜃(𝑥)趋近于 1 时,𝜃𝑇𝑥 应当远大于 0。这是因为由于 𝑧 表示 𝜃𝑇𝑥,当 𝑧远大于 0 时,即到了
该图的右边,你不难发现此时逻辑回归的输出将趋近于 1。相反地,如果我们有另一个样本,
即𝑦 = 0。我们希望假设函数的输出值将趋近于 0,这对应于𝜃𝑇𝑥,或者就是 𝑧 会远小于 0,
因为对应的假设函数的输出值趋近 0。
如果你进一步观察逻辑回归的代价函数,你会发现每个样本 (𝑥, 𝑦)都会为总代价函数,
增加这里的一项,因此,对于总代价函数通常会有对所有的训练样本求和,并且这里还有一
个1/𝑚项。
下面就是分别Y=1和y=0时各自具体情况:
现在,一起来考虑两种情况:
一种是𝑦等于 1 的情况;另一种是 𝑦 等于 0 的情况。
在第一种情况中,假设 𝑦 = 1 ,此时在目标函数中只需有第一项起作用,因为𝑦 = 1时,
(1 − 𝑦)项将等于 0。因此,当在 𝑦 = 1 的样本中时,即在 (𝑥, 𝑦)中 ,我们得到 𝑦 = 1
−log(1 − 1 /(1+𝑒−𝑧))这样一项。
有了以上知识铺垫,我们就可以创建支持向量机了。
首先去除逻辑回归中的1/m这一项,得到相同的最优值theta.
然后前面加上一个参数C平衡代价函数和正则化项,
这就得到了支持向量机中整个优化目标函数。然后最小化目标函数,得到SVM学习到的参数C。
在这里,我们的代价函数,当最小化代价函数,获得参数𝜃时,支持向量机所做的是它来直接预测𝑦的值等于 1,还是等于 0。因此,这个假设函数会预测 1。当𝜃𝑇𝑥大于或者等于 0 时,或者等于 0 时,所以学习参数𝜃就是支持向量机假设函数的形式。那么,这就是支持向量机数学上的定义。
2 大边界的理解
这是支持向量机模型的代价函数,在左边这里我画出了关于𝑧的代价函数cos𝑡1(𝑧),此函数用于正样本,而在右边这里我画出了关于𝑧的代价函数cos𝑡0(𝑧),横轴表示𝑧,现在让我们考虑一下,最小化这些代价函数的必要条件是什么。如果你有一个正样本,𝑦 = 1,则只有在𝑧 >= 1时,代价函数cos𝑡1(𝑧)才等于 0。
换句话说,如果你有一个正样本,我们会希望𝜃𝑇𝑥>=1,反之,如果𝑦 = 0,我们观察一下,函数cos𝑡0(𝑧),它只有在𝑧 <= −1的区间里函数值为 0。这是支持向量机的一个有趣性质。
我接下来会考虑一个特例。我们将这个常数𝐶设置成一个非常大的
值。比如我们假设𝐶的值为 100000 或者其它非常大的数,然后来观察支持向量机会给出什
么结果?
如果 𝐶非常大,则最小化代价函数的时候,我们将会很希望找到一个使第一项为 0 的
最优解。因此,让我们尝试在代价项的第一项为 0 的情形下理解该优化问题。比如我们可以
把𝐶设置成了非常大的常数,这将给我们一些关于支持向量机模型的直观感受。
我们已经看到输入一个训练样本标签为𝑦 = 1,你想令第一项为 0,你需要做的是找到
一个𝜃,使得𝜃𝑇𝑥 >= 1,类似地,对于一个训练样本,标签为𝑦 = 0,为了使cos𝑡0(𝑧) 函数的
值为 0,我们需要𝜃𝑇𝑥 <= −1。因此,现在考虑我们的优化问题。选择参数,使得第一项等
于 0,就会导致下面的优化问题,因为我们将选择参数使第一项为 0,因此这个函数的第一
项为 0,因此是𝐶乘以 0 加上二分之一乘以第二项。这里第一项是𝐶乘以 0,因此可以将其删
去,因为我知道它是 0。
这将遵从以下的约束:𝜃𝑇𝑥(𝑖) >= 1,如果 𝑦(𝑖)是等于 1 的,𝜃𝑇𝑥(𝑖) <= −1,如果样本𝑖
是一个负样本,这样当你求解这个优化问题的时候,当你最小化这个关于变量𝜃的函数的时
候,你会得到一个非常有趣的决策边界。
或者我们可以画一条更差的决策界,这是另一条决策边界,可以将正样本和负样本分开,
但仅仅是勉强分开,这些决策边界看起来都不是特别好的选择,支持向量机将会选择这个黑
色的决策边界,相较于之前我用粉色或者绿色画的决策界。这条黑色的看起来好得多,黑线
看起来是更稳健的决策界。在分离正样本和负样本上它显得的更好。数学上来讲,这是什么
意思呢?这条黑线有更大的距离,这个距离叫做间距(margin)。
当画出这两条额外的蓝线,我们看到黑色的决策界和训练样本之间有更大的最短距离。
然而粉线和蓝线离训练样本就非常近,在分离样本的时候就会比黑线表现差。因此,这个距
离叫做支持向量机的间距,而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间
距来分离样本。因此支持向量机有时被称为大间距分类器,
3 大间距分类器
我们将这个大间距分类器中的正则化因子常数𝐶设置的非常大,我记得我将其设置为了 100000,因此对这样的一个数据集,也许我们将选择这样的决策界,从而最大间距地分离开正样本和负样本。那么在让代价函数最小化的过程中,我们希望找出在𝑦 = 1和𝑦 = 0两种情况下都使得代价函数中左边的这一项尽量为零的参数。如果我们找到了这样的参数,则我们的最小化问题便转变成:
圆圈和红叉之间用黑线分割,但如果再加入一点,间隔线就变成了红线。这是不明智的。而如果参数C设置非常大,决策边界又从黑线变成了红线。
大间距分类器的描述,仅仅是从直观上给出了正则化参数𝐶非常大的
情形,同时,要提醒你𝐶的作用类似于1/𝜆,𝜆是我们之前使用过的正则化参数。这只是𝐶非
常大的情形,或者等价地 𝜆 非常小的情形。你最终会得到类似粉线这样的决策界,但是实
际上应用支持向量机的时候,当𝐶不是非常非常大的时候,它可以忽略掉一些异常点的影响,
得到更好的决策界。甚至当你的数据不是线性可分的时候,支持向量机也可以给出好的结果。
回顾 𝐶 = 1/𝜆,因此:
𝐶 较大时,相当于 𝜆 较小,可能会导致过拟合,高方差。
𝐶 较小时,相当于 𝜆 较大,可能会导致低拟合,高偏差。
4 核函数
使用高级数的多项式模型可以解决无法用直线进行分隔的分类问题:
这些地标的作用是什么?如果一个训练实例𝑥与地标𝐿之间的距离近似于 0,则新特征 f 近似于𝑒−0 = 1,如果训练实例𝑥与地标𝐿之间距离较远,则𝑓近似于𝑒−(一个较大的数) = 0。
那么如何选择地标呢?
我们通常是根据训练集的数量选择地标的数量,即如果训练集中有𝑚个实例,则我们选
取𝑚个地标,并且令:𝑙(1) = 𝑥(1), 𝑙(2) = 𝑥(2), . . . . . , 𝑙(𝑚) = 𝑥(𝑚)。这样做的好处在于:现在我们
得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:
另外,支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),
当我们不采用非常复杂的函数,或者我们的训练集特征非常多而实例非常少的时候,可以采
用这种不带核函数的支持向量机。
5 使用支持向量机
使用SVM优化时需要注意以下两点:
1 提出参数C的选择
2 选择内核参数或你想要使用的内核函数
从逻辑回归模型,我们得到了支持向量机模型,在两者之间,我们应该如何选择呢?
下面是一些普遍使用的准则:
𝑛为特征数,𝑚为训练样本数。
(1)如果相较于𝑚而言,𝑛要大许多,即训练集数据量不够支持我们训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。
(2)如果𝑛较小,而且𝑚大小中等,例如𝑛在 1-1000 之间,而𝑚在 10-10000 之间,使用高斯核函数的支持向量机。
(3)如果𝑛较小,而𝑚较大,例如𝑛在 1-1000 之间,而𝑚大于 50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。
值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络
可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。