摘自:
http://www.blogjava.net/zhenandaci/archive/2009/03/15/259786.html
现在我们已经把一个本来线性不可分的文本分类问题,通过映射到高维空间而变成了线性可分的。就像下图这样:
圆形和方形的点各有成千上万个(毕竟,这就是我们训练集中文档的数量嘛,当然很大了)。现在想象我们有另一个训练集,只比原先这个训练集多了一篇文章,映射到高维空间以后(当然,也使用了相同的核函数),也就多了一个样本点,但是这个样本的位置是这样的:
就是图中黄色那个点,它是方形的,因而它是负类的一个样本,这单独的一个样本,使得原本线性可分的问题变成了线性不可分的。这样类似的问题(仅有少数点线性不可分)叫做“近似线性可分”的问题。
以我们人类的常识来判断,说有一万个点都符合某种规律(因而线性可分),有一个点不符合,那这一个点是否就代表了分类规则中我们没有考虑到的方面呢(因而规则应该为它而做出修改)?
其实我们会觉得,更有可能的是,这个样本点压根就是错误,是噪声,是提供训练集的同学人工分类时一打瞌睡错放进去的。所以我们会简单的忽略这个样本点,仍然使用原来的分类器,其效果丝毫不受影响。
但这种对噪声的容错性是人的思维带来的,我们的程序可没有。由于我们原本的优化问题的表达式中,确实要考虑所有的样本点(不能忽略某一个,因为程序它怎么知道该忽略哪一个呢?),在此基础上寻找正负类之间的最大几何间隔,而几何间隔本身代表的是距离,是非负的,像上面这种有噪声的情况会使得整个问题无解。这种解法其实也叫做“硬间隔”分类法,因为他硬性的要求所有样本点都满足和分类平面间的距离必须大于某个值。
因此由上面的例子中也可以看出,硬间隔的分类法其结果容易受少数点的控制,这是很危险的(尽管有句话说真理总是掌握在少数人手中,但那不过是那一小撮人聊以自慰的词句罢了,咱还是得民主)。
但解决方法也很明显,就是仿照人的思路,允许一些点到分类平面的距离不满足原先的要求。由于不同的训练集各点的间距尺度不太一样,因此用间隔(而不是几何间隔)来衡量有利于我们表达形式的简洁。我们原先对样本点的要求是:
意思是说离分类面最近的样本点函数间隔也要比1大。如果要引入容错性,就给1这个硬性的阈值加一个松弛变量,即允许
因为松弛变量是非负的,因此最终的结果是要求间隔可以比1小。但是当某些点出现这种间隔比1小的情况时(这些点也叫离群点),意味着我们放弃了对这些点的精确分类,而这对我们的分类器来说是种损失。但是放弃这些点也带来了好处,那就是使分类面不必向这些点的方向移动,因而可以得到更大的几何间隔(在低维空间看来,分类边界也更平滑)。显然我们必须权衡这种损失和好处。好处很明显,我们得到的分类间隔越大,好处就越多。回顾我们原始的硬间隔分类对应的优化问题:
||w||2就是我们的目标函数(当然系数可有可无),希望它越小越好,因而损失就必然是一个能使之变大的量(能使它变小就不叫损失了,我们本来就希望目标函数值越小越好)。那如何来衡量损失,有两种常用的方式,有人喜欢用
而有人喜欢用
其中l都是样本的数目。两种方法没有大的区别。如果选择了第一种,得到的方法的就叫做二阶软间隔分类器,第二种就叫做一阶软间隔分类器。把损失加入到目标函数里的时候,就需要一个惩罚因子(cost,也就是libSVM的诸多参数中的C),原来的优化问题就变成了下面这样:
这个式子有这么几点要注意:
一是并非所有的样本点都有一个松弛变量与其对应。实际上只有“离群点”才有,或者也可以这么看,所有没离群的点松弛变量都等于0(对负类来说,离群点就是在前面图中,跑到H2右侧的那些负样本点,对正类来说,就是跑到H1左侧的那些正样本点)。
二是松弛变量的值实际上标示出了对应的点到底离群有多远,值越大,点就越远。
三是惩罚因子C决定了你有多重视离群点带来的损失,显然当所有离群点的松弛变量的和一定时,你定的C越大,对目标函数的损失也越大,此时就暗示着你非常不愿意放弃这些离群点,最极端的情况是你把C定为无限大,这样只要稍有一个点离群,目标函数的值马上变成无限大,马上让问题变成无解,这就退化成了硬间隔问题。
四是惩罚因子C不是一个变量,整个优化问题在解的时候,C是一个你必须事先指定的值,指定这个值以后,解一下,得到一个分类器,然后用测试数据看看结果怎么样,如果不够好,换一个C的值,再解一次优化问题,得到另一个分类器,再看看效果,如此就是一个参数寻优的过程,但这和优化问题本身决不是一回事,优化问题在解的过程中,C一直是定值,要记住。
五是尽管加了松弛变量这么一说,但这个优化问题仍然是一个优化问题(汗,这不废话么),解它的过程比起原始的硬间隔问题来说,没有任何更加特殊的地方。
从大的方面说优化问题解的过程,就是先试着确定一下w,也就是确定了前面图中的三条直线,这时看看间隔有多大,又有多少点离群,把目标函数的值算一算,再换一组三条直线(你可以看到,分类的直线位置如果移动了,有些原来离群的点会变得不再离群,而有的本来不离群的点会变成离群点),再把目标函数的值算一算,如此往复(迭代),直到最终找到目标函数最小时的w。
啰嗦了这么多,读者一定可以马上自己总结出来,松弛变量也就是个解决线性不可分问题的方法罢了,但是回想一下,核函数的引入不也是为了解决线性不可分的问题么?为什么要为了一个问题使用两种方法呢?
其实两者还有微妙的不同。一般的过程应该是这样,还以文本分类为例。在原始的低维空间中,样本相当的不可分,无论你怎么找分类平面,总会有大量的离群点,此时用核函数向高维空间映射一下,虽然结果仍然是不可分的,但比原始空间里的要更加接近线性可分的状态(就是达到了近似线性可分的状态),此时再用松弛变量处理那些少数“冥顽不化”的离群点,就简单有效得多啦。
本节中的(式1)也确实是支持向量机最最常用的形式。至此一个比较完整的支持向量机框架就有了,简单说来,支持向量机就是使用了核函数的软间隔线性分类法。
下一节会说说松弛变量剩下的一点点东西,顺便搞个读者调查,看看大家还想侃侃SVM的哪些方面。
分享到:
相关推荐
### SVM入门:SVM的八股简介 #### 1.1 SVM的基本概念 支持向量机(Support Vector Machine,简称SVM)是一种监督学习模型,主要用于分类和回归分析。SVM最早是由Cortes和Vapnik在1995年提出的。其核心思想是在特征...
此时,可以通过引入松弛变量和惩罚因子来处理这种情况,允许某些样本点位于决策边界甚至错误分类,从而实现对复杂数据集的有效分类。 3. **核技巧**:为了处理非线性可分的问题,SVM采用了核技巧,即将原始数据...
- **软间隔**:在现实世界中,数据往往不是完全线性可分的,SVM引入了**松弛变量**和**惩罚项**,允许一定数量的样本可以穿过边界,但会受到相应惩罚。 - **核函数**:对于非线性可分的数据,SVM通过**核技巧**(如...
为了处理这种情况,SVM引入了松弛变量,允许一定程度的误分类。 #### 五、核函数的作用 在处理非线性可分问题时,SVM通过使用核函数将低维空间中的非线性问题转换为高维空间中的线性问题。常见的核函数包括多项式...
### SVM入门:支持向量机详解 #### 一、SVM简介 支持向量机(Support Vector Machine,简称SVM)是由Cortes和Vapnik于1995年首次提出的机器学习算法。它是一种监督学习方法,在解决小样本、非线性和高维模式识别等...
- 通过允许一些数据点轻微违反分类规则,松弛变量能够使SVM模型更具鲁棒性,提高其泛化能力。 #### 三、多类分类 - SVM最初设计用于二分类问题,但在实际应用中,常常需要解决多类分类问题。 - **解决多类分类的...
### SVM入门(八):松弛变量详解 #### SVM与松弛变量背景 支持向量机(Support Vector Machine,简称SVM)是一种广泛应用于机器学习领域的监督学习算法,主要用于分类和回归任务。SVM的核心思想是在特征空间中...
### SVM入门:机器学习经典解析 #### 支持向量机(SVM):理论与实践的桥梁 **支持向量机(Support Vector Machine,简称SVM)**是由Cortes和Vapnik在1995年首次提出的,自那时起便在机器学习领域占据了举足轻重的...
为此,SVM引入了松弛变量,允许一定数量的样本落在间隔内,以提高模型的泛化能力。 6. 多分类问题: SVM最初只处理二分类问题,但通过一对多、一对一或合页损失等方法可以扩展到多分类问题。 7. C参数与正则化: ...
为了处理非线性可分或噪声较大的情况,SVM引入了松弛变量和惩罚系数C,允许一部分样本落在间隔内,形成了所谓的软间隔。同时,通过核函数可以将原始数据非线性地映射到高维空间,使得在高维空间中实现线性可分,...
在实际应用中,SVM还引入了松弛变量(slack variables)来处理那些难以正确分类的数据点,允许一定数量的数据点越过决策边界,以增强模型的鲁棒性。松弛变量的引入使得SVM成为一种软间隔分类器,能够容忍一定程度的...
### SVM入门(五)线性分类器的求解——问题的描述Part2 #### 重要概念与背景 本文档旨在帮助读者理解支持向量机(SVM)中的线性分类器求解过程及其数学表述,特别关注于如何将线性分类器问题转化为优化问题,并讨论...
### SVM入门(九):松弛变量与惩罚因子C的应用及数据集偏斜问题处理 #### 一、惩罚因子C的概念及其重要性 在支持向量机(SVM)的学习过程中,松弛变量(slack variable)和惩罚因子C是两个非常重要的概念。在上一篇...
5. **软间隔与正则化**:解释为什么在实际应用中引入松弛变量和惩罚项,以及C参数的意义。 6. **多分类问题**:介绍一对一和一对多两种策略解决多分类问题的方法。 7. **SVM在实际问题中的应用**:可能包含SVM在...
- **软间隔**:在实际数据中,完全线性可分的情况很少见,SVM引入了松弛变量和惩罚项,允许一部分样本点“越界”,从而实现软间隔最大化。 - **核函数**:为了解决非线性问题,SVM使用核函数将原始特征空间映射到...