对支持向量分类的实践指导

对支持向量分类的实践指导   

1. 介绍   

SVM是数据分类的一个很有用的工具。即使人们认为它比神经网络容易使用,但对不熟悉SVM的人开始的时候也会得到不满意的结果。在这里我们手把手的指导您得到可靠的结果。  

注意这个指导并不是给SVM研究者提供的,我们也不能保证最好的正确率。我们同样也不想解决挑战性的或者复杂的问题。我们的目的是给SVM新手们一个指导来快捷方便的获得可接受的结果。  

虽 然使用者们不需要理解SVM的基础理论,但是,为了解释我们的流程,我们要简要的介绍一下SVM基础。一个分类任务通常包括训练和测试包含一些数据事例的 数据。训练集中的每一个实例包括一个目标值(类标识)和若干属性。SVM的目的就是建立一个模型来预测测试集中数据实例的目标值,而测试集中只提供了属 性。

已知一个训练集由实例和标识对(clip_image002 )组成,  

clip_image004 ,SVM需要解决下面这个优化问题:  

clip_image006   

Subject to clip_image008   

这里训练向量clip_image002[4] 被函数clip_image004[4] 映射到一个更高维的空间。然后在这个更高维空间中SVM找到一个具有最大间隔的线形分类超平面。C>0时出现错误的惩罚参数。另外,clip_image006[4] 被叫做核函数。虽然研究者提供了新的核,初学者应该能在SVM书籍上找到下面的四个基本的核函数:  

Linear: clip_image010   

Polynomial: clip_image012   

RBF: clip_image014   

Sigmoid: clip_image016   

这里,clip_image018 ,r,和d是核参数。  

1.1 现实世界中的例子   

表1呈现了某个现实的例子。这些数据集都来自于我们那些一开始不能获得可靠正确率的使用者。使用这个指导中说明的流程,我们帮助他们得到更好的效果。具体细节可见附录A。  

这些数据集位于http://www.csie.ntu.edu.tw/~cjlin/papers/guide/data/   

1.2 建议的流程  

很多初学者使用下面的流程:  

l 转变数据到SVM软件允许的格式  

l 随机的试验一些核函数和参数  

l 测试  

我们建议初学者试试首先下面的流程:  

l 转变数据到SVM软件允许的格式  

l 简单的对数据进行规格化  

l 考虑RBF核  

l 使用交叉验证来寻找最好的参数C和gamma  

l 使用最好的C和gamma来训练整个训练集  

下面的章节里我们具体的讨论这个流程。  

2 数据处理   

2.1 分类特征  

SVM 需要每个数据实例都表现为一个实数向量。因此,如果有分类特征,我们首先必须把他们转化为数字。我们建议用m个数来表示一个m类的属性。M个数中只有一个 数是1,其他的都是0。例如,一个分三类的属性,比如{红,绿,蓝},可以被表示为(0,0,1),(0,1,0)和(1,0,0)。我们的经验表明如果 一个属性中值的数目不太多的话,这种编码很可能比使用一个单独的数去代表一个绝对属性要稳定。

2.2 规格化  

在应用SVM之前的规格化非常重要。Sarle解释了为什么在使用神经网络的时候要规格化数据,大部分他的考虑同样应用于SVM  

主 要优点是避免在大数值范围的属性支配那些在相对较小数值范围的属性。另一个优点是避免计算中在数字上的困难。因为核函数的值通常依赖于特征向量的内积,比 如线形核和多项式核,大属性值可能会导致数值上的问题。我们建议线性的规格化每个属性到[-1,+1]或者[0,1]的范围。

当然我们必须用同样的方法在测试前去规格化测试数据。例如,假如我们规格化了训练集的第一个属性从[-10,+10]到[-1,+1]。如果测试集的第一个属性位于[-11,+8],我们必须规格化测试数据到[-1.1,+0.8]。  

3 模型选择   

虽然第一节里只提到了4个核,我们还是必须决定首先试验哪个。然后惩罚参数C和核参数才被选择。  

3.1 RBF核  

我们建议通常下RBF核都是合理的第一选择。RBF核能够非线性的将样本映射到更高维的空间,所以,不像线性核,它能够处理类标识和属性的关系是非线性的情况。另外,线性核是RBF核的一种特殊情况,正如Keerthi和Lin指出的,线性核的惩罚参数是clip_image020 时和RBF核取某个参数(C,clip_image018[1] )是一样的。再者,sigmoid核在某些参数情况下和RBF核类似。  

