版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
現(xiàn)代回歸和分類:數(shù)據(jù)挖掘所用的方法前一章介紹的回歸和分類(判別)模型是可以寫成公式的。但是另外一些回歸和分類的方法是體現(xiàn)在算法之中,其具體形式是計算機程序,這些方法廣泛用于數(shù)據(jù)挖掘之中。顯然,算法模型比經(jīng)典的統(tǒng)計模型更加廣泛。由于現(xiàn)在經(jīng)典模型也要經(jīng)過計算機軟件實現(xiàn),因此,廣義地說,算法模型實際上包含了經(jīng)典模型,只不過由于算法模型與經(jīng)典模型的發(fā)展過程及思維方式很不相同,人們不那么說而已。算法建模主要發(fā)展于最近二十年,它得益于不斷進步的計算機技術。如果說起源于前計算機時代的經(jīng)典統(tǒng)計目前大大受惠于計算機的發(fā)展,那么沒有計算機,就不可能產(chǎn)生算法建模。在處理巨大的數(shù)據(jù)集上,在對付被稱為維數(shù)詛咒的巨大變量數(shù)目時,在無法假定總體分布的情況下,在面對眾多競爭模型方面,算法建模較經(jīng)典建模有很多不可比擬的優(yōu)越性。在實際需要拉動下產(chǎn)生和發(fā)展的算法建模有著廣泛的應用及理論前景。本章的多數(shù)方法在SAS和在SPSS公司的數(shù)據(jù)挖掘軟件Clementine中都是以可視化的方法來實現(xiàn)的,操作很方便,但敘述起來較繁瑣。為節(jié)省篇幅,本章僅僅隨著課文介紹R軟件對這些方法的實施?!?.1決策樹:分類樹和回歸樹下圖是一個簡單的確定汽車駕駛員風險的決策樹(decisiontree)。使用這個樹時,先考慮駕駛員的年齡。如果小于18歲,則考慮是否開紅車,如果是,則認為該駕駛員是高風險的否則是低風險的;如果年齡大于18歲,則考慮是否酗酒,如果是,則高風險,否則為低風險。當然,這個決策樹僅僅是描述性的,比較簡單。這個決策樹像一顆倒長的樹(當然也可以橫著放)。變量年齡所在的節(jié)點稱為根節(jié)點(root
node),而底部的四個節(jié)點稱為葉節(jié)點(leafnode)或終節(jié)點(terminalnode)。這個樹也稱為分類樹(classificationtree),因為其目的是要把一個觀測劃分為“高風險”或“低風險”每個葉節(jié)點都是因變量的取值,而除了葉節(jié)點外的其它節(jié)點都是自變量。對于這個決策樹,只要輸入關于某司機的這幾個變量的值,就立刻得到該司機相關的風險分類。還有一種決策樹是回歸樹(regressiontree),其根節(jié)點為連續(xù)的因變量在這個分叉上的平均取值。分類樹和回歸樹合起來也叫做CART(ClassificationAndRegressionTree)上面的描述性決策樹是二分的(binarysplit),即每個非葉節(jié)點(non-leafnode)剛好有兩個叉。決策樹也可有多分叉的(multi-waysplit)。決策樹的節(jié)點上的變量可能是各種形式的(連續(xù)、離散、有序、分類變量等等),一個變量也可以重復出現(xiàn)在不同的節(jié)點。一個節(jié)點前面的節(jié)點稱為其父節(jié)點(母節(jié)點或父母節(jié)點,parentnode),而該節(jié)點為前面節(jié)點的子節(jié)點(女節(jié)點或子女節(jié)點,childnode),并列的節(jié)點也叫兄弟節(jié)點(姊妹節(jié)點,SiblingNode)。上面的例子是一顆現(xiàn)成的樹。它不是隨便畫的,而是根據(jù)數(shù)據(jù)做出來的。本節(jié)就要通過例子介紹如何根據(jù)數(shù)據(jù)來形成決策樹。和經(jīng)典回歸不同,決策樹不需要對總體進行分布的假定。而且,決策樹對于預測很容易解釋,這是其優(yōu)點。此外,決策樹很容易計算。但有必要設定不使其過分生長的停止規(guī)則或者修剪方法。決策樹的一個缺點是每次分叉只和前一次分叉有關,而且并不考慮對以后的影響。因此,每個節(jié)點都依賴于前面的節(jié)點。如果一開始的劃分不同,結(jié)果也可能很不一樣。目前有些人在研究分叉時考慮未來,但由于可能導致強度很大的計算,還沒有見之于實際應用階段。決策樹是后面要介紹的更加強大的各種組合算法的基礎之一,因此理解決策樹是很有必要的?!?.1.1分類樹決策樹一開始就是為了分類而設計的。其原理是按照某些準則,在每個節(jié)點選擇把觀測值盡可能按照因變量的取值分開的一個自變量。以公路轎車事故為例,自變量為車體顏色和司機是否飲酒,因變量為是否出事故。假定有380個觀測值(駕駛員),其中出過事的共有105個。下表中列出了分別按照變量顏色和變量飲酒所得到的計數(shù),我們試圖利用該表來直觀判斷哪個變量更容易解釋事故。變量:顏色顏色類別變量:顏色顏色類別是否出事紅其它出過事5550未出過事15260變量:飲酒是否飲酒是否出事是否出過事9510未出過事5270根據(jù)這兩個表格,直觀上,用是否飲酒作為節(jié)點變量能夠把是否出事分得更開,因此應該選擇是否飲酒。當然,這里僅僅是依賴于直觀的決策。數(shù)學上有很多選擇節(jié)點的準則,它們的基本原理類似,我們這里不想糾纏到數(shù)學細節(jié)之中。當然,自變量也可能是連續(xù)變量,假定事故數(shù)據(jù)中還有一個年齡變量,這時就要比較各
變量:年齡分段1年齡段變量:年齡分段1年齡段(在50分段)是否出事<50三50出過事5154未出過事120155種年齡段。下表就是兩種分段的結(jié)果:變量:年齡分段2年齡段(在18分段)是否出事<18218出過事7035未出過事6269根據(jù)這個表格在18歲分段顯然比在50歲分段好,但這個年齡分段和飲酒比就很難直觀看清楚了。這時,利用數(shù)學準則進行計算就很必要了。這種計算和比較當然留給計算機去費神了,我們只要知道原理就行了。下面我們用一個例子來描述決策樹。例9.1(數(shù)據(jù)shuttle.txt).這個數(shù)據(jù)是關于美國航天飛機在各種條件下是否自動著陸的決策問題數(shù)據(jù)源于D.Michie(1989)Problemsofcomputer-aidedconceptformation.InApplicationsofExpertSyst,ems2ed.J.R.Quinlan,TuringInstitutePress/Addison-Wesley,pp.310-33.2在R軟件中,該數(shù)據(jù)已經(jīng)在軟件包MASS中,用語句library(MASS);data(shuttle)可調(diào)出數(shù)據(jù)。然后設隨機數(shù)種子set.seed(2),樣本量m=256,用語句samp=sample(1:m,floor(m/10))隨機抽取10%的下標為測試集,訓練集的下標為tsamp=setdiff(1:m,samp)。使用軟件包:library(rpart),而(b=rpart(use~.,shuttle,subset=tsamp))得出決策樹的輸出。。有256行及7列。頭六列為作為自變量的定性變量,而最后一列為因變量。自變量包括穩(wěn)定性(stability,取值stab/xstab)、誤差大?。╡rror,取值(MM/SS/LX/XL)、信號(sign,取值pp數(shù)據(jù)源于D.Michie(1989)Problemsofcomputer-aidedconceptformation.InApplicationsofExpertSyst,ems2ed.J.R.Quinlan,TuringInstitutePress/Addison-Wesley,pp.310-33.2在R軟件中,該數(shù)據(jù)已經(jīng)在軟件包MASS中,用語句library(MASS);data(shuttle)可調(diào)出數(shù)據(jù)。然后設隨機數(shù)種子set.seed(2),樣本量m=256,用語句samp=sample(1:m,floor(m/10))隨機抽取10%的下標為測試集,訓練集的下標為tsamp=setdiff(1:m,samp)。使用軟件包:library(rpart),而(b=rpart(use~.,shuttle,subset=tsamp))得出決策樹的輸出。我們試著建立一個決策樹來根據(jù)自變量得到因變量的取值。計算時我們隨機選取90%的數(shù)據(jù)作為訓練集,剩下的10%的數(shù)據(jù)作為測試集。R軟件給出的輸出為2:n=231node),split,n,loss,yvalr(yprob)*denotesterminalnode1) root231100auto(0.567099570.43290043)2) vis=no115 0auto(1.000000000.00000000)*3) vis=yes116 16noauto(0?l37931030?86206897)6) error=SS30 12noauto(0.400000000.60000000)12) stability=stab16 4auto(0?750000000?25000000)*13) stability=xstab14 0noauto(0.000000001.00000000)*7) error=LX,MM,XL86 4noauto(0.046511630?95348837)*這是一顆從左到右的樹,它只用了6個自變量中的3個。根節(jié)點是1);下面向右移了一點的節(jié)點2)、3)分別為根節(jié)點變量vis等于no和yes的兩個子節(jié)點;其中2)是葉節(jié)點(后面有“*”號表明其為葉節(jié)點);而下面再向右移了一點的節(jié)點6)、7)分別為節(jié)點3)變量error為SS及其它(LX、MM、XL)的兩個子節(jié)點;其中7)為葉節(jié)點,而節(jié)點6)下面還有兩個子節(jié)點12)和13),它們都是終節(jié)點。我們以節(jié)點1)、2)和7)為例,解釋上面輸出中的數(shù)字和符號的意義。各種軟件的決策樹表示方法有所出入,但大同小異。根節(jié)點1)的“root”說明是根節(jié)點;231是此時觀測值的總數(shù)目,而其中100個是觀測值中少數(shù)類的數(shù)目,即與后面的自動著陸(auto)相反值(即noauto)的觀測數(shù)目;這里觀測值中,auto是多數(shù),因此,如果不再分叉,決策為auto;最
后括號中的兩個數(shù)為多數(shù)的auto和少數(shù)的noauto數(shù)目的份額,約56.7%和43.3%。節(jié)點2)前面是其父節(jié)點(即根節(jié)點1)變量vis取值no的子節(jié)點,滿足這個節(jié)點的觀測值有115個,其中有0個和后面auto的決策不符,因此,此節(jié)點的決策是auto,auto和noauto的份額比為1比0,它是葉節(jié)點(終節(jié)點),這是以“*”號標出的。節(jié)點7)為節(jié)點3)的子節(jié)點,它是節(jié)點3)變量error取LX,MM,XL中任意一個值時的分叉,這里總共有86個觀測,其中4個為少數(shù)的auto類,而決策是根據(jù)多數(shù)的noauto做出的,屬于少數(shù)和多數(shù)類觀測值的份額約為4.7%和95.3%?;诖藬?shù)據(jù)的結(jié)果還可以畫出決策樹的樹狀圖(圖9.1)3。圖9.1根據(jù)例9.1數(shù)據(jù)所做的分類樹。注意,圖9.1和前面文字輸出的樹是一致的。這里的能見度(vis)、誤差(error)、穩(wěn)當性(stability)的取值都用的a、b、c等字母。這是把原先取值的符號按字母順序排序之后,用字母代替而得。比如變量vis有兩個取值yes和no,由于no按字母順序在yes之前,因此vis=a代表vis=no,默認分到左邊叉(最左邊的是節(jié)點2),而(沒有標出的)vis=yes導向右邊的叉;類似地右邊叉的error=c意味著error取LX、MM、SS、XL三個值中的第3個,即SS,這默認導致左邊的叉(節(jié)點6),而其余三個LX、MM、XL默認導向右邊分叉(節(jié)點7);節(jié)點6)的stability=a為stab和xstab中的第一個stab,轉(zhuǎn)向左節(jié)點12),而stability=xstab向右分叉(節(jié)點13)。訓練集分類結(jié)果預測類別真實類別訓練集分類結(jié)果預測類別真實類別NoYesNo1150我們還可以輸出訓練集和測試集分類結(jié)果的表格4:測試集分類結(jié)果預測類別真實類別NoYesNo1303在R中,在前面注中的語句施行后,用plot(b);text(b)即可。4在R中,在前面注中的語句施行后,用t(table(predict(b,shuttle[tsamp,],type="class"),shuttle[tsamp,6]))語句和t(table(predict(b,shuttle[samp,],type="class"),shuttle[samp,6]))語句。
Yes16Yes16100Yes012上面例9.1的自變量都是定性變量。我們再用決策樹對前面一章例8.5的鳶尾花數(shù)據(jù)(iris.txt)進行分類,這里的自變量(萼片和花瓣的長寬)都是連續(xù)的定量變量。例9?2(例8.5數(shù)據(jù)iris.txt).我們還是用鳶尾花(iris)數(shù)據(jù)。這次,我們以類別Species作為因變量,而以萼片及花瓣的長寬作為四個自變量構(gòu)建分類樹做分類。結(jié)果如下5:n=75node),splitrnrlossryvalr(yprob)*denotesterminalnoderoot7550setosa(0?33333330?33333330.3333333)Peta1?Length<2?4525 0setosa(1.00000000.00000000.0000000)★Peta1?Length>=2?455025versicolor(0.00000000?50000000?5000000)Petal.Widtxhv1?7528 3versicolor(0.00000000?89285710?1071429)*Petal?Width>=:L?7522 0virginica(0.00000000.00000001.0000000)*這里只用了花瓣長寬兩個變量(petallength、petalwidth)。在根節(jié)點的變量是花瓣寬(Petal.Length),而且在2.45處分割;當花瓣長小于2.45時導致節(jié)點2),這里一共有25個觀測,有0個不屬于setosa鳶尾花,全部屬于setosa,因此決策為setosa(這是葉節(jié)點);當花瓣長大于或等于2.45時導致節(jié)點3),這里一共有50個觀測,有25個不屬于versicolor鳶尾花,節(jié)點3)以花瓣寬(Petal.width)為變量的子節(jié)點,分割點為1.75;當花瓣寬小于1.75時導致節(jié)點6),這里一共有28個觀測,只有3個不屬于versicolor鳶尾花,因此這個葉節(jié)點的決策為versicolor;當花瓣寬大于或等于1.75時導致節(jié)點7);那里有共有22個觀測,其中0個不屬于virginica鳶尾花,因此這個葉節(jié)點的決策為virginica。它的樹狀圖在圖9.2中5在R中5在R中iris是固有數(shù)據(jù),不用另行輸入。令樣本量m=150;設隨機數(shù)種子set.seed(10);然后選取訓練集和測試集:samp<-c(sample(1:50,25),sample(51:100,25),sample(101:150,25));tsamp=setdiff(1:m,samp);利用軟件包:library(rpart);再用命令(b=rpart(Species?.,iris,subset=tsamp))得到結(jié)果。在前面語句的基礎上,用plot(b);text(b)。圖9?2根據(jù)例9.2鳶尾花數(shù)據(jù)所做的分類樹。圖9.2展示的結(jié)果和前面的逐行輸出一致,很好解釋,請讀者自己思考。對鳶尾花數(shù)據(jù)我們也可以輸出訓練集和測試集分類結(jié)果的表格7:訓練集分類結(jié)果預測類別訓練集分類結(jié)果預測類別真實類別setosaversicolorvirginicasetosa2500versicolor0250virginica0322測試集分類結(jié)果預測類別真實類別setosaversicolorvirginicaSetosa2500versicolor0241Virginica0223思考一下:無論自變量是連續(xù)變量還是定性變量,分類樹的原理都一樣。連續(xù)變量在根據(jù)需要離散化之后和分類變量就類似了。后面要介紹的回歸樹的因變量也離散化了(但也不是事先離散化),這樣就類似于分類樹了。§9.1.2回歸樹當決策樹的輸出變量(因變量)是分類變量時,叫分類樹,而當決策樹的輸出變量為連續(xù)變量時稱為回歸樹。雖然回歸樹的因變量是連續(xù)變量,但葉節(jié)點數(shù)目是有窮的,因此輸出的值也是在這個葉節(jié)點上的觀測值的平均?;貧w樹不用假定經(jīng)典回歸中的諸如獨立性、正態(tài)性、線性或者光滑性等等,無論自變量是數(shù)量變量和定性變量都同樣適用。然而它需要更多的數(shù)據(jù)來保證合理的結(jié)果。下面我們用一個例子來描述回歸樹的構(gòu)建,并通過這個例子來理解回歸樹的原理。例9.3(數(shù)據(jù)B1.txt).這是波士頓郊區(qū)的房價數(shù)據(jù)的一部分8。原數(shù)據(jù)有506個街區(qū)(觀測)及14個變量,我們這里只取了3個變量:人均犯罪率(crim)、較低地位人的比率(lstat)及平均房價(medv,單位:千美元)。我們試圖用crim和lstat來預測平均房價medv。首先,我們對變量crim進行對數(shù)變換9。圖9.3是變量crim在變換前后和其它兩個變量做散點圖的結(jié)果,從圖中可以看出,變換改變了點的分布極端不均勻的現(xiàn)象。不僅僅是在決策樹,在其它統(tǒng)計過程中,都要對數(shù)據(jù)進行探索性分析,必要時進行某種變換。7在R中,在前面注中的語句施行后,用t(table(predict(b,iris[tsamp,],type="class"),iris[tsamp,5]))語句和7在R中,在前面注中的語句施行后,用t(table(predict(b,iris[tsamp,],type="class"),iris[tsamp,5]))語句和t(table(predict(b,iris[samp,],type="class"),iris[samp,5]))語句。Harrison,D.andRubinfeld,D.L.(1978)Hedonicpricesandthedemandforcleanair.J.Environ.EconomicsandManagement5,81-02.在R中讀入數(shù)據(jù)用語句:B1=read.table("f:/hepbook/data/B1.txt",header=T);然后把變量名字激活:attach(B1);再準備畫4張散點圖:par(mfrow=c(2,2))。下面就是這四張圖的語句:plot(crim,medv,main="crim變換前”);plot(crim,lstat,main="crim變換前");plot(log(crim),medv,main="crim變換后");plot(log(crim),lstat,main="crim變換后")。crim變換前020406080crimcrim變換前020406080crimcrim變換后-4-2024crimcrim變換前020406080crimcrim變換前020406080crimcrim變換后-4-2024crim變換后-4-2024log(crim)log(crim)圖9.3對例9.3數(shù)據(jù)中的變量crim進行對數(shù)變換前后和另外兩個變量所做的散點圖。通過計算(這里的變量crim是已經(jīng)變換后的),我們使用R軟件得到下面的回歸樹的結(jié)果10:node),split,n,deviance,yval*denotesterminalnoderoot50642720.022.53lsta七<9.72521216810.029.73Is七丑七<4.6550 3361.039.72crim<-0.673987392289.037.42*crim>-0.67398711 136.647.86*3313.025.57585.329.3313.025.57585.329.92*2174.024.62*2712.031.80816.537.37*1333.028.20*crim<-0.941113134lstat<5.49524lstat>5.495110crim>-0.94111328crim<-0.48919811crim>-0.489198177006.017.3416277006.017.341627.020.30*2699.014.26859.916.681044.011.98Is七丑七<16.085150lstat>16.085144crim<1.7523870crim>1.7523874這里的解釋和決策樹類似,但由于是回歸不是分類,稍有差別。就第15)節(jié)點為例,它是其父節(jié)點變量crim>1.75238的分叉(實際上還有所有祖先節(jié)點的條件的約束),這里有74個觀測值,它們的離差(deviance)接著前面注的語句;對crim進行變換B1$crim=log(B1$crim)。這里我們用軟件包tree,用命令library(tree)接著前面注的語句;對crim進行變換B1$crim=log(B1$crim)。這里我們用軟件包tree,用命令library(tree)激活該軟件包,用命令(b=tree(medv?lstat+crim,B1))得到結(jié)果。離差是度量擬合好壞的一個量。在滿足因變量y有均值為卩的正態(tài)分布的線性回歸中,離差(deviance)可定義為E(y一卩)2。在回歸樹,它就是在每個節(jié)點的殘差平方和。它有各種形式,我們在這里不進行深入討論。我們還可以做出樹狀圖(圖9.4)接著前面的R的語句和結(jié)果,輸入語句接著前面的R的語句和結(jié)果,輸入語句plot(b);text(b)。接著前面的R的語句和結(jié)果,輸入語句plot(B1$lstat,B1$crim,xlab="lstat",ylab="crim");partition.tree(b,add=TRUE,cex=1.5)。圖9.4根據(jù)例9.3Boston房價數(shù)據(jù)所做的回歸樹,這和前面的逐行輸出的回歸樹等價。由于自變量只有兩個,我們可以做出它們的散點圖(圖9.5)及回歸樹所定義的分劃(圖9.5上面的矩形區(qū)域)和各個區(qū)域的因變量的均值(圖9.5各區(qū)域上面的數(shù)字)13。這里每個區(qū)域相當于回歸樹的一個葉節(jié)點。當然,對于多于兩個自變量的情況,就很難畫出這種示意圖了。mirc420241020mirc42024102030lstat圖9.5根據(jù)例9.3Boston房價數(shù)據(jù)所做的回歸樹基于自變量散點圖的分劃圖,這和前面的逐行輸出的回歸樹及樹狀圖等價。圖9.5的各條線段是完全按照所得到的回歸樹中對這兩個自變量的分劃確定的,每個區(qū)域中的數(shù)字是該區(qū)域上因變量的均值。該平面上每一個點都相應一個因變量值,這個值和它所在區(qū)域的因變量的均值之差,就是這點的殘差?;貧w樹選擇自變量分割點的一種準則就是使得殘差平方和最小。當然還有其它準則,正如經(jīng)典的回歸也不都是最小二乘回歸一樣。當然,我們這里選擇crim和lstat的原因僅僅因為是它們是定量變量,容易和經(jīng)典的回歸比較。其實變量crim和其它變量相比并不那么重要,該數(shù)據(jù)中對因變量medv影響最大的自變量是房間數(shù)目(rm)和較低地位人的比率(lstat)。關于變量重要性,在后面的9.2.4隨機森林一節(jié)對這個例子的繼續(xù)分析中將會指出。思考一下:回歸樹和分類樹有什么異同?回歸樹和經(jīng)典回歸有什么區(qū)別?回歸樹模型有沒有線性、非線性之分,為什么?§9.2組合方法:adaboost、bagging和隨機森林§9.2.1為什么組合?如果某人欲競選當?shù)仡I導,假定該地有49%的人不支持他。那么,每隨機問一個人,都有約49%的可能不選他(我們假定該地選民總數(shù)很大,這樣,每問一個人就近似地相當于一個Bernoulli試驗,相應的概率p=0.49)。如果從該地隨機選擇1000人來投票,按照簡單多數(shù)當選的原則,那么他不被選上的概率是多少呢?假定這次投票中不選他的票數(shù)服從參數(shù)為1000和0.49的二項分布,容易計算,這1000人中有超過半數(shù)的人(至少501人)
不選他的概率約為0.2532,遠遠小于某一個人不選舉他的概率0.49。這類決策例子直觀地表現(xiàn)在圖9.6中。圖9.6給出了在個體數(shù)目為n時(個體是隨機選出的,在大總體中可近似地看成放回抽樣),個體做某項決策的概率p(橫坐標)和個體數(shù)目為n的群體按照少數(shù)服從多數(shù)的投票原則做出該項決策的概率(用p表示)之間關系的點圖(圖中的S型曲線)。圖g中對角線用作對照,與橫坐標一樣為p,而豎直與水平的兩條點狀虛線分別標明了p和p§為0.5時的位置??梢钥闯觯趐小于50%時,樣本量越大,p相對于p越小、越接近于0;§而在p大于50%時,樣本量越大,p相對于p越大、越接近于1。§n5 n11 n51星概策決票投體群肇概策決票投體群00.00.20.4 0.6個體決策概率p0.8星概策決票投體群肇概策決票投體群00.00.20.4 0.6個體決策概率p0.8I0''''I1.0011111100.00.20.4 0.6個體決策概率p0.00.20.4 0.6個體決策概率p0.81.0n101n1001n99990.00.20.40.60.81.00.00.20.40.60.81.00.00.20.40.60.81.0
個體決策概率p 個體決策概率p 個體決策概率p圖9.6在個體決策滿足Bernoulli試驗的條件下,個體決策概率(橫坐標)與少數(shù)服從多數(shù)原則下個體數(shù)目為n(n分別為5、11、51、101、1001、9999)的群體投票決策概率(縱坐標)的點圖(S型曲線)?,F(xiàn)在考慮用統(tǒng)計方法分類,這時的基本統(tǒng)計模型也稱為分類器(classifier)。前面介紹過的分類樹和判別分析都是分類器。類似地,假定有許多競爭模型或方法來進行分類,如果每個方法比隨機挑選稍微強一點,也就是說比用扔硬幣要強,那么每個基本分類器出錯誤概率應該小于50%。這時,類似于剛才所說的選舉例子,用一個分類器的結(jié)果,不如用許多分類器“投票”的結(jié)果要可靠。這種利用多個模型的方法,對于回歸也適用,只不過不用投票,而是對不同結(jié)果進行某種平均。這種組合多個分類器或回歸模型(稱為基本模型)來得到結(jié)果的方法稱為組合方法(ensemblemethod,ensemblelearning,metaalgorithm)。當然,圖9.6所描述的情況只能是對組合方法出錯率的一個簡單化類比。滿足Bernoulli試驗性質(zhì)的分類器可能并不存在,但多個模型的某些形式的組合確實能夠大大減少出錯率。下面我們介紹幾種組合方法?!?.2.2AdaboostAdaboost(adaptiveboosting的簡寫)可以譯為自適應助推法,但我們寧可用簡明的英
文縮寫“adaboost。'Adaboost是一種迭代式的組合算法。假定我們的目的是分類。開始可能用的是一種較弱的分類器(即出錯率較高的分類器),然后,隨著迭代,不斷地通過加權(quán)再抽樣改進分類器,每一次迭代時都針對前一個分類器對某些觀測值的誤分缺陷加以修正通常是在(放回)抽取樣本時對那些誤分的觀測值增加權(quán)重(相當于對正確分類的減少權(quán)重),這樣就形成一個新的分類器進入下一輪迭代,而且在每輪迭代時都對這一輪產(chǎn)生的分類器給出錯誤率,最終結(jié)果由各個階段的分類器的按照錯誤率加權(quán)(權(quán)重目的是懲罰錯誤率大的分類器)投票產(chǎn)生。這就是所謂的“自適應”Adaboost的缺點是對于奇異點或離群點比較敏感,但其優(yōu)點是對于過擬合則不那么敏感。Adaboost與許多類似方法都屬于boosting(助推法)一族,其中各種方法都有其優(yōu)缺點。例9?4(繼續(xù)例8.5數(shù)據(jù)iris.txt).我們還是用鳶尾花(iris)數(shù)據(jù),但這次用adaboost(以分類樹作為基本模型)來分類。我們隨機選擇一半數(shù)據(jù)為訓練集,而另一半為測試集。很容易得到對測試集的預測中有多少觀測值被正確分類的結(jié)果14:訓練集分類結(jié)果預測類別訓練集分類結(jié)果預測類別真實類別setosaversicolorvirginicasetosa2500versicolor0250virginica0025測試集分類結(jié)果預測類別真實類別setosaversicolorvirginicasetosa2500versicolor0250virginica0322上面輸出表明,在隨機選擇的測試集中,virginica有3個誤分到versicolor,而對訓練集的分類則沒有錯誤。還可以輸出變量的相對重要性(根據(jù)變量在分類樹中用來分叉的次數(shù)),圖9.7是變量相對重要性的條形圖15:14在R軟件中,激活軟件包:library(adabag)。使用set.seed(O)設置隨機種子,然后用samp=c(sample(l:50,25),sample(51:100,25),sample(101:150,25))選擇一半數(shù)據(jù)為訓練集;再用a=adaboost.Ml(Species?.,data=iris[samp,],mfinal=15,maxdepth=5)實施以分類樹為基本分類器的adaboost;用a.pred=predict.boosting(a,newdata=iris[-samp,],type="Species")對測試集做預測;最后給出預測結(jié)果a.pred(其中a.pred[-1]為預測中有多少誤分)。類似地,對訓練集的預測分類用a.predt=predict.boosting(a,newdata=iris[samp,],type="Species"),可用a.predt[-1]評價預測結(jié)果。15用R語句barplot(a$importance)。
04004010圖9.7對數(shù)據(jù)iris.txt做adaboost分類時,變量相對重要性的條形圖。例9.5(數(shù)據(jù)Vehicle.txt).這是有846個觀測值,描述了19個變量的數(shù)據(jù)該數(shù)據(jù)是由Drs.PeteMowforthandBarryShepherd,TuringInstitute,Glasgow,Scotland產(chǎn)生的,引自數(shù)據(jù)庫該數(shù)據(jù)是由Drs.PeteMowforthandBarryShepherd,TuringInstitute,Glasgow,Scotland產(chǎn)生的,引自數(shù)據(jù)庫/pub/machine-learning-databaseso17讀者可以模仿鳶尾花的數(shù)據(jù)分析來編寫程序;使用該數(shù)據(jù)需要打開軟件包:library(mlbench)。然后用下面語句:n=nrow(Vehicle);set.seed(O);samp<-sample(l:n,n/2)(選擇一半數(shù)據(jù)為訓練集);a=adaboost.Ml(Class~.,data=Vehicle[samp,],mfinal=25,maxdepth=maxdepth);a.pred<-predict.boosting(a,newdata=Vehicle[samp,],type="Class")(訓練集分類結(jié)果);輸出結(jié)果:a.pred[-l];a.pred<-predict.boosting(a,newdata=Vehicle[-samp,],type="Class")(測試集分類結(jié)果);輸出結(jié)果:a.pred[-1]°18個關于汽車的度量(數(shù)量變量)來把汽車分類。數(shù)據(jù)中最后一個變量class為已知的類別(四種:bus、opel、saab、van)。類似于前面鳶尾花的分類,我們隨機選擇一半數(shù)據(jù)為訓練集,而另一半為測試集。很容易得到對測試集的預測中有多少觀測值被正確分類的結(jié)果17(這里給出計算機輸出)。訓練集分類結(jié)果預測類別訓練集分類結(jié)果預測類別真實類別busopelsaabvanBus107000Opel099120Saab341001Van000100測試集分類結(jié)果預測類別真實類別busopelsaabvanbus105312opel248465saab340636van03789思考一下:我們用的軟件包adabag在輸出中除了結(jié)果的分類預測之外還有每次迭代時的分類樹,以及這些樹對每個觀測值的“投票?!彪m然adaboost的方法描述比較羅唆,但使用起來和其它分類方法沒有多大區(qū)別?!?.2.3Bagging
Bagging(bootstrapaggregating的簡寫)可以譯為自助整合法,但我們寧可使用簡單的“bagging”。顧名思義,它利用了自助法(bootstrap)放回抽樣。它對訓練樣本做許多次(比如k次)放回抽樣,每次可抽取和樣本量同樣的觀測值(由于是放回抽樣,大約有三分之一的觀測沒有抽到),于是就有了k個不同的樣本。然后,對每個樣本生成一個決策樹。這樣,每個樹都對一個新的觀測值產(chǎn)生一個預測。如果目的是分類,那么由這些樹的分類結(jié)果的多數(shù)(“投票”)產(chǎn)生bagging的分類;如果目的是回歸,則由這些樹的結(jié)果的平均得到因變量的預測值。例9?6(繼續(xù)例9.5數(shù)據(jù)Vehicle.txt).我們重復利用例10.5的數(shù)據(jù)對汽車分類。類似于前面的adaboost,我們還是隨機選擇半數(shù)觀測作為訓練集,剩下的作為測試集。可以得到各種預測結(jié)果18。這里,基本分類器是分類樹。運用bagging對我們的數(shù)據(jù)所作出的正確和錯誤分類的結(jié)果為:訓練集分類結(jié)果預測類別訓練集分類結(jié)果預測類別真實類別busopelsaabvanbus104102opel781176saab2187510van000100測試集分類結(jié)果預測類別真實類別busopelsaabvanbus106014opel857279saab15334915van01494我們也可以輸出bagging的變量重要圖在R軟件中,和前面例10.5在R軟件中,和前面例10.5類似。使用下面軟件包:library(adabag);library(mlbench);抽取訓練集和測試集(各一半):n=length(Vehicle[,1]);samp=sample(1:n,n/2);對測試集施行bagging:a=bagging(Class?.,data=Vehicle[samp,],mfinal=25,maxdepth=5);a.pred=predict.bagging(a,newdata=Vehicle[-samp,]);輸出測試集預測誤差:a.pred[-1];對訓練集分類:b.pred=predict.bagging(a,newdata=Vehicle[samp,]);輸出訓練集預測誤差:b.pred[-1]。利用前面結(jié)果,使用語句barplot(a$importance)。思考一下:Bagging的每個樣本是等概率抽樣的結(jié)果,其各個基本分類器是同等權(quán)數(shù)投票,而在adaboost的每次迭代中,樣本抽取方式依賴于前一次的結(jié)果,其各個分類器是根據(jù)各個分類器的表現(xiàn)加權(quán)投票。想想為什么每次自助法抽樣有大約三分之一的觀測值不出現(xiàn)在自助法樣本中。§9?2?4隨機森林隨機森林(randomforests)和使用決策樹作為基本模型的bagging有些類似點,或者說這種bagging是隨機森林的一個特例。以決策樹為基本模型的bagging在每次自助法(boostrap)放回抽樣之后,產(chǎn)生一個決策樹,抽多少樣本就生成多少樹,在生成這些樹的時候沒有進行更多干預。而隨機森林也是進行許多次自助法放回抽樣;所得到的樣本數(shù)目要大大多于bagging的樣本數(shù)目。此外,在生成樹的時候,每個節(jié)點的變量都僅僅在隨機選出的少數(shù)變量中產(chǎn)生。因此,不但樣本是隨機的,就連每個節(jié)點的產(chǎn)生都有很大的隨機性。隨機森林讓每個樹盡量增長,而且不進行修剪。隨機森林有下面的特色:它比它產(chǎn)生以前所有的方法都
精確。此外,對于大的數(shù)據(jù)庫,它很有效率。它不懼怕很大的維數(shù),即使是數(shù)千變量,它也不必刪除變量。它還給出分類中各個變量的重要性。隨著森林的增長,它產(chǎn)生一個內(nèi)部無偏的一般誤差的估計。它有一個有效的方法來估計缺失值,同時在很大比例數(shù)據(jù)缺失時仍然保持精確。比如在一個關于淋巴瘤的基因芯片數(shù)據(jù)中,變量個數(shù)可以達到4682個,而樣本量僅有81個,但隨機森林可以很好地找到重要的基因20。這種數(shù)據(jù)在經(jīng)典統(tǒng)計中根本無法處理,Diaconis&Efron(1983)2噌經(jīng)說過,“統(tǒng)計經(jīng)驗表明,基于19個變量和僅僅155個數(shù)據(jù)點來擬合模型是不明智的?!笨磥磉@個說法不適用于算法建模。我們先考慮回歸問題,還是用例9.3的Boston房價的例子。例9.7(繼續(xù)例9.3數(shù)據(jù),但取全部數(shù)據(jù)Boston.txt).原數(shù)據(jù)有506個街區(qū)(觀測)及14個變量。我們這里試圖用所有13個變量來預測平均房價medv。這里的計算和前面的回歸樹等類似,很容易得到結(jié)果22。我們僅僅在這里展示變量重要性的兩種度量結(jié)果(圖9.8)。左邊是用移去一個變量時導致的平均精確度減少來衡量的,類似地,右邊是用均方誤差來衡量的??梢钥闯?,房間數(shù)目(rm)和較低地位人的比率(lstat)是最突出的。crimzninduschasnoxrmagedisradtaxptratioblacklstat0crimzninduschasnoxrmagedisradtaxptratioblacklstat0crimzninduschasnoxrmagedisradtaxptratioblacklstat0crimzninduschasnoxrmagedisradtaxptratioblacklstat0圖9?8用Boston房價數(shù)據(jù)做回歸時的自變量重要性點圖。下面利用例9.5鳶尾花的數(shù)據(jù),用隨機森林進行分類。例9?8(繼續(xù)例9.5數(shù)據(jù)iris.txt).我們還是用鳶尾花(iris)數(shù)據(jù)。類別Species作為因變量,而以萼片及花瓣的長寬作為四個自變量構(gòu)建隨機森林做分類。我們先隨機選取一半數(shù)據(jù)(每一類一半)做訓練集,而另一半做測試集,然后用訓練出來的樣本看這兩個數(shù)據(jù)集的測試結(jié)果。我們很容易得到下面的結(jié)果23:Breiman,L(2001)Statisticalmodeling:thetwocultures,StatisticalScience,2001.Vol.16,No.3,199-231.Diaconis,P.andEfron,B.(1983),Occam'stworazors:thesharpandtheblunt.InProceedingsoftheFourthInternationalConferenceonKnowledgeDiscoveryandDataMining(RAgrawaiandP.Stolorz,eds.)37-43,AAAIPress,MenloPark,CA.22在R中,使用語句library(randomForest)來激活隨機森林軟件包;然后用下面語句輸入數(shù)據(jù):B1=read.table("f:/hepbook/data/Boston.txt",header=T);attach(B1);主要語句:w=randomForest(medv~.,data=B1,importance=T);畫重要性圖:par(mfrow=c(1,2));for(iin1:2)barplot(t(round(importance(w),2))[i,],s=0.5)。23在R軟件中先設定隨機種子set.seed(117);選擇一半觀測值作為訓練集:samp=c(sample(1:50,25),測試集分類結(jié)果測試集分類結(jié)果預測類別訓練集分類結(jié)果預測類別真實類別setosaversicolorvirginicasetosa2500versicolor0250virginica0025真實類別setosaversicolorvirginicasetosa2500versicolor0232virginica0124這個結(jié)果看上去和adaboost差不多,由于這個數(shù)據(jù)本身的問題,不可能百分之百分類正確。隨機森林可以得到自變量的重要性(圖9.9)sample(51:100,25),sample(101:150,25));在用library(randomForest)之后,使用命令:ws=randomForest(Species~.,data=iris[samp,]);對測試集做預測:wp=predict(ws,iris[-samp,]);輸出預測結(jié)果:sample(51:100,25),sample(101:150,25));在用library(randomForest)之后,使用命令:ws=randomForest(Species~.,data=iris[samp,]);對測試集做預測:wp=predict(ws,iris[-samp,]);輸出預測結(jié)果:table(observed=iris[-samp,"Species"],predicted=wp);wpt=predict(ws,iris[samp,]);table(observed=iris[samp,"Species"],predicted=wpt)。 用語句:set.seed(117);w=randomForest(Species~.,data=iris,importance=TRUE,proximity=TRUE);par(mfrow=c(1,2));for(iin1:2)barplot(t(importance(w))[i,],s=0.7)。 用R語句:par(mfrow=c(1,2));aa=eigen(w$proximity)[[2]];plot(aa[,1:2],pch=(1:3)[as.numeric(iris$Species)],cex=0.7,main="",xlab="",ylab="");MDSplot(w,iris$Species,palette=rep(1,3),pch=as.numeric(iris$Species),xlab="",ylab="")。Sepal.LengthSepal.WidthPetal.LengthPetal.WidthSepal.LengthSepal.WidthPetal.LengthPetal.WidthSepal.LengthSepal.WidthPetal.LengthPetal.WidthSepal.LengthSepal.WidthPetal.LengthPetal.Width圖9.9用鳶尾花數(shù)據(jù)做分類時的自變量重要性點圖。用隨機森林還可以得到各個觀測點之間親近程度的度量。圖9.10的兩個圖是用兩種方法把各個點的親近度在二維圖上顯示出來25,不同的記號表示不同的鳶尾花的種類。
4.02.00.02.0-4.0圖9.10用鳶尾花數(shù)據(jù)做分類時的觀測值親近性點圖。4.02.00.02.0-4.0面再舉一個利用隨機森林找出變量重要性的例子。例9?9(數(shù)據(jù)airquality.txt)這是1973年紐約市從五月到九月的空氣質(zhì)量數(shù)據(jù) 此數(shù)據(jù)來自NewYorkStateDepartmentofConservation的臭氧數(shù)據(jù)和美國NationalWeatherService的氣象數(shù)據(jù)。引自Chambers,J.M.,Cleveland,W.S.,Kleiner,B.andTukey,P.A.(1983)GraphicalMethodsforDataAnalysis.Belmont,CA:Wadsworth.在R中,已經(jīng)有該數(shù)據(jù),只要使用語句library(randomForest)來激活randomForest軟件包;施行隨機森林ozone.rf=randomForest(Ozone~.,data=airquality,mtry=3,importance=T,na.action=na.omit);畫兩種重要性圖:par(mfrow=c(1,2));for(iin1:2)barplot((importance(ozone.rf)[,i])。 此數(shù)據(jù)來自NewYorkStateDepartmentofConservation的臭氧數(shù)據(jù)和美國NationalWeatherService的氣象數(shù)據(jù)。引自Chambers,J.M.,Cleveland,W.S.,Kleiner,B.andTukey,P.A.(1983)GraphicalMethodsforDataAnalysis.Belmont,CA:Wadsworth.在R中,已經(jīng)有該數(shù)據(jù),只要使用語句library(randomForest)來激活randomForest軟件包;施行隨機森林ozone.rf=randomForest(Ozone~.,data=airquality,mtry=3,importance=T,na.action=na.omit);畫兩種重要性圖:par(mfrow=c(1,2));for(iin1:2)barplot((importance(ozone.rf)[,i])。Solar.RWindTempMonthDaySolar.RWindTempMonthDay圖9?11用紐約臭氧數(shù)據(jù)做回歸時的自變量重要性點圖。Solar.RWindTempMonthDaySolar.RWindTempMonthDay從圖9.11可以看出,溫度和風力對于空氣中臭氧的含量起著最重要的作用思考一下:隨機森林、bagging、adaboost等方法都是組合方法,但這些方法和傳統(tǒng)統(tǒng)計思維有很大的不同。你能夠說出你的感覺嗎?就你的理解,這些方法有什么優(yōu)缺點?§9.3最近鄰方法最近鄰方法(nearestneighboralgorithm)可能是所有算法建模中最簡單的方法。它基于訓練集對測試集進行分類或回歸。每個回歸或分類問題都有一些自變量,它們組成一個多維空間。首先在空間中假定一個距離。在連續(xù)型自變量的情況,通常都是用歐氏空間。在分類問題中,一個測試集點應該屬于離它最近的k個訓練集點中多數(shù)所屬于的類型。在k=1的最簡單的情況,那么該點的類型應該和與它最近的一個點相同。在回歸中,一個測試集點的因變量的預測值應該等于離它最近的k個訓練集點相應的因變量值的平均。至于k的選擇,一般都用測試集的交叉驗證來進行。對這個方法有許多改進的研究,這里不贅述。我們看一個數(shù)值例子。例9?10(數(shù)據(jù)radar.txt).這是關于雷達是否被電離層反射的具有351個觀測值的數(shù)據(jù)28。這里自變量有34個,因變量class為分類變量,它取兩個值:一個是的確被電離層反射,標為“好”(good),否則就是“不好”(bad)。我們在這里試圖用最近鄰方法來建立分類模型用那34個自變量預測這個分類變量。我們還是隨機抽取約一半數(shù)據(jù)作為訓練集,而剩下的作為測試集。通過計算得到最后測試分類正確與否的結(jié)果(下表)29。測試集分類結(jié)果預測類別真實類別badgoodbad4427good599思考一下:最近鄰方法是最簡單最直觀的方法。似乎俗語“物以類聚,人以群分”可以描述這個方法。最近鄰方法最常用作法的不是讓最近的k個點簡單地投票,而是加權(quán),即讓更接近的點的投票分量越重。你可以思考一下加權(quán)的方法。§9?4人工神經(jīng)網(wǎng)絡人工神經(jīng)網(wǎng)絡(neuralnetworks)是對自然的神經(jīng)網(wǎng)絡的模仿,它可以有效地解決很復雜的有大量互相相關變量的回歸和分類問題。下面就是一個有兩個自變量(輸入)和一個因變量(輸出)的神經(jīng)網(wǎng)絡的示意圖。左邊代表自變量的兩個節(jié)點(node)形成輸入層(inputlayer),中間三個節(jié)點形成隱藏層(hiddenlayer),最右邊的一個節(jié)點屬于輸出層(outputlayer),代表因變量。這些節(jié)點按照箭頭連接。28VinceSigillito(vgs@),SpacePhysicsGroup,AppliedPhysicsLaboratory,JohnsHopkinsUniversity,JohnsHopkinsRoad,Laurel,MD20723。29在R軟件中,激活軟件包kknn:library(kknn);激活數(shù)據(jù):data(ionosphere);設定隨機種子:set.seed(l);隨機選取測試集:n=nrow(ionosphere);test=sample(l:n,n/2);使用最近鄰方法:a=kknn(class?.,ionosphere[-test,],ionosphere[test,]);查看結(jié)果:table(ionosphere[test,]$class,a$fit)。
在使用神經(jīng)網(wǎng)絡時,在輸入層輸入變量,然后經(jīng)過隱藏層對這些輸入加權(quán)后
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 插紅旗教案反思
- 小學體育隊列隊形說課稿
- 好擔心說課稿
- 青少年如何預防糖尿病
- 成都高爾夫球場租賃合同范本
- 電力公司入駐管理
- 酒店網(wǎng)絡營銷人員勞動合同模板
- 融資風險防范確保企業(yè)資金安全
- 智能家居招投標基本知識介紹
- 國有企業(yè)采購政策制定
- 食品安全管理員任命書范文
- 完整版中華醫(yī)學會瘧疾診療規(guī)范
- 北師大版七年級生物上冊教案(全冊完整版)
- 防腐油漆施工工藝
- 南方S82T操作手冊
- 設備采購安裝工程結(jié)算書
- [精品]臺灣地區(qū)零售藥店的現(xiàn)狀與發(fā)展趨勢
- 焙燒爐煙氣換熱器的設計方案
- 血漿置換及臨床的應用業(yè)內(nèi)特制
- 雨蝶(李翊君)原版正譜鋼琴譜五線譜樂譜.docx
- 綜合實踐活動五年級下冊課件-制作木蜻蜓14張ppt課件
評論
0/150
提交評論