胡軍艷 王 鈺 李濟(jì)洪
(1.山西大學(xué) 數(shù)學(xué)科學(xué)學(xué)院,山西 太原030006;2.山西大學(xué) 計算中心,山西 太原030006)
在現(xiàn)代生物、醫(yī)學(xué)統(tǒng)計研究中,經(jīng)常遇到樣本量較小的情況.比如在UCI的數(shù)據(jù)集中,糖尿病數(shù)據(jù)的樣本量為768.南非心臟病的樣本量為462等等.這些研究可以歸結(jié)為統(tǒng)計機(jī)器學(xué)習(xí)的分類問題,我們需要通過這些已知的觀測訓(xùn)練分類器,從而去判斷新的觀測的類別.關(guān)于這種研究,我們需要做三步:第一,變量選擇.第二,模型選擇.第三,模型(算法)評估.
本文主要做模型(算法)評估,即對分類算法的性能進(jìn)行比較,而算法性能的一個重要度量是它的泛化誤差,但是,由于數(shù)據(jù)的分布未知,泛化誤差不能被直接計算.在這樣的小樣本下常常通過一些數(shù)據(jù)重用的方法來估計泛化誤差,而交叉驗證的方法是數(shù)據(jù)重用方法中常用的一種.關(guān)于交叉驗證折數(shù)的選擇是一個公開的問題,相關(guān)的文獻(xiàn)也只是經(jīng)驗的建議用5折或10折,但缺乏理論依據(jù).
近年來,有許多關(guān)于泛化誤差的交叉驗證估計的研究.其中包括Claude NadeauH,Yoshua Bengio[1]等給出了基于留P交叉驗證的泛化誤差的一些推斷;Yoshua Bengio等[2]對標(biāo)準(zhǔn)交叉驗證的方差的估計進(jìn)行了研究;Markatou和Biswas[3]使用標(biāo)準(zhǔn)K折交叉驗證(通常使用5折或10折)來估計泛化誤差.Braga-Neto和 Dougherty[4],Molinaro,Richard和Pfeiffer[5],Sudhir和 Richard[6]考慮了微陣列數(shù)據(jù)中泛化誤差的交叉驗證估計.在自然語言處理中,李濟(jì)洪等[7]提出了組塊3×2交叉驗證.本文主要通過實驗證明在泛化誤差估計中組塊3×2交叉驗證比5折、10折交叉驗證方法在均方誤差意義下更好.
泛化誤差的定義:這里我們考慮兩類分類問題,假設(shè)有輸入變量X,響應(yīng)變量Y.泛化誤差為EPE=指的是在獨立的測試樣本上的期望預(yù)測誤差.其中)為損失函數(shù),是由訓(xùn)練樣本估計的預(yù)測模型.
K折交叉驗證常用于泛化誤差的估計,記L(Y,f(X))為損失函數(shù),則K折交叉驗證估計定義如下:首先將數(shù)據(jù)集隨機(jī)分成容量相同的K份.依次拿出第k(k=1,2,…,K)份數(shù)據(jù)作為測試集,將剩余的K-1份作為訓(xùn)練集,最后合并所有K份上的測試結(jié)果,便得到了泛化誤差的K折交叉驗證估計,用公式表示為:其中N表示樣本量,Nk表示第k份的樣本量個數(shù),yi表示第i個樣本的觀測值,k(i)表示第i個樣本所在的份數(shù)表示去掉第k(i)份,在其余K-1份上擬合得到的模型,CVk表示用除第k份之外的樣本做擬合之后,再在第k份上做預(yù)測得到的泛化誤差估計值.5折交叉驗證即取K為5,10折交叉驗證即取K為10.
與標(biāo)準(zhǔn)的K折交叉驗證略有不同,對于組塊3×2交叉驗證,首先將數(shù)據(jù)集平均分成4份,任取其中2份作為訓(xùn)練集來,其余2份作為測試集,這樣便可做3組2折交叉驗證,得到表1.其中表示第i組實驗中的第k份數(shù)據(jù)集,用表示第i組中第k份交叉驗證得到的泛化誤差估計值.CV(i)表示第i組中2份交叉驗證的泛化誤差估計值的均值.即,則3×2交叉驗證的CV值的總平均為:以此作為泛化誤差的估計.
表1 3×2交叉驗證的實驗設(shè)置
為了進(jìn)行比較,我們選擇的評測指標(biāo)有MSE,bias,Var.它們的計算公式如下:其中R表示重復(fù)實驗的次數(shù),我們?nèi)=100.CVi表示第i次各交叉驗證的估計值,EPE表示預(yù)測誤差的真值表示R次交叉驗證估計值的平均值.
分類器我們選擇樸素貝葉斯(NB),5近鄰(5-nn),CART;由于我們主要想比較小樣本下分類器性能,所以選擇訓(xùn)練集的個數(shù)分別為20,40,在剩下的樣本上測試.
2.2.1 糖尿病數(shù)據(jù)
糖尿病數(shù)據(jù)有8個指標(biāo),分別為preg(懷孕的次數(shù)),plas(在兩個小時的口服葡萄糖耐量測試中血糖的濃度),pres(舒張期血壓),skin(肱三頭肌的皮膚褶皺厚度),insu(2小時血清胰島素),mass(體質(zhì)指數(shù)),pedi(糖尿病家族病例),Age(年齡),樣本量為768,來自UCI.此數(shù)據(jù)是一個二分類的數(shù)據(jù),訓(xùn)練集容量分別為20,40.測試樣本量分別為748,728,見表2.
表2 糖尿病數(shù)據(jù)的結(jié)果
2.2.2 南非心臟病數(shù)據(jù)
南非心臟病數(shù)據(jù)共有9個指標(biāo),分別為sbp(收縮血壓),tobacco(煙草累積),ldl(低密度脂蛋白),Adiposity(多脂肪的),famhist(心臟病家族史),typea(A 類型行為舉止),obesity(肥胖),alcohol(酒精積累),Age(年齡).樣本量為462.此數(shù)據(jù)也是一個二分類的數(shù)據(jù).訓(xùn)練集容量分別為20,40.測試樣本量分別為442,422,見表3.
表3 南非心臟病數(shù)據(jù)的結(jié)果
由上面的表格我們可以得出如下結(jié)論:
1)雖然組塊3×2交叉驗證的偏差并不是三種交叉驗證中最小的,但方差總是最小的.且組塊3×2交叉驗證的MSE總是三種交叉驗證中最小的.所以我們認(rèn)為組塊3×2交叉驗證在泛化誤差的估計中比5折,10折交叉驗證更好,而且結(jié)果更穩(wěn)定,不受分類器,樣本量等的影響.該結(jié)論是這些模擬實驗得到的,其理論原因還有待進(jìn)一步研究.這可能是由于組塊3×2交叉驗證將數(shù)據(jù)切分成均衡的4份,實驗經(jīng)過設(shè)計減少了估計的方差所致.
2)在樣本量為20時組塊3×2交叉驗證的偏差幾乎也是最小的,而且在CART和5-nn中組塊3×2交叉驗證的偏差不到5折,10折交叉驗證的一半.因此組塊3×2交叉驗證在處理樣本量較小的數(shù)據(jù)時可能更有效.
3)組塊3×2交叉驗證需要做6次交叉驗證,相比10折交叉驗證在計算開銷方面也有優(yōu)勢.
本文基于生物信息數(shù)據(jù)比較了5折,10折交叉驗證和組塊3×2交叉驗證來估計泛化誤差時的均方誤差(MSE),通過實驗得出組塊3×2交叉驗證對泛化誤差的估計的MSE最小,且在三種分類器(樸素貝葉斯(NB),5近鄰(5-nn),CART)上都表現(xiàn)出較好的性能.而且在樣本個數(shù)小的時候組塊3×2交叉驗證的方差和偏差也最小,說明組塊3×2交叉驗證在小樣本數(shù)據(jù)上更有優(yōu)勢.該結(jié)論是經(jīng)過若干模擬實驗得到的,其深層原因還有待進(jìn)一步研究.
[1]Claude NadeauH,Yoshua Bengio.Inference for the generalization error[J].Machine Learning,2003,52:239-281
[2]Yoshua Bengio,Yves Grandvalet.No unbiased estimator of the variance ofK-fold cross-validation[J].Journal of Machine Learning Research,2004,5:1 089-1 105
[3]Markatou M,Biswas S.Analysis of variance ofcross-validation estimators of the generalization error[J].Journal of Machine Learning Research,2005,6:1 127-1 168
[4]Ulisses M,Edward R.Is cross-validation valid for small-sample microarray classification[J].Bioinformatics,2004,20(3):374-380
[5]Annette M,Richard S,Ruth M.Prediction error estimation:a comparison of resampling methods[J].Bioinformatics,2005,21(15):3 301-3 307
[6]Sudhir V,Richard S.Bias in error estimation when using cross-validation for model selection[J]BMC bioinformatics,2006,7:91
[7]李濟(jì)洪,王瑞波,王蔚林,等.漢語框架語義角色的自動標(biāo)注研究[J].軟件學(xué)報,2010(4):597-611