与逻辑回归和神经网络相比,支持向量机SVM在学习复杂的非线性方程时提供了一种更为清晰,更加强大的方式。
现在开始建立支持向量机,从代价函数开始,用一个新的代价函数来代替,即这条从0点开始的水平直线,然后是一条斜线,像上图。左边的函数称之为 cos t 1 ( z ) {\cos}t_1{(z)} cost1(z),右边函数称为 cos t 0 ( z ) {\cos}t_0{(z)} cost0(z)。这里的下标是指在代价函数中,对应的 y = 1 y=1 y=1 和 y = 0 y=0 y=0 的情况。
min θ C ∑ i = 1 m [ y ( i ) cos t 1 ( θ T x ( i ) ) + ( 1 − y ( i ) ) cos t 0 ( θ T x ( i ) ) ] + 1 2 ∑ i = 1 n θ j 2 \min_{\theta}C\sum_{i=1}^{m}\left[y^{(i)}{\cos}t_{1}\left(\theta^{T}x^{(i)}\right)+\left(1-y^{(i)}\right){\cos}t_0\left(\theta^{T}x^{(i)}\right)\right]+\frac{1}{2}\sum_{i=1}^{n}\theta^{2}_{j} minθC∑i=1m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+21∑i=1nθj2
相比逻辑回归,支持向量机去除了 1 / m 1/m 1/m这一项,并用 C C C代替 1 / λ 1/\lambda 1/λ,最后有别于逻辑回归输出的概率,当最小化代价函数,获得参数 θ {{\theta }} θ时,支持向量机直接预测 y y y的值等于1,还是等于0。
区别于之前的阈值,现在的 ± 1 ±1 ±1相当于在支持向量机中嵌入了一个额外的安全因子,或者说安全的间距因子。这使得决策边界和训练样本之间有更大的最短距离,这个距离叫做支持向量机的间距(margin),而这是支持向量机具有鲁棒性的原因,因为它努力用一个最大间距来分离样本。因此支持向量机有时被称为大间距分类器。
为了获得非线性的判定边界,模型可能是 θ 0 + θ 1 x 1 + θ 2 x 2 + θ 3 x 1 x 2 + θ 4 x 1 2 + θ 5 x 2 2 + ⋯ {\theta}_{0}+{{\theta }_{1}}{{x}_{1}}+{{\theta }_{2}}{{x}_{2}}+{{\theta }_{3}}{{x}_{1}}{{x}_{2}}+{{\theta }_{4}}x_{1}^{2}+{{\theta }_{5}}x_{2}^{2}+\cdots θ0+θ1x1+θ2x2+θ3x1x2+θ4x12+θ5x22+⋯的形式。
可以用一系列的新的特征 f f f来替换模型中的每一项。如令:
f 1 = x 1 , f 2 = x 2 , f 3 = x 1 x 2 , f 4 = x 1 2 , f 5 = x 2 2 {{f}_{1}}={{x}_{1}},{{f}_{2}}={{x}_{2}},{{f}_{3}}={{x}_{1}}{{x}_{2}},{{f}_{4}}=x_{1}^{2},{{f}_{5}}=x_{2}^{2} f1=x1,f2=x2,f3=x1x2,f4=x12,f5=x22…
得到 h θ ( x ) = θ 1 f 1 + θ 2 f 2 + . . . + θ n f n h_θ(x)={{\theta }_{1}}f_1+{{\theta }_{2}}f_2+...+{{\theta }_{n}}f_n hθ(x)=θ1f1+θ2f2+...+θnfn。除了对原有的特征进行组合以外,有没有更好的方法来构造 f 1 , f 2 , f 3 f_1,f_2,f_3 f1,f2,f3?可以利用核函数来计算出新的特征。
给定一个训练样本 x x x,利用 x x x的各个特征与预先选定的地标(landmarks) l ( 1 ) , l ( 2 ) , l ( 3 ) l^{(1)},l^{(2)},l^{(3)} l(1),l(2),l(3)的近似程度来选取新的特征 f 1 , f 2 , f 3 f_1,f_2,f_3 f1,f2,f3。
例如: f 1 = s i m i l a r i t y ( x , l ( 1 ) ) = e ( − ∥ x − l ( 1 ) ∥ 2 2 σ 2 ) {{f}_{1}}=similarity(x,{{l}^{(1)}})=e(-\frac{{{\left\| x-{{l}^{(1)}} \right\|}^{2}}}{2{{\sigma }^{2}}}) f1=similarity(x,l(1))=e(−2σ2∥x−l(1)∥2)
其中: ∥ x − l ( 1 ) ∥ 2 = ∑ j = 1 n ( x j − l j ( 1 ) ) 2 {{\left\| x-{{l}^{(1)}} \right\|}^{2}}=\sum{_{j=1}^{n}}{{({{x}_{j}}-l_{j}^{(1)})}^{2}} ∥∥x−l(1)∥∥2=∑j=1n(xj−lj(1))2,为实例 x x x中所有特征与地标 l ( 1 ) l^{(1)} l(1)之间的距离的和。 s i m i l a r i t y ( x , l ( 1 ) ) similarity(x,{{l}^{(1)}}) similarity(x,l(1))就是核函数,这里是一个高斯核函数(Gaussian Kernel)。 注:这个函数与正态分布没什么实际上的关系,只是看上去像而已。
如果一个训练样本 x x x与地标 l l l之间的距离近似于0,则新特征 f f f近似于 e − 0 = 1 e^{-0}=1 e−0=1,如果训练样本 x x x与地标 l l l之间距离较远,则 f f f近似于 e − ( 一 个 较 大 的 数 ) = 0 e^{-(一个较大的数)}=0 e−(一个较大的数)=0。
假设训练样本含有两个特征[ x 1 x_{1} x1 x 2 x{_2} x2],给定地标 l ( 1 ) l^{(1)} l(1)与不同的 σ \sigma σ值,见下图:
只有当 x x x与 l ( 1 ) l^{(1)} l(1)重合时 f f f才具有最大值。随着 x x x的改变 f f f值改变的速率受到 σ 2 \sigma^2 σ2的控制。
图中红色的封闭曲线所表示的范围,便是依据一个单一的训练样本和选取的地标所得出的判定边界,在预测时,我们采用的特征不是训练样本本身的特征,而是通过核函数计算出的新特征 f 1 , f 2 , f 3 f_1,f_2,f_3 f1,f2,f3。
如何选择地标?
通常是根据训练集的数量选择地标的数量,即如果训练集中有 m m m个样本,则选取 m m m个地标,并且令: l ( 1 ) = x ( 1 ) , l ( 2 ) = x ( 2 ) , . . . . . , l ( m ) = x ( m ) l^{(1)}=x^{(1)},l^{(2)}=x^{(2)},.....,l^{(m)}=x^{(m)} l(1)=x(1),l(2)=x(2),.....,l(m)=x(m)。这样做的好处在于:得到的新特征是建立在原有特征与训练集中所有其他特征之间距离的基础之上的,即:
下面我们将核函数运用到支持向量机中,修改我们的支持向量机假设为:
• 给定 x x x,计算新特征 f f f,当 θ T f > = 0 θ^Tf>=0 θTf>=0 时,预测 y = 1 y=1 y=1,否则反之。
相应地修改代价函数为: ∑ j = 1 n = m θ j 2 = θ T θ \sum_{j=1}^{n=m}\theta _{j}^{2}={{\theta}^{T}}\theta ∑j=1n=mθj2=θTθ,
m i n C ∑ i = 1 m [ y ( i ) c o s t 1 ( θ T f ( i ) ) + ( 1 − y ( i ) ) c o s t 0 ( θ T f ( i ) ) ] + 1 2 ∑ j = 1 n = m θ j 2 min C\sum\limits_{i=1}^{m}{[{{y}^{(i)}}cos {{t}_{1}}}( {{\theta }^{T}}{{f}^{(i)}})+(1-{{y}^{(i)}})cos {{t}_{0}}( {{\theta }^{T}}{{f}^{(i)}})]+\frac{1}{2}\sum\limits_{j=1}^{n=m}{\theta _{j}^{2}} minCi=1∑m[y(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+21j=1∑n=mθj2
还需要对最后的正则化项进行些微调整,在计算 ∑ j = 1 n = m θ j 2 = θ T θ \sum{_{j=1}^{n=m}}\theta _{j}^{2}={{\theta}^{T}}\theta ∑j=1n=mθj2=θTθ时,我们用 θ T M θ θ^TMθ θTMθ代替 θ T θ θ^Tθ θTθ,其中 M M M是根据选择的核函数而不同的一个矩阵。这样做的原因是为了简化计算。
理论上讲,也可以在逻辑回归中使用核函数,但是上面使用 M M M来简化计算的方法不适用与逻辑回归,因此计算将非常耗费时间。
在使用软件包(如liblinear,libsvm等)最小化代价函数之前,通常需要编写核函数,如果使用高斯核函数,进行特征缩放是非常必要的。
支持向量机也可以不使用核函数,又称为线性核函数(linear kernel),当不采用复杂的函数,或者训练集特征非常多而样本非常少时,可以采用不带核函数的支持向量机。
下面是支持向量机的两个参数 C C C和 σ \sigma σ的影响:
C = 1 / λ C=1/\lambda C=1/λ
C C C 较大时,相当于 λ \lambda λ较小,可能会导致过拟合,高方差;
C C C 较小时,相当于 λ \lambda λ较大,可能会导致低拟合,高偏差;
σ \sigma σ较大时,可能会导致低方差,高偏差;
σ \sigma σ较小时,可能会导致低偏差,高方差。
在高斯核函数之外还有其他一些选择,如:
这些核函数的目标都是根据训练集和地标之间的距离来构建新特征,这些核函数需要满足Mercer’s定理,才能被支持向量机的优化软件正确处理。
多类分类问题:假设利用之前介绍的一对多方法来解决一个多类分类问题。如果一共有 k k k个类,则需要 k k k个模型,以及 k k k个参数向量 θ {{\theta }} θ。同样也可以训练 k k k个支持向量机来解决多类分类问题。但大多数支持向量机软件包都有内置的多类分类功能,直接使用即可。
尽管不需要写SVM的优化软件,但需要做以下几件事:
逻辑回归与支持向量机的选择( n n n为特征数, m m m为训练样本数):
神经网络在以上三种情况下都可能会有较好的表现,但是训练神经网络可能非常慢,选择支持向量机的原因主要在于它的代价函数是凸函数,不存在局部最小值。
以下哪项陈述是正确的?选出所有正确项(CD)
A. 假设您使用支持向量机进行多类分类,并希望使用“一对所有”方法。如果你有 K K K个不同的类,你将训练 K − 1 K-1 K−1个不同的支持向量机。
B. 如果数据是线性可分的,那么不管 C C C值是多少,线性内核的支持向量机都将返回相同的参数 θ \theta θ(即, θ \theta θ的结果值不依赖于 C C C)。
C. 高斯核的最大值(即 s i m ( x , l ( 1 ) ) sim(x,l^{(1)}) sim(x,l(1)))是1。
D. 在使用高斯核之前进行特征归一化是很重要的。