
01.隨機森林概述
隨機森林=決策樹+bagging,隨機森林是一種比較新的機器學(xué)習(xí)算法,是集成算法的一種。上世紀八十年代Breiman等人發(fā)明分類樹算法,通過反復(fù)二分數(shù)據(jù)進行分類或回歸,計算量大大降低,2001年Breiman把分類樹組合成隨機森林,即在樣本和特征的使用上進行隨機化,生成很多分類樹,再匯總分類樹結(jié)果。隨機森林在運算量沒有顯著提高前提下提高了預(yù)測精度,隨機森林對多元共線性不敏感,結(jié)果對缺失數(shù)據(jù)和非平衡數(shù)據(jù)比較穩(wěn)健,可以很好地預(yù)測多達幾千個解釋變量的作用,被譽為當前最好算法之一。
隨機森林是集成分類算法的一種,隨機森林是用隨機的方式建立一個森林,森林由很多的決策樹組成,且每一棵決策樹之間是沒有關(guān)聯(lián)的。得到隨機森林模型后,當對新的樣本進行預(yù)測時,隨機森林中的每一棵決策樹分別進行判斷,bagging集成策略比較簡單,對于分類問題通常采用簡單的投票法,得到最多票數(shù)的類別為最終模型輸出。對于回歸問題通常使用平均法,T個弱分類器得到的回歸結(jié)果進行算術(shù)平均即為最終模型輸出。
02.相關(guān)基礎(chǔ)知識
1. 集成學(xué)習(xí)概述集成學(xué)習(xí)集合多個機器學(xué)習(xí)算法來完成學(xué)習(xí)任務(wù)。即“博采眾長”,集成學(xué)習(xí)可用于分類問題集成、回歸問題集成、特征選取集成、異常點檢測集成等。從下圖可以看出集成學(xué)習(xí)通過訓(xùn)練集訓(xùn)練出若干個個體學(xué)習(xí)器,通過一定的結(jié)合策略,可以最終形成一個強學(xué)習(xí)器,達到博采眾長的目的。

據(jù)此可以看出,集成學(xué)習(xí)要解決的主要問題有兩個,第一如何得到個體學(xué)習(xí)器;第二如何選擇一種結(jié)合策略。
2. 集成學(xué)習(xí)中的個體學(xué)習(xí)器得到若干個個體學(xué)習(xí)器,有兩種方式。第一種是所有的個體學(xué)習(xí)器都是同一類的,或者說是同質(zhì)的,即所有的個體學(xué)習(xí)器都是同一種機器學(xué)習(xí)算法,比如都是決策樹或者神經(jīng)網(wǎng)絡(luò)個體學(xué)習(xí)器。第二種是所有的個體學(xué)習(xí)器不全是同一類學(xué)習(xí)器,如里面包含支持向量機、邏輯回歸、樸素貝葉斯等個體學(xué)習(xí)器,再通過某種策略來確定最終的分類強學(xué)習(xí)器。目前來看,同質(zhì)個體學(xué)習(xí)器應(yīng)用廣泛。一般說的集成學(xué)習(xí)算法多指同質(zhì)個體學(xué)習(xí)器。而同質(zhì)個體學(xué)習(xí)器使用最多的模型是神經(jīng)網(wǎng)絡(luò)和決策樹。同質(zhì)個體學(xué)習(xí)器按照個體學(xué)習(xí)器之間是否存在依賴關(guān)系分為兩類:第一類是個體學(xué)習(xí)器之間不存在強依賴關(guān)系,一系列個體學(xué)習(xí)器并行生成,代表算法是bagging和隨機森林(Random Forest)系列模型。第二類是個體學(xué)習(xí)器之間存在強依賴關(guān)系,一系列個體學(xué)習(xí)器都需要串行生成,代表算法boosting算法。
3. 集成學(xué)習(xí)之baggingBagging的算法原理用一張圖概括如下:

