01.隨機(jī)森林概述
隨機(jī)森林=決策樹+bagging,隨機(jī)森林是一種比較新的機(jī)器學(xué)習(xí)算法,是集成算法的一種。上世紀(jì)八十年代Breiman等人發(fā)明分類樹算法,通過(guò)反復(fù)二分?jǐn)?shù)據(jù)進(jìn)行分類或回歸,計(jì)算量大大降低,2001年Breiman把分類樹組合成隨機(jī)森林,即在樣本和特征的使用上進(jìn)行隨機(jī)化,生成很多分類樹,再匯總分類樹結(jié)果。隨機(jī)森林在運(yùn)算量沒(méi)有顯著提高前提下提高了預(yù)測(cè)精度,隨機(jī)森林對(duì)多元共線性不敏感,結(jié)果對(duì)缺失數(shù)據(jù)和非平衡數(shù)據(jù)比較穩(wěn)健,可以很好地預(yù)測(cè)多達(dá)幾千個(gè)解釋變量的作用,被譽(yù)為當(dāng)前最好算法之一。
隨機(jī)森林是集成分類算法的一種,隨機(jī)森林是用隨機(jī)的方式建立一個(gè)森林,森林由很多的決策樹組成,且每一棵決策樹之間是沒(méi)有關(guān)聯(lián)的。得到隨機(jī)森林模型后,當(dāng)對(duì)新的樣本進(jìn)行預(yù)測(cè)時(shí),隨機(jī)森林中的每一棵決策樹分別進(jìn)行判斷,bagging集成策略比較簡(jiǎn)單,對(duì)于分類問(wèn)題通常采用簡(jiǎn)單的投票法,得到最多票數(shù)的類別為最終模型輸出。對(duì)于回歸問(wèn)題通常使用平均法,T個(gè)弱分類器得到的回歸結(jié)果進(jìn)行算術(shù)平均即為最終模型輸出。
02.相關(guān)基礎(chǔ)知識(shí)
1. 集成學(xué)習(xí)概述集成學(xué)習(xí)集合多個(gè)機(jī)器學(xué)習(xí)算法來(lái)完成學(xué)習(xí)任務(wù)。即“博采眾長(zhǎng)”,集成學(xué)習(xí)可用于分類問(wèn)題集成、回歸問(wèn)題集成、特征選取集成、異常點(diǎn)檢測(cè)集成等。從下圖可以看出集成學(xué)習(xí)通過(guò)訓(xùn)練集訓(xùn)練出若干個(gè)個(gè)體學(xué)習(xí)器,通過(guò)一定的結(jié)合策略,可以最終形成一個(gè)強(qiáng)學(xué)習(xí)器,達(dá)到博采眾長(zhǎng)的目的。
據(jù)此可以看出,集成學(xué)習(xí)要解決的主要問(wèn)題有兩個(gè),第一如何得到個(gè)體學(xué)習(xí)器;第二如何選擇一種結(jié)合策略。
2. 集成學(xué)習(xí)中的個(gè)體學(xué)習(xí)器得到若干個(gè)個(gè)體學(xué)習(xí)器,有兩種方式。第一種是所有的個(gè)體學(xué)習(xí)器都是同一類的,或者說(shuō)是同質(zhì)的,即所有的個(gè)體學(xué)習(xí)器都是同一種機(jī)器學(xué)習(xí)算法,比如都是決策樹或者神經(jīng)網(wǎng)絡(luò)個(gè)體學(xué)習(xí)器。第二種是所有的個(gè)體學(xué)習(xí)器不全是同一類學(xué)習(xí)器,如里面包含支持向量機(jī)、邏輯回歸、樸素貝葉斯等個(gè)體學(xué)習(xí)器,再通過(guò)某種策略來(lái)確定最終的分類強(qiáng)學(xué)習(xí)器。目前來(lái)看,同質(zhì)個(gè)體學(xué)習(xí)器應(yīng)用廣泛。一般說(shuō)的集成學(xué)習(xí)算法多指同質(zhì)個(gè)體學(xué)習(xí)器。而同質(zhì)個(gè)體學(xué)習(xí)器使用最多的模型是神經(jīng)網(wǎng)絡(luò)和決策樹。同質(zhì)個(gè)體學(xué)習(xí)器按照個(gè)體學(xué)習(xí)器之間是否存在依賴關(guān)系分為兩類:第一類是個(gè)體學(xué)習(xí)器之間不存在強(qiáng)依賴關(guān)系,一系列個(gè)體學(xué)習(xí)器并行生成,代表算法是bagging和隨機(jī)森林(Random Forest)系列模型。第二類是個(gè)體學(xué)習(xí)器之間存在強(qiáng)依賴關(guān)系,一系列個(gè)體學(xué)習(xí)器都需要串行生成,代表算法boosting算法。
3. 集成學(xué)習(xí)之baggingBagging的算法原理用一張圖概括如下:
從上圖可以看出,bagging的個(gè)體弱學(xué)習(xí)器的訓(xùn)練集是通過(guò)隨機(jī)采樣得到的,通過(guò)T次隨機(jī)采樣,可以得到T個(gè)采樣集,可以分別獨(dú)立的訓(xùn)練出T個(gè)弱學(xué)習(xí)器,再對(duì)這T個(gè)弱學(xué)習(xí)器通過(guò)集合策略得到最終的強(qiáng)學(xué)習(xí)器。這里的隨機(jī)采樣,一般采用的是自助采樣法,即有放回地隨機(jī)采樣。這樣每次采樣集和原始訓(xùn)練集不同,和其他采樣集也不同,這樣便得到多個(gè)不同的弱學(xué)習(xí)器。隨機(jī)森林可以理解成是bagging的一個(gè)特化進(jìn)階版,所謂的特化是因?yàn)殡S機(jī)森林的弱學(xué)習(xí)器都是決策樹。所謂的進(jìn)階是隨機(jī)森林在bagging的樣本隨機(jī)采樣基礎(chǔ)上,又加了特征的隨機(jī)選擇,其基本思想和bagging一致。
4. 集成學(xué)習(xí)及結(jié)合策略集成學(xué)習(xí)結(jié)合策略主要有三類:(1)對(duì)于數(shù)值類的回歸問(wèn)題,常采用平均法的集合策略,即對(duì)所有弱學(xué)習(xí)器的輸出結(jié)果求平均作為強(qiáng)學(xué)習(xí)器的輸出。(2)對(duì)于分類問(wèn)題,常采用的集合策略是投票法,最簡(jiǎn)單的投票法是相對(duì)多數(shù)投票法,也就是少數(shù)服從多數(shù),也就是T個(gè)弱學(xué)習(xí)器對(duì)樣本x的預(yù)測(cè)結(jié)果中,數(shù)量最多的類為最終的分類類別,如果不止一個(gè)類別獲得最高票,則隨機(jī)選擇一個(gè)作為最終類別;稍復(fù)雜的投票方法是絕對(duì)多數(shù)投票法,也就是要票數(shù)過(guò)半,在相對(duì)多數(shù)投票的基礎(chǔ)上,不僅要最高票,還要票數(shù)過(guò)半,否則會(huì)沒(méi)有預(yù)測(cè)結(jié)果;更復(fù)雜的是加權(quán)投票法,和加權(quán)平均法一樣,每一個(gè)弱學(xué)習(xí)器的分類票數(shù)乘以一個(gè)權(quán)重,最終將各個(gè)類別的加權(quán)票數(shù)求和,最大的值對(duì)應(yīng)的類別即為最終預(yù)測(cè)類別。(3)另外一種更加復(fù)雜的集合策略是學(xué)習(xí)法,代表方法是stacking,當(dāng)使用stacking的結(jié)合策略時(shí),我們不是對(duì)弱學(xué)習(xí)器的結(jié)果做簡(jiǎn)單的邏輯處理,而是再加上一層學(xué)習(xí)器,即將弱學(xué)習(xí)器的學(xué)習(xí)結(jié)果作為所加的一層學(xué)習(xí)器的輸入,重新訓(xùn)練一個(gè)學(xué)習(xí)器來(lái)得到最終結(jié)果,這種情況下,我們將弱學(xué)習(xí)器成為初級(jí)學(xué)習(xí)器,把用于結(jié)合的學(xué)習(xí)器作為次級(jí)學(xué)習(xí)器,對(duì)于測(cè)試集,首先通過(guò)初級(jí)學(xué)習(xí)器預(yù)測(cè)一次,得到次級(jí)學(xué)習(xí)器的輸入樣本,再用次級(jí)學(xué)習(xí)器預(yù)測(cè)一次,得到最終的預(yù)測(cè)結(jié)果。
5. 決策樹(Decision Tree)決策樹是一種基本的分類器,主要工作原理就是根據(jù)特征對(duì)數(shù)據(jù)集進(jìn)行劃分,最后把數(shù)據(jù)貼上兩類不同的標(biāo)簽。構(gòu)建好的決策樹呈樹狀結(jié)構(gòu),可以理解成是if-then規(guī)則的集合,主要優(yōu)點(diǎn)是模型具有較好的可讀性,分類速度快。常見(jiàn)的決策樹算法有ID3、C4.5、和CART。下圖為決策樹模型的一個(gè)典型案例,根據(jù)西瓜的各種特征去判斷西瓜是好瓜還是壞瓜,從根節(jié)點(diǎn)開始一級(jí)一級(jí)地進(jìn)行判斷決策,直到葉節(jié)點(diǎn),也即判斷出其是好瓜還是壞瓜。決策樹學(xué)習(xí)的是自頂向下的遞歸方法,其基本思想是以信息熵為度量構(gòu)造一顆熵值下降最快的樹,到葉子節(jié)點(diǎn)處的熵值為零,此時(shí)每個(gè)葉節(jié)點(diǎn)的樣本都屬于同一類。
03.隨機(jī)森林介紹1. 隨機(jī)森林原理
Bagging+decision trees,我們便可得到隨機(jī)森林。隨機(jī)森林對(duì)bagging只做了小的改動(dòng),基學(xué)習(xí)器的多樣性不僅來(lái)自對(duì)初始訓(xùn)練集有放回的采樣,還有對(duì)樣本屬性的隨機(jī)無(wú)放回的抽樣。將CART決策樹作為弱分類器,然后采用bagging技術(shù)訓(xùn)練一些小決策樹,最后將這些小決策樹集合起來(lái),便可得到一個(gè)森林模(隨機(jī)森林)。
在對(duì)預(yù)測(cè)輸出進(jìn)行集合時(shí),通常對(duì)分類任務(wù)使用簡(jiǎn)單投票法,對(duì)回歸任務(wù)采用簡(jiǎn)單平均法。
2. 隨機(jī)森林的構(gòu)建過(guò)程1) 在生成每棵決策樹時(shí),隨機(jī)有放回地從訓(xùn)練集中抽取N個(gè)訓(xùn)練樣本,作為該樹的訓(xùn)練集(每棵樹的訓(xùn)練集都是不同的,而且里面包含重復(fù)的訓(xùn)練樣本)。2) 若特征空間共有D個(gè)特征,則在每一輪生成決策樹的過(guò)程中,從D個(gè)特征中隨機(jī)選擇其中的d個(gè)特征(d<D)組成一個(gè)新的特征集,通過(guò)使用新的特征集來(lái)生成決策樹,d的選取要是最優(yōu)的,通常取。通常減小特征選擇的個(gè)數(shù)d,各決策樹的相關(guān)性和分類能力也會(huì)相應(yīng)降低,增大d,兩者也都會(huì)隨之增大。所以如何選擇最優(yōu)的d是一個(gè)關(guān)鍵的問(wèn)題,也是隨機(jī)森林的一個(gè)重要參數(shù)。3) 重復(fù)以上兩步s次,即建立s個(gè)決策樹。4) 這s個(gè)決策樹形成隨機(jī)森林,通過(guò)投票表決結(jié)果,得到最終的輸出結(jié)果。隨機(jī)森林包括兩個(gè)隨機(jī)的層面:樣本隨機(jī)、特征選擇隨機(jī)。
3. 隨機(jī)森林的評(píng)價(jià)指標(biāo)上面我們提到,構(gòu)建隨機(jī)森林的一個(gè)關(guān)鍵問(wèn)題是如何選擇最優(yōu)的d,要解決這個(gè)問(wèn)題主要依據(jù)計(jì)算袋外誤差率obb error(out-of-bag error)。隨機(jī)森林有一個(gè)重要的優(yōu)點(diǎn)是:沒(méi)有必要對(duì)其進(jìn)行交叉驗(yàn)證或用一個(gè)獨(dú)立的測(cè)試集去獲得誤差的一個(gè)無(wú)偏估計(jì)。其可以在內(nèi)部進(jìn)行評(píng)估,即在生成過(guò)程中就對(duì)誤差建立了一個(gè)無(wú)偏估計(jì)。在構(gòu)建每個(gè)樹時(shí),我們對(duì)訓(xùn)練集采用了不同的bootstrap sample(隨機(jī)且有放回的采樣)。所以對(duì)每棵樹來(lái)說(shuō),假設(shè)對(duì)第k棵樹,大約有1/3的樣本沒(méi)有參與第k棵樹的生成,它們稱為第k棵樹的obb樣本。根據(jù)采樣特點(diǎn)我們可以進(jìn)行obb估計(jì),計(jì)算方式如下:1) 對(duì)每個(gè)樣本,計(jì)算其作為obb樣本時(shí)決策樹對(duì)它的分類情況。2) 然后以簡(jiǎn)單多數(shù)投票作為樣本的分類結(jié)果。3) 最后用誤分個(gè)數(shù)占樣本總數(shù)的比率,作為隨機(jī)森林的obb的誤分率。obb誤分率是隨機(jī)森林泛化誤差的一個(gè)無(wú)偏估計(jì),它的結(jié)果近似于需要大量計(jì)算的k折交叉驗(yàn)證。對(duì)隨機(jī)森林而言,袋外誤差率等于測(cè)試集的誤差率。測(cè)試集上表現(xiàn)好,說(shuō)明泛化能力強(qiáng),反之說(shuō)明泛化能力弱。
4. 隨機(jī)森林分類模型案例 本案例是使用sklearn里的鳶尾花數(shù)據(jù)集,根據(jù)鳶尾花的不同特征組合構(gòu)建隨機(jī)森林模型,并對(duì)鳶尾花的進(jìn)行分類。代碼如下圖:
不同兩兩特征組合對(duì)鳶尾花分類的準(zhǔn)確率
隨機(jī)森林對(duì)鳶尾花數(shù)據(jù)的兩特征組合的分類結(jié)果
由上圖可知,所有鳶尾花被分為三類,不同兩特征組合的分類準(zhǔn)確率不同。隨機(jī)森林算法在隨機(jī)決策樹生成過(guò)程采用的Boostrap,所以在一棵樹的生成過(guò)程并不會(huì)使用所有的樣本,未使用的樣本就叫(Out_of_bag)袋外樣本(oob 數(shù)據(jù)集),通過(guò)袋外樣本,可以評(píng)估這個(gè)樹的準(zhǔn)確度,其他子樹葉按這個(gè)原理評(píng)估,最后可以取平均值。oob_score = True:表示使用 oob 數(shù)據(jù)集作為測(cè)試數(shù)據(jù)集,估算算法的泛化能力;oob_score 默認(rèn)為 False,不使用 oob 數(shù)據(jù)集作為測(cè)試數(shù)據(jù)集。