前两章讨论支持向量机时,假设了数据最终是能完全被分开,即数据在原始特征空间或映射到高维特征空间之后能够完全正确分类。但是,这样绝对的分类存在一个明显的问题,如果模型中存在异常点,即使高维映射之后,能够完全正确分类,也可能导致模型复杂度过高,模型过拟合。虽然训练出来的模型能够在训练集上表现很好,但其泛化能力会很差。
如下图所示,明显蓝色框标记的两个白色点和两个红色点都是异常点,如果通过硬间隔SVM我们会得到右上角的分类效果,而采用高斯核则会得到左下角的结果。这两种分类器都能够将训练样本完全正确分类,但是这与我们人眼所观测到的分类器明显存在差异,如果应用这两个分类器在测试集上进行测试,有可能出现很大的误差。我们认为最恰当的应该还是类似于右下角的软间隔分类器。
也就是说,在某种情况下,训练集数据存在一定的异常点,如果将这些异常点取出后,我们能够得到更好的模型。那么,如何将这些异常点去的影响去除呢?在SVM中我们通过引入松弛变量来解决这个问题。为了更好地理解松弛变量的含义,我们在此类比逻辑回归的损失函数。
逻辑回归
之所以在这里又引出logistic回归,一方面是为了后面比较两者的应用环境,更重要的则是通过损失函数对比,感性认识支持向量中目标函数的意义,方便更好的调试SVM模型中的各项参数。
首先我们回顾一下logistic回归中损失函数的定义:
J(θ)=1m∑i=1m[−yiloghθ(x(i))−(1−yi)log(1−hθ(x(i)))]+λ2m∑j=1Nθ2j
其中,原始的error项
−yiloghθ(x(i))−(1−yi)log(1−hθ(x(i))) 如下图所示,对于正样本而言,
θTx 越大,预测函数
hθ(x) 越接近1, 即与正样本的差越小;同理,我们也可以这么理解负样本预测值的代价。
通过上面的分析,我们可以重新定义原始的损失函数为:
Eϵ(f(x)−y)={0,|f(x)−y|−ϵ,|f(x)−y|<ϵotherwise
因此,带正则化的损失函数可以定义为:
J(θ)=C∑n=1mEϵ(f(x)−y)+12||w||2
对比于初始的损失函数,其中
Eϵ(f(x)−y) 是模型训练误差,即错分样本的代价;
||w||2 是正则化的代价。然后两项去掉了分母
m ,训练集的大小,是两项共有常数,去掉不影响最终的优化效果;然后两项同时除以
λ ,即
C=1λ ,对于选定好的参数
λ ,也不会影响最终的优化效果。
通过对逻辑回归目标函数的变形,我们可以看到,代价函数可以分为错分样本代价和模型复杂度代价两部分。前面介绍的别的机器算法也与此类似,接下来我们再来看支持向量机软间隔最大化的代价函数。
支持向量机
在软间隔最大化中,我们引入松弛变量 ξi≥0 ,允许样本错分。具体来说,现在的约束条件就变为了:
yi(w⋅xi+b)≥1−ξi
对于硬间隔SVM中的所有样本点,他们到分割平面的函数间隔都大于等于1。如今通过引入松弛变量,却允许他们函数间隔小于1了,即样本可以错分了。现在我们假设松弛变量
ξi 很大,则任意超平面都能满足条件了,这样显然是不合理的。因此原来的目标函数由
12||w||2 变成:
12||w||2+C∑i=1Nξi
其中
C>0 称为惩罚函数,是对错分样本的惩罚。
C 很大时对错分样本的惩罚增大,
C 很小时对错分样本的惩罚减小。(这样我们也可以将原始硬间隔中的目标函数看做是软间隔目标函数中
C 无穷大的情况,即硬间隔的错分代价无穷大,不允许错分)。这样,我们的学习问题就可以改写为:
minw,b,ξs.t12||w||2+C∑i=1Nξiyi(w⋅xi+b)≥1−ξi,i=1,2,…,Nξi≥0,i=1,2,…,N
同样,原始问题的拉格朗日函数为:
L(w,b,ξ,α,μ)=12||w||2+C∑i=1Nξi−∑i=1Nαi[yi(wT⋅xi+b)−1+ξi]−∑i=1Nμiξi
原始问题是拉个朗日的极大极小问题,对偶问题是极小极大问题,我们可以先求
L(w,b,ξ,α,μ) 的极小值:
∂∂wL(w,b,ξ,α,μ)=w−∑i=1Nαiyixi=0⟹w=∑i=1Nαiyixi∂∂bL(w,b,ξ,α,μ)=−∑i=1Nαiyi=0⟹∑i=1Nαiyi=0∂∂ξiL(w,b,ξ,α,μ)=C−αi−ξi=0
将求导之后的极致条件带回原始的拉格朗日函数可以得到和硬间隔SVM一样的目标函数:
minw,b,ξL(w,b,ξ,α,μ)=∑i=1Nai−12∑i=1N∑j=1Nαiαjyiyj(xTi⋅xj)
但是整个函数的约束条件却改变了,因此,对偶问题的优化问题为:
maxas.t.∑i=1Nai−12∑i=1N∑j=1Nαiαjyiyj(xTi⋅xj)∑i=1Nαiyi=00≤αi≤C,i=1,2,…,N
和前面硬间隔SVM的结果相比,就是限制条件中多了一个上限,即
αi≤C 。软间隔SVM也可以用于非线性支持向量机,只需要将内积改为的内核即可。软间隔支持向量的代价函数既考虑了样本分类误差,又考虑了模型的复杂度,通过调节其中的参数C可以使函数既能够兼顾训练集上的分类精度,又控制模型复杂度,使模型泛化能力增加。因此,我们实际中所使用的SVM分类器基本上属于这一类。
通过对比逻辑回归和支持向量机的代价函数的形式,我们就能很好理解支持向量机代价函数的组成和参数 C(C=1λ) 的含义,与正则化参数λ 一样,都是用于调节分类误差和模型复杂度代价的权重,使模型在保证分类误差最小的情况得到最大间隔超平面。