從上圖可以看出,bagging的個體弱學(xué)習(xí)器的訓(xùn)練集是通過隨機采樣得到的,通過T次隨機采樣,可以得到T個采樣集,可以分別獨立的訓(xùn)練出T個弱學(xué)習(xí)器,再對這T個弱學(xué)習(xí)器通過集合策略得到最終的強學(xué)習(xí)器。這里的隨機采樣,一般采用的是自助采樣法,即有放回地隨機采樣。這樣每次采樣集和原始訓(xùn)練集不同,和其他采樣集也不同,這樣便得到多個不同的弱學(xué)習(xí)器。隨機森林可以理解成是bagging的一個特化進階版,所謂的特化是因為隨機森林的弱學(xué)習(xí)器都是決策樹。所謂的進階是隨機森林在bagging的樣本隨機采樣基礎(chǔ)上,又加了特征的隨機選擇,其基本思想和bagging一致。
4. 集成學(xué)習(xí)及結(jié)合策略集成學(xué)習(xí)結(jié)合策略主要有三類:(1)對于數(shù)值類的回歸問題,常采用平均法的集合策略,即對所有弱學(xué)習(xí)器的輸出結(jié)果求平均作為強學(xué)習(xí)器的輸出。(2)對于分類問題,常采用的集合策略是投票法,最簡單的投票法是相對多數(shù)投票法,也就是少數(shù)服從多數(shù),也就是T個弱學(xué)習(xí)器對樣本x的預(yù)測結(jié)果中,數(shù)量最多的類為最終的分類類別,如果不止一個類別獲得最高票,則隨機選擇一個作為最終類別;稍復(fù)雜的投票方法是絕對多數(shù)投票法,也就是要票數(shù)過半,在相對多數(shù)投票的基礎(chǔ)上,不僅要最高票,還要票數(shù)過半,否則會沒有預(yù)測結(jié)果;更復(fù)雜的是加權(quán)投票法,和加權(quán)平均法一樣,每一個弱學(xué)習(xí)器的分類票數(shù)乘以一個權(quán)重,最終將各個類別的加權(quán)票數(shù)求和,最大的值對應(yīng)的類別即為最終預(yù)測類別。(3)另外一種更加復(fù)雜的集合策略是學(xué)習(xí)法,代表方法是stacking,當使用stacking的結(jié)合策略時,我們不是對弱學(xué)習(xí)器的結(jié)果做簡單的邏輯處理,而是再加上一層學(xué)習(xí)器,即將弱學(xué)習(xí)器的學(xué)習(xí)結(jié)果作為所加的一層學(xué)習(xí)器的輸入,重新訓(xùn)練一個學(xué)習(xí)器來得到最終結(jié)果,這種情況下,我們將弱學(xué)習(xí)器成為初級學(xué)習(xí)器,把用于結(jié)合的學(xué)習(xí)器作為次級學(xué)習(xí)器,對于測試集,首先通過初級學(xué)習(xí)器預(yù)測一次,得到次級學(xué)習(xí)器的輸入樣本,再用次級學(xué)習(xí)器預(yù)測一次,得到最終的預(yù)測結(jié)果。
5. 決策樹(Decision Tree)決策樹是一種基本的分類器,主要工作原理就是根據(jù)特征對數(shù)據(jù)集進行劃分,最后把數(shù)據(jù)貼上兩類不同的標簽。構(gòu)建好的決策樹呈樹狀結(jié)構(gòu),可以理解成是if-then規(guī)則的集合,主要優(yōu)點是模型具有較好的可讀性,分類速度快。常見的決策樹算法有ID3、C4.5、和CART。下圖為決策樹模型的一個典型案例,根據(jù)西瓜的各種特征去判斷西瓜是好瓜還是壞瓜,從根節(jié)點開始一級一級地進行判斷決策,直到葉節(jié)點,也即判斷出其是好瓜還是壞瓜。決策樹學(xué)習(xí)的是自頂向下的遞歸方法,其基本思想是以信息熵為度量構(gòu)造一顆熵值下降最快的樹,到葉子節(jié)點處的熵值為零,此時每個葉節(jié)點的樣本都屬于同一類。