第二个原因是超参数的数目,这个数目会影响模型选择的复杂度。多项式核比RBF核有更多的超参数。  

最后,RBF核有更小的数值困难。一个要点是当degree很大时,clip_image023 ,相比下多项式核的值可能会无穷或者是0。再者,我们必须注意到在某些参数下sigmoid核是不可用的。  

然而,有一些情况RBF核是不合适的。特殊情况下,当特征数目很大时,可能只用到线性核。  

3.2 交叉验证 和 网格搜索  

当使用RBF核时有两个参数C和clip_image018[2] 。之前我们并不知道对一个问题哪个C和clip_image018[3] 是最好的;因此必须做某种模型选择(参数选择)。这个目标就是去识别出好的(C,clip_image018[4] ), 这样分类器才能准确的预测未知数据。注意,获得高的训练准确度可能是没有用的。因此,一个普遍的办法是将训练数据分成两部分,其中一部分在训练中被看成是 未知的。然后对这个数据集的预测准确度能更加准确的反映分类器对未知数据的表现。这个方法的一个改进版本就是交叉验证。

在v分的交叉验证里,我们首先把训练集分成等大小的v个子集。每一个子集依次用其他v-1个子集训练出的分类器进行测试。因此,整个训练集中的每个实例都被预测了一次,所以交叉预测的正确率与正确分类的数据成正比。  

这个交叉验证的方法能够避免“过耦合”的问题。我们用图1的两类问题(三角还是圆)来解释这个说法。  

填 充的圆形和三角是训练数据,而空的圆形和三角是测试数据。图1(a)和图1(b)的分类器的准确度并不好因为它过度耦合了训练数据。如果我们把图1(a) 和图1(b)中的训练数据和测试数据看作交叉验证中的训练集和验证集,准确度就不好。另一方面,图1(c)和图1(d)中的分类器没有过度耦合训练数据, 也提供了更好的交叉验证和测试准确度。

我们推荐一个利用交叉验证的针对C和clip_image018[5] 的网格搜索。基本上若干对(C,clip_image018[6] )被尝试过后拥有最好的交叉验证准确度的一对被挑选出来。我们发现按照级数增长的顺序对C和clip_image018[7] 进行尝试是一种识别良好的参数的可行方法。  

网格搜索很直接但是看起来很傻。实际上有很多高级的方法能够减少计算消耗,比如接近交叉验证的比率。然而,还是有两个原因驱使我们选择简单的网格搜索方法。  

一个是从心理上说我们可能感觉使用那些不通过近似值或者启发式来做复杂的参数选择的方法不很稳妥。另一个原因是利用网格搜索来寻找合适参数的计算时间和用高级的方法差不多,因为只有两个参数。再者,网格搜索很容易并行操作因为每个(C,clip_image018[8] )都是独立的。很多高级方法是迭代过程,可能会很难并行。  

因 为做一个完全的网格搜索可能仍然是很消耗时间的,我们建议首先使用一个粗略的网格。当在网格上找到一个更好的区域后才进行更精细的网格搜索。为了证明这 个,我们对Statlog collection 的german 问题做一个实验。规格化数据集之后,我们首先利用粗略的网格找到最好的(C,clip_image018[9] )是(clip_image027 clip_image029 ),交叉验证比率是77.5%。下一步我们在(clip_image027[1] clip_image029[1] )上进行一个更精确的网格搜索,然后得到更高的交叉验证比率77.6%。在最好的(C,clip_image018[10] )找到之后,整个训练集再次被训练来产生最终的分类器。  

上面的方法对于有几千个或者更多数据点的问题比较好使。对于非常大的数据集,合适的方法是随机选择一个数据集的子集,进行网格测试,然后将更好的区域上的网格测试直接放在完整的数据集上做。  

4 讨论   

在某些情况下,提供的流程并不够好,所以其他技术,比如特征选择,就是必须的了。这些内容不在我们今天的考虑范围里。我们的经验表明这个流程对于没有太多的特征的数据效果还是很好的。如果有上千个属性,也许在使用SVM前就需要选择一个子集了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值