目录
【此为本人学习吴恩达的机器学习课程的笔记记录,有错误请指出!】
优化目标
为了描述支持向量机,我们将会从逻辑回归开始展示如何一点一点修改来得到本质上的支持向量机。
这里调整一下逻辑回归的代价函数,使用紫色画的曲线表示新的代价函数,这应该同逻辑回归代价函数做着类似的事情,但事实上,在之后的优化问题中,这会变得更坚定,并且为支持向量机带来计算上的优势。
现在让我给这两个代价函数命名,左边的函数,我称之为cos𝑡1(𝑧),同时,右边函数我称它为cos𝑡0(𝑧)。
最后得到的支持向量机的代价函数,这和逻辑回归的代价函数不太一样,如下不同点:
第一点:除去1/𝑚这一项(该项不影响得到最优值 𝜃)。
第二点:对于逻辑回归,使用 𝜆 来权衡 𝜃(即最小化 𝜃),对于支持向量机,使用 𝐶 来权衡 𝜃 。
第三点:逻辑回归输出的是概率,支持向量机直接输出 𝑦 值等于 1,还是等于 0 。
可以把 𝐶 和 𝜆 的关系当作 𝐶 = 1/𝜆,因此:
𝐶 较大时,相当于 𝜆 较小,可能会导致过拟合,高方差。
𝐶 较小时,相当于 𝜆 较大,可能会导致低拟合,高偏差。
大边界的直观理解
如果你观察这样一个数据集,其中有正样本,也有负样本,可以看到这个数据集是线性可分的,那么存在一条或多条直线可以把正负样本分开:
可以看到黑线是一条较合理的决策界, 这条黑线有更大的距离,这个距离叫做支持向量机的间距(margin):
因此支持向量机有时被称为大间距分类器。
大边界分类背后的数学
注意一点:
在线性回归中(假设为直线),我们希望找到一条能够拟合数据的直线,这条直线由斜率和截距决定的。
在支持向量机中(假设为直线),我们希望找到一条能够区分正负类的直线,这条直线就是使 𝜃 向量成为法线向量的直线,这里的直线就是决策边界。
我们先给出支持向量机模型的目标函数,为了讲解方便,简化了目标函数(为了分析方便):
内积𝜃𝑥:
内积 𝜃𝑥 等于 𝑝(𝑝 为第 𝑖个训练样本在参数向量𝜃上的投影)乘以向量 𝜃 的长度。
注意:𝑝 的投影长度也就是训练样本到决策边界的距离。
可以看到参数向量𝜃事实上是和决策边界是 90 度正交的,顺便提一句𝜃0 = 0的简化仅仅意味着决策边界必须通过原点(0,0)。现在看一下这对于优化目标函数意味着什么:
样本 𝑥(1) 对应的 𝑝(1) 是正值(红线投影,或该样本到决策边界的距离),且需要满足约束 𝑃(𝑖) ⋅ ∥𝜃∥>=1 。
样本 𝑥(2) 对应的 𝑝(2) 是负值(紫线投影,或该样本到决策边界的距离),且需要满足约束 𝑃(𝑖) ⋅ ∥𝜃∥<=-1 。
如果不满足约束条件,也就是该决策边界的预测分类和实际分类不一致,这时需要更新 𝜃 向量,使得决策边界能够正确分类。
目前看到左边的决策边界能够正确地区分正负类,但是由于 𝑃(𝑖) 投影长度比较小(也就是间距较小),因此,这看起来不像是一个好的参数向量 𝜃 的选择。
为了选择合适的决策边界,需要增大𝑃(𝑖) 投影长度, 在约束条件下,需要参数 𝜃 的范数变小:
在满足约束 𝑃(𝑖) ⋅ ∥𝜃∥>=1 条件下, 如果 𝑝(1) 投影长度变大了,相应的 𝜃 的范数就要变小。
在满足约束 𝑃(𝑖) ⋅ ∥𝜃∥<=-1 条件下, 如果 𝑝(2) 投影长度变大了,相应的 𝜃 的范数就要变小。
如右边绿色的决策边界,我们希望正样本和负样本投影到𝜃的值变大,要做到这一点的唯一方式就是选择这条绿线做决策边界。这些间距的值就是𝑝(1), 𝑝(2), 𝑝(3)等等。通过让间距变大,支持向量机最终可以找到一个较小的𝜃范数。这正是支持向量机中最小化目标函数的目的。
核函数-1
我们可以使用多项式模型解决非线性分类问题,除了对原有的特征进行多项式组合以外,还可以利用核函数来计算出新的特征。
给 定 一 个 训 练 实 例 𝑥 , 我 们 利 用 𝑥 的 各 个 特 征 与 我 们 预 先 选 定 的 地 标(landmarks) 𝑙(1), 𝑙(2), 𝑙(3)的近似程度来选取新的特征𝑓1, 𝑓2, 𝑓3。
例如:
其中实例 𝑥 中所有特征与地标𝑙(1)之间的距离的和:
上例中的𝑠𝑖𝑚𝑖𝑙𝑎𝑟𝑖𝑡𝑦(𝑥, 𝑙(1))就是核函数,具体而言,这里是一个高斯核函数(Gaussian Kernel)。
注:这个函数与正态分布没什么实际上的关系,只是看上去像而已。
如果一个训练实例𝑥与地标𝐿之间的距离近似于 0,则新特征 𝑓 近似于 , 如果训练实例𝑥与地标𝐿之间距离较远,则𝑓近似于 。
假设我们的训练实例含有两个特征[𝑥1 𝑥2],给定地标𝑙(1)与不同的𝜎值,见下图:
图中水平面的坐标为 𝑥1, 𝑥2而垂直坐标轴代表𝑓。
可以看出,只有当𝑥与𝑙(1)重合时𝑓才具有最大值。随着𝑥的改变𝑓值改变的速率受到𝜎2的控制。
在下图中,当实例处于洋红色的点位置处,因为其离𝑙(1)更近,但是离𝑙(2)和𝑙(3)较远,因此𝑓1接近 1,而𝑓2,𝑓3接近 0。因此ℎ𝜃(𝑥) = 𝜃0 + 𝜃1𝑓1 + 𝜃2𝑓2 + 𝜃1𝑓3 > 0,因此预测𝑦 = 1。同理可以求出,对于离𝑙(2)较近的绿色点,也预测𝑦 = 1,但是对于蓝绿色的点,因为其离三个地标都较远,预测𝑦 = 0。
这样,图中红色的封闭曲线所表示的范围,便是我们依据一个单一的训练实例和我们选取的地标所得出的判定边界,在预测时,我们采用的特征不是训练实例本身的特征,而是通过核函数计算出的新特征𝑓1, 𝑓2, 𝑓3。
核函数-2
如何选择地标?
我们通常是根据训练集的数量选择地标的数量,即如果训练集中有𝑚个实例,则选取𝑚个地标,并且令:𝑙(1) = 𝑥(1), 𝑙(2) = 𝑥(2), . . . . . , 𝑙(𝑚) = 𝑥(𝑚)。这样做的好处在于:现在得到的新特征是建立在原有特征与训练集中所有其它特征之间距离的基础之上的,即:
支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),当不采用非常复杂的函数,或者训练集特征非常多而实例非常少的时候,可以采用这种不带核函数的支持向量机。
下面是支持向量机的两个参数𝐶和𝜎的影响:
𝐶 = 1/𝜆
𝐶 较大时,相当于𝜆较小,可能会导致过拟合,高方差;
𝐶 较小时,相当于𝜆较大,可能会导致低拟合,高偏差;
𝜎较大时,可能会导致低方差,高偏差;
𝜎较小时,可能会导致低偏差,高方差。
使用支持向量机
在高斯核函数之外我们还有其他一些选择,如:
多项式核函数( Polynomial Kernel)
字符串核函数( String kernel)
卡方核函数( chi-square kernel)
直方图交集核函数( histogram intersection kernel)
这些核函数的目标也都是根据训练集和地标之间的距离来构建新特征,这些核函数需要满足 Mercer's 定理,才能被支持向量机的优化软件正确处理。
多类分类问题:
如果一共有𝑘个类,则需要𝑘个模型,以及𝑘个参数向量𝜃。同样也可以训练𝑘个支持向量机来解决多类分类问题,但是大多数支持向量机软件包都有内置的多类分类功能,我们只要直接使用即可。
尽量不需要实现自己的 SVM 的优化软件,但是需要做几件事:
1、参数𝐶的选择。
2、选择内核函数或相似函数,如果不选择任何内核函数,也叫线性核函数。
下面是一些普遍使用的准则:
𝑛为特征数, 𝑚为训练样本数。
(1) 如果相较于𝑚而言, 𝑛要大许多,即训练集数据量不够支持训练一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。
(2) 如果𝑛较小,而且𝑚大小中等,例如𝑛在 1-1000 之间,而𝑚在 10-10000 之间,使用高斯核函数的支持向量机。
(3) 如果𝑛较小,而𝑚较大,例如𝑛在 1-1000 之间,而𝑚大于 50000,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。
值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。