03.隨機森林介紹1. 隨機森林原理
Bagging+decision trees,我們便可得到隨機森林。隨機森林對bagging只做了小的改動,基學(xué)習(xí)器的多樣性不僅來自對初始訓(xùn)練集有放回的采樣,還有對樣本屬性的隨機無放回的抽樣。將CART決策樹作為弱分類器,然后采用bagging技術(shù)訓(xùn)練一些小決策樹,最后將這些小決策樹集合起來,便可得到一個森林模(隨機森林)。
在對預(yù)測輸出進行集合時,通常對分類任務(wù)使用簡單投票法,對回歸任務(wù)采用簡單平均法。
2. 隨機森林的構(gòu)建過程1) 在生成每棵決策樹時,隨機有放回地從訓(xùn)練集中抽取N個訓(xùn)練樣本,作為該樹的訓(xùn)練集(每棵樹的訓(xùn)練集都是不同的,而且里面包含重復(fù)的訓(xùn)練樣本)。2) 若特征空間共有D個特征,則在每一輪生成決策樹的過程中,從D個特征中隨機選擇其中的d個特征(d<D)組成一個新的特征集,通過使用新的特征集來生成決策樹,d的選取要是最優(yōu)的,通常取。通常減小特征選擇的個數(shù)d,各決策樹的相關(guān)性和分類能力也會相應(yīng)降低,增大d,兩者也都會隨之增大。所以如何選擇最優(yōu)的d是一個關(guān)鍵的問題,也是隨機森林的一個重要參數(shù)。3) 重復(fù)以上兩步s次,即建立s個決策樹。4) 這s個決策樹形成隨機森林,通過投票表決結(jié)果,得到最終的輸出結(jié)果。隨機森林包括兩個隨機的層面:樣本隨機、特征選擇隨機。
3. 隨機森林的評價指標上面我們提到,構(gòu)建隨機森林的一個關(guān)鍵問題是如何選擇最優(yōu)的d,要解決這個問題主要依據(jù)計算袋外誤差率obb error(out-of-bag error)。隨機森林有一個重要的優(yōu)點是:沒有必要對其進行交叉驗證或用一個獨立的測試集去獲得誤差的一個無偏估計。其可以在內(nèi)部進行評估,即在生成過程中就對誤差建立了一個無偏估計。在構(gòu)建每個樹時,我們對訓(xùn)練集采用了不同的bootstrap sample(隨機且有放回的采樣)。所以對每棵樹來說,假設(shè)對第k棵樹,大約有1/3的樣本沒有參與第k棵樹的生成,它們稱為第k棵樹的obb樣本。根據(jù)采樣特點我們可以進行obb估計,計算方式如下:1) 對每個樣本,計算其作為obb樣本時決策樹對它的分類情況。2) 然后以簡單多數(shù)投票作為樣本的分類結(jié)果。3) 最后用誤分個數(shù)占樣本總數(shù)的比率,作為隨機森林的obb的誤分率。obb誤分率是隨機森林泛化誤差的一個無偏估計,它的結(jié)果近似于需要大量計算的k折交叉驗證。對隨機森林而言,袋外誤差率等于測試集的誤差率。測試集上表現(xiàn)好,說明泛化能力強,反之說明泛化能力弱。
4. 隨機森林分類模型案例 本案例是使用sklearn里的鳶尾花數(shù)據(jù)集,根據(jù)鳶尾花的不同特征組合構(gòu)建隨機森林模型,并對鳶尾花的進行分類。代碼如下圖:

不同兩兩特征組合對鳶尾花分類的準確率
隨機森林對鳶尾花數(shù)據(jù)的兩特征組合的分類結(jié)果
由上圖可知,所有鳶尾花被分為三類,不同兩特征組合的分類準確率不同。隨機森林算法在隨機決策樹生成過程采用的Boostrap,所以在一棵樹的生成過程并不會使用所有的樣本,未使用的樣本就叫(Out_of_bag)袋外樣本(oob 數(shù)據(jù)集),通過袋外樣本,可以評估這個樹的準確度,其他子樹葉按這個原理評估,最后可以取平均值。oob_score = True:表示使用 oob 數(shù)據(jù)集作為測試數(shù)據(jù)集,估算算法的泛化能力;oob_score 默認為 False,不使用 oob 數(shù)據(jù)集作為測試數(shù)據(jù)集。