杜春澎
摘要:本文通過對機器學(xué)習(xí)中各類分類方法的學(xué)習(xí)之后,對輸血服務(wù)中心的數(shù)據(jù)集采用決策樹(分類樹)、Adaboost、Bagging、隨機森林、支持向量機、最近鄰方法和神經(jīng)網(wǎng)絡(luò)等七類方法對其進行分類,并采用五折交叉驗證法評價預(yù)測精度,結(jié)果發(fā)現(xiàn)支持向量機的是最好的分類方法。
關(guān)鍵詞:機器學(xué)習(xí);分類;交叉驗證
1.引言
分類就是經(jīng)典統(tǒng)計中所說的判別,當(dāng)因變量有多個水平且自變量也有分類變量的情況下,判別分析就不可用,此時就要采用機器學(xué)習(xí)或數(shù)據(jù)挖掘的方法,比如決策樹的分類樹、Adaboost、Bagging、隨機森林、支持向量機、最近鄰方法和神經(jīng)網(wǎng)絡(luò)等。
2.數(shù)據(jù)實驗
本文研究的數(shù)據(jù)來源于the UC Irvine機器學(xué)習(xí)數(shù)據(jù)庫,下載地址:http://archive.ics.uci.edu/ml/datasets/Blood+Transfusion+Service+Center。該數(shù)據(jù)集有748個觀測值,5個變量,分別是: Recency - months since last donation(定量);Frequency - total number of donation(定量);Monetary - total blood donated in c.c.(定量);Time - months since first donation(定量);Class -whether he/she donated blood in March 2007(定性)。最后一個分類變量的水平為:Class(whether he/she donated blood in March 2007 )有兩個水平:1=獻血,0=沒獻血。通過對數(shù)據(jù)的查看,可以用前四個變量作為自變量來預(yù)測作為因變量C (最后一個變量)的類別。
3.機器學(xué)習(xí)
機器學(xué)習(xí)能使計算機在沒有明確編程的情況下自主學(xué)習(xí)。不同于傳統(tǒng)方法的模型驅(qū)動,機器學(xué)習(xí)是數(shù)據(jù)驅(qū)動,它探索構(gòu)建了從數(shù)據(jù)中學(xué)習(xí)并對數(shù)據(jù)進行預(yù)測的算法。傳統(tǒng)的統(tǒng)計模型對數(shù)據(jù)的分布都有一定的要求或假定,但在現(xiàn)實中,真實的數(shù)據(jù)可能并不滿足那些假定或要求,若再用傳統(tǒng)方法,它們的某些優(yōu)良性質(zhì)將不能得到,甚至得出的結(jié)論都有可能錯誤。此時選擇機器學(xué)習(xí)的方法將更加合理,它不需要對數(shù)據(jù)分布做任何假定,且產(chǎn)生的結(jié)果也可用交叉驗證的方法進行評價。
3.1 決策樹分類(分類樹)
決策樹分類是通過一定的規(guī)則對數(shù)據(jù)樣本進行分類的過程,當(dāng)數(shù)據(jù)結(jié)構(gòu)為連續(xù)形變量時,稱為決策樹回歸。使用R軟件的程序包rpart.plot進行決策樹回歸,得出的分類結(jié)果如決策樹如表1。
其中,行是真實類,列是預(yù)測類。一共有138個觀測值被分錯,誤判率為0.184492。再利用函數(shù)Fold()所產(chǎn)生的5個隨機數(shù)據(jù)集做五折交叉驗證,給出測試集的分類平均誤判率為0.2271857。
3.2 Adaboost分類
Adaboost是Boosting的一種,是一種組合方法,這里用的程序包是adabag,分類結(jié)果如表2。
表里一共有101個觀測值被分錯,誤判率為0.135026。通過五折交叉驗證,給出測試集的分類平均誤判率為0.2592931。
3.3 Bagging分類
Bagging分類是一個最簡單的基于分類樹的組合方法,它利用了自助法放回抽樣。這里用的程序包是adabag中的函數(shù)bagging(),分類結(jié)果如表3。
表里一共有133個觀測值被分錯,誤判率為0.1778075。通過五折交叉驗證,給出測試集的分類平均誤判率為0.2271857。
3.4 隨機森林分類
隨機森林也是從原始數(shù)據(jù)抽取一定數(shù)量的自助法樣本,程序包randomForest包含了隨機森林函數(shù)randomForest(),分類結(jié)果如表4。
表里一共有63個觀測值被分錯,誤判率0.08823529。通過五折交叉驗證,給出測試集的分類平均誤判率為0.253915。
3.5 支持向量機分類
支持向量機分類是用程序包e1071中的svm()函數(shù)和程序包kernlab中的ksvm()函數(shù)來做SVM分類,兩個不同函數(shù)的分類結(jié)果分別如表5和表6。
表里一共有158個觀測值被分錯,誤判率為0.2112299 。
表里一共有138個觀測值被分錯,誤判率為0.184492。通過五折交叉驗證,給出測試集的分類平均誤判率為0.2339329和0.2151588。
3.6 最近鄰方法分類
最近鄰方法可能是所有算法中最簡單的方法,它基于訓(xùn)練集對測試集進行分類。用程序包kknn中的kknn()函數(shù)來對輸血中心的全部數(shù)據(jù)做分類,程序代碼中選項的默認(rèn)值為:k=7,distance=2(Minkowski距離),分類結(jié)果如表7。
表里一共有110個觀測值被分錯,誤判率為0.1470588。通過五折交叉驗證,給出測試集的分類平均誤判率為0.2526174。
3.6 神經(jīng)網(wǎng)絡(luò)分類
人工神經(jīng)網(wǎng)絡(luò)是由大量的節(jié)點構(gòu)成,其相關(guān)原理是,將上層節(jié)點的值加權(quán)后傳遞給下一層,依次傳遞到最終輸出節(jié)點,再根據(jù)輸出節(jié)點的誤差大小情況給前面節(jié)點層一個激勵或者抑制的信號,從而改變權(quán)重,最后經(jīng)過反復(fù)傳遞,達到輸出誤差在某個范圍內(nèi)。利用程序包nnet的函數(shù)nnet()對輸血中心的全部數(shù)據(jù)進行擬合,得到誤判率為0.2348993,此時的size=2。
通過五折交叉驗證,給出測試集的分類平均誤判率為0.2312573,此時size=2;當(dāng)size=1時,誤判率為0.2326264;當(dāng)size=3時,誤判率為0.2379597。當(dāng)size增大時,誤判率也隨之增大,通過比較可知,size=2時最為合適。
4.結(jié)果分析
運用以上八種方法來對輸血中心數(shù)據(jù)擬合的五折交叉驗證測試集的誤判率歸納如下表8所示。
由表可知,在八種方法的五折交叉驗證測試集誤判率中,誤判率最低的是支持向量機(ksvm)為0.2151588,其次是決策樹和bagging,誤判率最高的是adaboost為0.2592931。故針對輸血服務(wù)中心的數(shù)據(jù)而言,進行分類最好的方法就是采用支持向量機分類法。
參考文獻:
[1]吳喜之.復(fù)雜數(shù)據(jù)統(tǒng)計方法:基于R的應(yīng)用[M].北京:中國人民大學(xué)出版社,2013:54-69.
[2]唐華松,姚耀文.數(shù)據(jù)挖掘中決策樹算法的探討[J].計算機應(yīng)用研究,2001,18(8):18-19.
[3]宋捷,吳喜之.一種新的Boosting回歸樹方法[J].統(tǒng)計與信息論壇,2010,25(5):9-13.
[4]王鴻斌,張立毅,胡志軍.人工神經(jīng)網(wǎng)絡(luò)理論及其應(yīng)用[J].山西電子技術(shù),2006(2):41-43.
[5]王定成,方廷健,高理富,等.支持向量機回歸在線建模及應(yīng)用[J].控制與決策,2003,18(1):89-91.