接下來要說的東西其實(shí)不是松弛變量本身,但由于是為了使用松弛變量才引入的,因此放在這里也算合適,那就是懲罰因子C。回頭看一眼引入了松弛變量以后的優(yōu)化問題:

注意其中C的位置,也可以回想一下C所起的作用(表征你有多么重視離群點(diǎn),C越大越重視,越不想丟掉它們)。這個(gè)式子是以前做SVM的人寫的,大家也就這么用,但沒有任何規(guī)定說必須對(duì)所有的松弛變量都使用同一個(gè)懲罰因子,我們完全可以給每一個(gè)離群點(diǎn)都使用不同的C,這時(shí)就意味著你對(duì)每個(gè)樣本的重視程度都不一樣,有些樣本丟了也就丟了,錯(cuò)了也就錯(cuò)了,這些就給一個(gè)比較小的C;而有些樣本很重要,決不能分類錯(cuò)誤(比如中央下達(dá)的文件啥的,笑),就給一個(gè)很大的C。
當(dāng)然實(shí)際使用的時(shí)候并沒有這么極端,但一種很常用的變形可以用來解決分類問題中樣本的“偏斜”問題。
先來說說樣本的偏斜問題,也叫數(shù)據(jù)集偏斜(unbalanced),它指的是參與分類的兩個(gè)類別(也可以指多個(gè)類別)樣本數(shù)量差異很大。比如說正類有10,000個(gè)樣本,而負(fù)類只給了100個(gè),這會(huì)引起的問題顯而易見,可以看看下面的圖:
方形的點(diǎn)是負(fù)類。H,H1,H2是根據(jù)給的樣本算出來的分類面,由于負(fù)類的樣本很少很少,所以有一些本來是負(fù)類的樣本點(diǎn)沒有提供,比如圖中兩個(gè)灰色的方形點(diǎn),如果這兩個(gè)點(diǎn)有提供的話,那算出來的分類面應(yīng)該是H’,H2’和H1,他們顯然和之前的結(jié)果有出入,實(shí)際上負(fù)類給的樣本點(diǎn)越多,就越容易出現(xiàn)在灰色點(diǎn)附近的點(diǎn),我們算出的結(jié)果也就越接近于真實(shí)的分類面。但現(xiàn)在由于偏斜的現(xiàn)象存在,使得數(shù)量多的正類可以把分類面向負(fù)類的方向“推”,因而影響了結(jié)果的準(zhǔn)確性。
對(duì)付數(shù)據(jù)集偏斜問題的方法之一就是在懲罰因子上作文章,想必大家也猜到了,那就是給樣本數(shù)量少的負(fù)類更大的懲罰因子,表示我們重視這部分樣本(本來數(shù)量就少,再拋棄一些,那人家負(fù)類還活不活了),因此我們的目標(biāo)函數(shù)中因松弛變量而損失的部分就變成了:
![clip_image002[5] clip_image002[5]](http://www.tkk7.com/images/blogjava_net/zhenandaci/WindowsLiveWriter/SVM_11A27/clip_image002%5B5%5D_thumb.gif)
其中i=1…p都是正樣本,j=p+1…p+q都是負(fù)樣本。libSVM這個(gè)算法包在解決偏斜問題的時(shí)候用的就是這種方法。
那C+和C-怎么確定呢?它們的大小是試出來的(參數(shù)調(diào)優(yōu)),但是他們的比例可以有些方法來確定。咱們先假定說C+是5這么大,那確定C-的一個(gè)很直觀的方法就是使用兩類樣本數(shù)的比來算,對(duì)應(yīng)到剛才舉的例子,C-就可以定為500這么大(因?yàn)?0,000:100=100:1嘛)。
但是這樣并不夠好,回看剛才的圖,你會(huì)發(fā)現(xiàn)正類之所以可以“欺負(fù)”負(fù)類,其實(shí)并不是因?yàn)樨?fù)類樣本少,真實(shí)的原因是負(fù)類的樣本分布的不夠廣(沒擴(kuò)充到負(fù)類本應(yīng)該有的區(qū)域)。說一個(gè)具體點(diǎn)的例子,現(xiàn)在想給政治類和體育類的文章做分類,政治類文章很多,而體育類只提供了幾篇關(guān)于籃球的文章,這時(shí)分類會(huì)明顯偏向于政治類,如果要給體育類文章增加樣本,但增加的樣本仍然全都是關(guān)于籃球的(也就是說,沒有足球,排球,賽車,游泳等等),那結(jié)果會(huì)怎樣呢?雖然體育類文章在數(shù)量上可以達(dá)到與政治類一樣多,但過于集中了,結(jié)果仍會(huì)偏向于政治類!所以給C+和C-確定比例更好的方法應(yīng)該是衡量他們分布的程度。比如可以算算他們?cè)诳臻g中占據(jù)了多大的體積,例如給負(fù)類找一個(gè)超球——就是高維空間里的球啦——它可以包含所有負(fù)類的樣本,再給正類找一個(gè),比比兩個(gè)球的半徑,就可以大致確定分布的情況。顯然半徑大的分布就比較廣,就給小一點(diǎn)的懲罰因子。
但是這樣還不夠好,因?yàn)橛械念悇e樣本確實(shí)很集中,這不是提供的樣本數(shù)量多少的問題,這是類別本身的特征(就是某些話題涉及的面很窄,例如計(jì)算機(jī)類的文章就明顯不如文化類的文章那么“天馬行空”),這個(gè)時(shí)候即便超球的半徑差異很大,也不應(yīng)該賦予兩個(gè)類別不同的懲罰因子。
看到這里讀者一定瘋了,因?yàn)檎f來說去,這豈不成了一個(gè)解決不了的問題?然而事實(shí)如此,完全的方法是沒有的,根據(jù)需要,選擇實(shí)現(xiàn)簡(jiǎn)單又合用的就好(例如libSVM就直接使用樣本數(shù)量的比)。