回想一下 C 所起的作用(表征你有多么重视离群点, C 越大越重视,越不想丢掉它们) 。这个式
子是以前做 SVM 的人写的,大家也就这么用,但没有任何规定说必须对所有的松弛变量都使用
同一个惩罚因子, 我们完全可以给每一个离群点都使用不同的 C , 这时就意味着你对每个样本的
重视程度都不一样,有些样本丢了也就丢了,错了也就错了,这些就给一个比较小的 C;而有些
样本很重要,决不能分类错误(比如中央下达的文件啥的,笑) ,就给一个很大的 C 。
当然实际使用的时候并没有这么极端, 但一种很常用的变形可以用来解决分类问题中样本的
偏斜 ”问题。
先来说说样本的偏斜问题,也叫数据集偏斜( unbalanced ) ,它指的是参与分类的两个类别
(也可以指多个类别)样本数量差异很大。比如说正类有 10 , 000 个样本,而负类只给了 100
个,这会引起的问题显而易见,可以看看下面的图:
SVM 入门(九)松弛变量(续)
方形的点是负类。 H , H1 , H2 是根据给的样本算出来的分类面, 由于负类的样本很少很少,
所以有一些本来是负类的样本点没有提供, 比如图中两个灰色的方形点, 如果这两个点有提供的
话,那算出来的分类面应该是 H’ , H2’ 和 H1 ,他们显然和之前的结果有出入,实际上负类给的
样本点越多, 就越容易出现在灰色点附近的点, 我们算出的结果也就越接近于真实的分类面。 但
现在由于偏斜的现象存在,使得数量多的正类可以把分类面向负类的方向 “推 ”,因而影响了结果
的准确性。
对付数据集偏斜问题的方法之一就是在惩罚因子上作文章, 想必大家也猜到了, 那就是给样本数
量少的负类更大的惩罚因子,表示我们重视这部分样本(本来数量就少, 再抛弃一些, 那人家负
类还活不活了) ,因此我们的目标函数中因松弛变量而损失的部分就变成了:
SVM 入门(九)松弛变量(续)
其中i=1 ---p都是正样本,j=p+1…p+q都是负样本。libSVM这个算法包在解决偏斜问题的 时候用的就是这种方法。
那 C+ 和 C- 怎么确定呢?它们的大小是试出来的(参数调优) ,但是他们的比例可以有些方
法来确定。 咱们先假定说 C+ 是 5 这么大, 那确定 C- 的一个很直观的方法就是使用两类样本数的
比来算,对应到刚才举的例子, C-就可以定为500这么大(因为10, 000: 100=100 : 1嘛)
但是这样并不够好,回看刚才的图,你会发现正类之所以可以 “欺负 ”负类,其实并不是因为
负类样本少,真实的原因是负类的样本分布的不够广(没扩充到负类本应该有的区域) 。说一
svm理论与实验之8惩罚因子C 来自淘豆网www.taodocs.com转载请标明出处.