12 支持向量机(Support Vector Machines)
12.1 优化目标
在监督学习中,许多学习算法的性能都非常类似,因此,重要的不是你该选择使用学习算法A还是学习算法B,而更重要的是,应用这些算法时,所创建的大量数据在应用这些算法时,表现情况通常依赖于你的水平。
还有一个更加强大的算法广泛的应用于工业界和学术界,它被称为支持向量机(Support Vector Machine)。与逻辑回归和神经网络相比,支持向量机,或者简称SVM,在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。
下面将从逻辑回归开始展示如何一点一点修改来得到本质上的支持向量机,先从优化目标开始。
- 调整逻辑回归的代价函数,紫色图像表示的是调整后的代价函数,这应该同逻辑回归代价函数做着类似的事情,但事实上,在之后的优化问题中,这会变得更坚定,并且为支持向量机带来计算上的优势。给两个图像命名,左边的是当y=1时的代价函数图像——
,右边是y=0时的代价函数图像——
。
- 得到SVM的代价函数的 ,与逻辑回归的不同点在于:①除去1/𝑚这一项(该项不影响得到最优值 𝜃);②对于逻辑回归,使用 𝜆 来权衡 𝜃(即最小化 𝜃),对于支持向量机,使用 𝐶 来权衡 𝜃 。比如,A+λB和CA+B,将很大的λ放在B前,是给了B很大的权重,同样地,将很小的C放在A前面,也相当于给了B很大的权重。可以把 𝐶 和 𝜆 的关系当作 𝐶 = 1/𝜆,因此:𝐶 较大时,相当于 𝜆 较小,可能会导致过拟合,高方差。𝐶 较小时,相当于 𝜆 较大,可能会导致低拟合,高偏差。③逻辑回归输出的是概率,支持向量机直接输出 𝑦 值等于 1,还是等于 0 。
12.2 直观上的对大间隔的理解
支持向量机也叫做大间距分类器,下面是支持向量机的代价函数及其图像,对于逻辑回归来说,目的是要正确分类,如果要让y=1,只需让z≥0,若要y=0,只需让z<0,但是支持向量机不仅仅做到简单的分类,如果要让y=1,需让z≥1,若要y=0,需让z<1,这叫安全间隔。
我们对样本进行了正确分类后,可以用一条叫做决策边界的线将正负样本区分开,SVM也有决定边界。 决策边界不止一条,粉色和绿色的那两条看起来不自然,也是比较差的决策边界,而SVM会选择黑色那条作为决策边界(更优、更稳健),从数学上可以说这条黑色的决策边界拥有更大的距离,叫做间距(margin),这个间距就是黑色与两边平行的蓝色线之间的距离,相对于粉色绿色与蓝色之间的距离更大,所以黑色这条线也叫做支持向量机的间距,它在分离样本时会尽量用更大的间距去分离,所以支持向量机有时被叫做大间距分类器。
还有一点,大间距分类器是在常数C被设的很大的情况下得出的,而且大间距分类器对异常点格外敏感,比如在已经画出决策边界的图上在负样本中加入一个正样本,那么重新进行学习,新的决策边界会立刻再次将样本分类。就因为一个异常点,支持向量机就会将黑色的决策边界变为紫色的,所以这样是不太好的。
但如果C比较小,那么出现异常点后,决策边界还是那条黑线,不变。如果样本不是线性可分的,SVM照样可以正确分类。
12.3 大间隔分类器的数学原理
先理解以下内积,比如向量u与向量v的内积,他俩如果用线性代数中的方法直接计算的话,结果就是
,但如果看它的集合意义,就是向量v在向量u上的投影长度p与向量u长度的乘积:
,其中p与
都是常数,p可为负,比如第二个坐标系中画出了u,v两个向量,他俩的夹角为钝角,如果要往u上投影,只能反向延长u,故p为负。
通过内积的知识理解支持向量机中的优化目标函数。
下面给出了支持向量机中的优化目标函数,简化以下,将设为0,𝜃0 = 0的简化仅仅意味着决策边界必须通过原点(0,0),也就是不考虑截距,现有两个特征向量
,那么目标优化函数就可以写成
,进一步转化一下
,那么就会发现括号里的这项等于
,所以再进一步转化,优化目标函数又可以变成
。
再来看约束条件,如果y=1,z≥1;如果y=0,z<-1.其中,可以将它与上边的内积类比,就可以画出此图,也能得到二者的内积:
。列出这个式子的意义就在于可以用
代替
。
列出这个式子的意义就在于可以用代替
。再来看此时支持向量机划分底下两个样本的过程。每条决策边界都与一个θ向量正交(因为对于任意超平面, 它的参数theta就是它的法向量.)
样本 𝑥(1) 对应的 𝑝(1) 是正值(红线投影,或该样本到决策边界的距离),且需要满足约束 𝑃(𝑖) ⋅ ∥𝜃∥>=1 。
样本 𝑥(2) 对应的 𝑝(2) 是负值(紫线投影,或该样本到决策边界的距离),且需要满足约束 𝑃(𝑖) ⋅ ∥𝜃∥<=-1 。
如果不满足约束条件,也就是该决策边界的预测分类和实际分类不一致,这时需要更新 𝜃 向量,使得决策边界能够正确分类。
目前看到左边的决策边界能够正确地区分正负类,但是由于 𝑃(𝑖) 投影长度比较小(也就是间距较小),因此,这看起来不像是一个好的参数向量 𝜃 的选择。
为了选择合适的决策边界,需要增大𝑃(𝑖) 投影长度, 在约束条件下,需要参数 𝜃 的范数变小:
在满足约束 𝑃(𝑖) ⋅ ∥𝜃∥>=1 条件下, 如果 𝑝(1) 投影长度变大了,相应的 𝜃 的范数就要变小。
在满足约束 𝑃(𝑖) ⋅ ∥𝜃∥<=-1 条件下, 如果 𝑝(2) 投影长度变大了,相应的 𝜃 的范数就要变小。
如右边绿色的决策边界,我们希望正样本和负样本投影到𝜃的值变大,要做到这一点的唯一方式就是选择这条绿线做决策边界。这些间距的值就是𝑝(1), 𝑝(2), 𝑝(3)等等。通过让间距变大,支持向量机最终可以找到一个较小的𝜃范数。这正是支持向量机中最小化目标函数的目的。
12.4 核函数1
我们可以使用多项式模型解决非线性分类问题,除了对原有的特征进行多项式组合以外,还可以利用核函数来计算出新的特征。
给定一个训练样本 x ,我们利用 x 的各个特征与我们预先选定的地标(landmarks) 的近似程度来选取新的特征
。
其中:
上面的式子就是核函数,具体的讲是高斯核函数、相似度函数,其中表示的是x所有特征与地标之间的距离和。但是一般不用
表示,会写成
。
核函数做的事情:假设x与其中一个标记点非常接近,那么这个欧式距离的式子及分子就会接近于0,那么
就是一个简单的特征,将会接近
,约等于1,约等于是因为欧氏距离不是严格为0的,只是接近。相反的,如果x离某个标记很远,那么这个特征就等于
.
所以这些特征做的就是衡量x到标记l的相似度,如果相似度高很接近,那么特征f就非常接近于1,反之则接近于0.上面定义了三个标记,他们分别对应着三个特征
。
假设我们有两个特征变量,第一个标记
,
,那么第一个特征
的图像如下所示。两个特征对应的纵轴高度就是特征f,下面的图是相同的内容,只不过是等高线图。
可以看出,只有当𝑥与𝑙(1)重合时𝑓才具有最大值。随着𝑥的改变𝑓值改变的速率受到的控制。
再看下图,来预测粉色、绿色、浅蓝色三个点的值,通过下面的预测函数,已经给出所有参数的值。
粉色的点:离近,离
远,所以
,
,带入得出=0.5,大于等于0,因此预测值等于1.
蓝色绿色都可这么计算出,最后可得出绿色点预测值=1,蓝色=0.这样就可以划分出两个区域,一部分是预测值=1的(红色区域),一部分是预测值等于0的。
这样,图中红色的封闭曲线所表示的范围,便是我们依据一个单一的训练实例和我们选取的地标所得出的判定边界,在预测时,我们采用的特征不是训练实例本身的特征,而是通过核函数计算出的新特征𝑓1, 𝑓2, 𝑓3。
12.5 核函数2
这部分是核函数在实际的应用
- 如何选择地标 我们通常是根据训练集的数量选择地标的数量,即如果训练集中有𝑚个实例,则选取𝑚个地标,并且令:
. 当给定了x,其属于训练集,也可以属于交叉验证集或测试集,然后就可以用给定的x计算特征
.
如果给定了训练样本,那就将
映射到
,
,来计算
与各个地 标地标的相似度(特征),最后将这m个特征合成一个特征向量
,它就是用来描述训练样本的特征向量。
这样做的好处在于:现在得到的新特征是建立在原有特征与训练集中所有其它特征之间距离的基础之上的。
那么为了解决最小化误差问题时,将原来的替换成新特征
,继续训练出最优参数θ。因为这里的新特征数量就等于样本数量,所以公式中的n=m,所以在支持向量机中正则化一项会有所不同。
支持向量机也可以不使用核函数,不使用核函数又称为线性核函数(linear kernel),当不采用非常复杂的函数,或者训练集特征非常多而实例非常少的时候,可以采用这种不带核函数的支持向量机。
- 支持向量机中参数选择(C和
)
需要了解使用支持向量机时的偏差-方差折中
C的作用:
C的作用与相似,λ是逻辑回归算法中的正则化参数。
大的C对应:低偏差,高方差模型——过拟合
小的C对应:高偏差,低方差模型——欠拟合
的作用:
偏大,相似度函数图像相对平滑,变化缓慢,模型高偏差,低方差
偏小,相似度函数图像不平滑,变化剧烈,会有较大的斜率导数,模型低偏差,高方差。
12.6 使用SVM
- 尽量不需要实现自己的 SVM 的优化软件,但是需要做几件事:
①选择合适的参数C
②选择内核参数或想使用的相似函数,如果不选择任何内核函数,也叫线性核函数。如果选择了高斯核函数,还要考虑参数的选择。
- 在高斯核函数之外我们还有其他一些选择,如:
多项式核函数( Polynomial Kernel)
字符串核函数( String kernel)
卡方核函数( chi-square kernel)
直方图交集核函数( histogram intersection kernel)
这些核函数的目标也都是根据训练集和地标之间的距离来构建新特征,这些核函数需要满足 Mercer's 定理,才能被支持向量机的优化软件正确处理。
-
多类分类问题:
如果一共有𝑘个类,则需要𝑘个模型,以及𝑘个参数向量𝜃。同样也可以训练𝑘个支持向量机来解决多类分类问题,但是大多数支持向量机软件包都有内置的多类分类功能,我们只要直接使用即可。
-
下面是一些普遍使用的准则:
𝑛为特征数, 𝑚为训练样本数。
(1) 如果相较于𝑚而言, 𝑛要大许多,即训练集数据量不够支持训练拟合一个复杂的非线性模型,我们选用逻辑回归模型或者不带核函数的支持向量机。
(2) 如果𝑛较小,而且𝑚大小中等,例如𝑛在 1-1000 之间,而𝑚在 10-10000 之间,使用高斯核函数的支持向量机。
(3) 如果𝑛较小,而𝑚较大,例如𝑛在 1-1000 之间,而𝑚大于 50000甚至上百万,则使用支持向量机会非常慢,解决方案是创造、增加更多的特征,然后使用逻辑回归或不带核函数的支持向量机。
值得一提的是,神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。