算法梳理之隨機森林

算法梳理之隨機森林

目錄:
一、集成學習概念
二、個體學習器概念
三、 boosting bagging
四、結合策略(平均法,投票法,學習法)
五、隨機森林思想
六、隨機森林的推廣
七、優缺點
八、sklearn參數
九、應用場景

一、集成學習概念

集成學習方法,就是將訓練的學習器集成在一起,原理來源於PAC (Probably Approximately Correct,可能近似正確學習模型)。

在PAC學習模型中,若存在一個多項式級的學習算法來識別一組概念,並且識別正確率很高,那麼這組概念是強可學習的;而如果學習算法識別一組概念的正確率僅比隨機猜測略好,那麼這組概念是弱可學習的。他們提出了弱學習算法與強學習算法的等價性問題,即是否可以將弱學習算法提升成強學習算法。如果兩者等價,那麼在學習概念時,只要找到一個比隨機猜測略好的弱學習算法,就可以將其提升爲強學習算法,而不必直接去找通常情況下很難獲得的強學習算法。

集成學習是指將若干弱分類器組合之後產生一個強分類器。弱分類器(weak learner)指那些分類準確率只稍好於隨機猜測的分類器(error rate < 50%)。Bootstrap,Bagging,Boosting都屬於集成學習方法。
在這裏插入圖片描述
總之就是一句話:集成學習是指通過構建並結合多個學習器來完成學習任務的一種機器學習方法。

二、個體學習器概念

個體學習器通常是用一個現有的學習算法從訓練數據產生,例如C4.5決策樹算法、BP神經網絡算法等。此時集成中只包含同種類型的個體學習器,例如“決策樹集成”中的個體學習器全是決策樹,“神經網絡集成”中就全是神經網絡,這樣的集成是“同質”(homogeneous)的,同質集成中的個體學習器也稱爲“基學習器”(base learner),相應的學習算法稱爲“基學習算法”(base learning algorithm)。有同質就有異質(heterogeneous),若集成包含不同類型的個體學習器,例如同時包含決策樹和神經網絡,那麼這時個體學習器一般不稱爲基學習器,而稱作“組件學習器”(component leaner)或直接稱爲個體學習器。

概括如下:個體學習器是現有的學習算法通過應用訓練數據集進行訓練生成的。

三、 boosting 與 bagging

boosting—串行生成

Boost的含義是增強,Boosting方法就是從弱學習算法開始,在前一個學習器的基礎上反覆學習,得到一系列弱分類器,然後組合弱分類器,得到一個強分類器。Boosting方法在學習過程中通過改變訓練數據的權值分佈,針對不同的數據分佈調用弱學習算法得到一系列弱分類器。
在這裏插入圖片描述
提升的理論意義就是如果一個問題存在弱分類器,則可通過提升的辦法得到強分類器。因此,需要解決的問題有兩個。一個是在每一輪如何改變訓練數據的權值或概率分佈;另一個是如何將弱分類器組合成一個強分類器。

Boosting算法中主要是AdaBoost(Adaptive Boosting,自適應增強算法)。
AdaBoost 的做法是,提高那些被前一輪弱分類器錯誤分類樣本的權值,而降低那些被正確分類樣本的權值。這樣一來,那些沒有得到正確分類的數據,由於其權值的加大而受到後一輪的弱分類器的更大關注;並採取加權多數表決的辦法來完成弱分類器的組合。具體地,加大分類誤差率小的弱分類器權值,使其在表決中起較大的作用,減小分類誤差率大的弱分類器的權值,使其在表決中起較小的作用。
在這裏插入圖片描述

統計學習方法P140:
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

bagging—並行生成

Bagging 是並行式集成學習方法最著名的代表。Bagging 的基本流程是通過自助採樣法 (bootstrap sampling) 得到 T 個含 m 個訓練樣本的採樣集,然後基於每個採樣集訓練出一個基學習器,再將這些基學習器進行結合。如下圖所示:
在這裏插入圖片描述
自助採樣法的含義:給定包含 m 個樣本的數據集,我們先隨機取出一個樣本放入採樣集中,再把該樣本放回初始數據集,使得下次採樣時該樣本仍有可能被選中,這樣,經過 m 次隨機採樣操作,我們得到含 m 個樣本的採樣機,初始訓練集中有的樣本在採樣集裏多次出現,有的則從未出現,初始訓練集中約有 63.2% 的樣本出現在採樣集中。

算法步驟:
1.從數據集S中取樣(放回選樣),總共執行t次
2.針對每一次取樣訓練得到分類模型,最終得到t個模型H1…Ht
3.對未知樣本X分類時,每個模型都得出一個分類結果,得票最高的即爲未知樣本X的分類
4.也可通過得票的平均值用於連續值的預測
在這裏插入圖片描述

四、結合策略(平均法,投票法,學習法)

Th1,h2,...hT假設我們得到的T個弱學習器是{h_1,h_2,...h_T}。

平均法

對於數值類的迴歸預測問題,通常使用的結合策略是平均法,也就是說,對於若干個弱學習器的輸出進行平均得到最終的預測輸出。
最簡單的平均是算術平均,也就是說最終預測是:
H(x)=1T1Thi(x)H(x)=\cfrac{1}{T}\sum_1^Th_i(x)
如果每個個體學習器有一個權重w,則最終預測是:
H(x)=1T1Twihi(x)H(x)=\cfrac{1}{T}\sum_1^Tw_ih_i(x)
wihi:其中wi是個體學習器hi的權重,通常有:
wi0,1Twi=1w_i\geq0, \sum_1^Tw_i=1
一般情況下,在個體學習器性能相差較大時,宜使用加權平均法;而在個體學習器性能相近時,宜使用簡單平均法。

投票法

對分類任務來說,學習器 hi 將從類別標記集合 {c1,c2,⋅⋅⋅,cN} 中預測出一個標記,最常見的結合策略是使用投票法 (voting)。

最簡單的投票法是相對多數投票法,也就是我們常說的少數服從多數,也就是T個弱學習器的對樣本x的預測結果中,數量最多的類別ci爲最終的分類類別。如果不止一個類別獲得最高票,則隨機選擇一個做最終類別。

稍微複雜的投票法是絕對多數投票法,也就是我們常說的要票過半數。在相對多數投票法的基礎上,不光要求獲得最高票,還要求票過半數。否則會拒絕預測。

更加複雜的是加權投票法,和加權平均法一樣,每個弱學習器的分類票數要乘以一個權重,最終將各個類別的加權票數求和,最大的值對應的類別爲最終類別。

學習法 (Stacking)

當訓練數據很多時,一種更爲強大的結合策略是使用“學習法”,即通過另一個學習器來進行結合。Stacking 是學習法的典型代表。這裏我們把個體學習器稱爲初級學習器,用於結合的學習器稱爲次級學習器或元學習器。

五、隨機森林思想

隨機森林(random forest)算法是一種基於樹的模型的算法。此外,還有決策樹(decision trees)和提升樹(boosted trees)。

隨機森林 在以決策樹爲基學習器構建 Bagging 集成的基礎上,進一步在決策樹的訓練過程中引入了隨機屬性選擇。即傳統決策樹在選擇劃分屬性時是在當前結點的屬性集合中選擇一個最優屬性;而在 RF 中,對基決策樹的每個結點,先從該結點的屬性集合中隨機選擇一個包含 k 個屬性的子集,然後再從這個子集中選擇一個最優屬性用於劃分。
隨機性主要體現在兩個方面:
1、訓練每棵樹時,從全部訓練樣本(樣本數爲N)中選取一個可能有重複的大小同樣爲N的數據集進行訓練(即bootstrap取樣)。
2、在每個節點,隨機選取所有特徵的一個子集,用來計算最佳分割方式。

六、隨機森林的推廣

參考博客:https://www.cnblogs.com/pinard/p/6156009.html

由於RF在實際應用中的良好特性,基於RF,有很多變種算法,應用也很廣泛,不光可以用於分類迴歸,還可以用於特徵轉換,異常點檢測等。下面對於這些RF家族的算法中有代表性的做一個總結。

1、extra trees
在這裏插入圖片描述
2、Isolation Forest(以下簡稱IForest)是一種異常點檢測的方法。它也使用了類似於RF的方法來檢測異常點。
詳情參考:https://zhuanlan.zhihu.com/p/25040651

3、Totally Random Trees Embedding(以下簡稱 TRTE),它是一種非監督學習的數據轉化方法。它將低維的數據集映射到高維,從而讓映射到高維的數據更好的運用於分類迴歸模型。我們知道,在支持向量機中運用了核方法來將低維的數據集映射到高維,此處TRTE提供了另外一種方法。

TRTE在數據轉化的過程也使用了類似於RF的方法,建立T個決策樹來擬合數據。當決策樹建立完畢以後,數據集裏的每個數據在T個決策樹中葉子節點的位置也定下來了。比如我們有3顆決策樹,每個決策樹有5個葉子節點,某個數據特徵xx劃分到第一個決策樹的第2個葉子節點,第二個決策樹的第3個葉子節點,第三個決策樹的第5個葉子節點。則x映射後的特徵編碼爲(0,1,0,0,0, 0,0,1,0,0, 0,0,0,0,1), 有15維的高維特徵。這裏特徵維度之間加上空格是爲了強調三顆決策樹各自的子編碼。

映射到高維特徵後,可以繼續使用監督學習的各種分類迴歸算法了。

七、優缺點

隨機森林的優點:

1、具有極高的準確率
2、隨機性的引入,使得隨機森林不容易過擬合
3、隨機性的引入,使得隨機森林有很好的抗噪聲能力
4、能處理很高維度的數據,並且不用做特徵選擇
5、既能處理離散型數據,也能處理連續型數據,數據集無需規範化
6、訓練速度快,可以得到變量重要性排序
7、容易實現並行化

隨機森林的缺點:

1、當隨機森林中的決策樹個數很多時,訓練時需要的空間和時間會較大
2、隨機森林模型還有許多不好解釋的地方,有點算個黑盒模型
與上面介紹的Bagging過程相似,隨機森林的構建過程大致如下:

八、sklearn參數

參考博客:https://www.cnblogs.com/pinard/p/6160412.html
官方鏈接:https://scikit-learn.org/dev/modules/generated/sklearn.ensemble.RandomForestClassifier.html#sklearn.ensemble.RandomForestClassifier

在scikit-learn中,RandomForest的分類類是RandomForestClassifier,迴歸類是RandomForestRegressor,需要調參的參數包括兩部分,第一部分是Bagging框架的參數,第二部分是CART決策樹的參數。

classsklearn.ensemble.RandomForestClassifier(n_estimators=10, 
criterion='gini', max_depth=None,min_samples_split=2, 
min_samples_leaf=1, min_weight_fraction_leaf=0.0,
max_features='auto', max_leaf_nodes=None, 
min_impurity_split=1e-07,bootstrap=True, oob_score=False, 
n_jobs=1, random_state=None, verbose=0,warm_start=False, 
class_weight=None)

RF框架參數

RF重要的Bagging框架的參數,由於RandomForestClassifier和RandomForestRegressor參數絕大部分相同,這裏會將它們一起講,不同點會指出。
1、n_estimators: 也就是弱學習器的最大迭代次數,或者說最大的弱學習器的個數。一般來說n_estimators太小,容易欠擬合,n_estimators太大,計算量會太大,並且n_estimators到一定的數量後,再增大n_estimators獲得的模型提升會很小,所以一般選擇一個適中的數值。默認是100。

2、oob_score :即是否採用袋外樣本來評估模型的好壞。默認識False。個人推薦設置爲True,因爲袋外分數反應了一個模型擬合後的泛化能力。

3、 criterion: 即CART樹做劃分時對特徵的評價標準。分類模型和迴歸模型的損失函數是不一樣的。分類RF對應的CART分類樹默認是基尼係數gini,另一個可選擇的標準是信息增益。迴歸RF對應的CART迴歸樹默認是均方差mse,另一個可以選擇的標準是絕對值差mae。一般來說選擇默認的標準就已經很好的。

從上面可以看出, RF重要的框架參數比較少,主要需要關注的是 n_estimators,即RF最大的決策樹個數。

RF決策樹參數

下面我們再來看RF的決策樹參數,它要調參的參數基本和GBDT相同,如下:

1、RF劃分時考慮的最大特徵數max_features: 可以使用很多種類型的值,默認是"auto",意味着劃分時最多考慮N−−√個特徵;如果是"log2"意味着劃分時最多考慮log2N個特徵;如果是"sqrt"或者"auto"意味着劃分時最多考慮N−−√個特徵。如果是整數,代表考慮的特徵絕對數。如果是浮點數,代表考慮特徵百分比,即考慮(百分比xN)取整後的特徵數。其中N爲樣本總特徵數。一般我們用默認的"auto"就可以了,如果特徵數非常多,我們可以靈活使用剛纔描述的其他取值來控制劃分時考慮的最大特徵數,以控制決策樹的生成時間。

2、決策樹最大深度max_depth: 默認可以不輸入,如果不輸入的話,決策樹在建立子樹的時候不會限制子樹的深度。一般來說,數據少或者特徵少的時候可以不管這個值。如果模型樣本量多,特徵也多的情況下,推薦限制這個最大深度,具體的取值取決於數據的分佈。常用的可以取值10-100之間。

3、內部節點再劃分所需最小樣本數min_samples_split: 這個值限制了子樹繼續劃分的條件,如果某節點的樣本數少於min_samples_split,則不會繼續再嘗試選擇最優特徵來進行劃分。 默認是2.如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。

4、葉子節點最少樣本數min_samples_leaf: 這個值限制了葉子節點最少的樣本數,如果某葉子節點數目小於樣本數,則會和兄弟節點一起被剪枝。 默認是1,可以輸入最少的樣本數的整數,或者最少樣本數佔樣本總數的百分比。如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。

5、葉子節點最小的樣本權重和min_weight_fraction_leaf:這個值限制了葉子節點所有樣本權重和的最小值,如果小於這個值,則會和兄弟節點一起被剪枝。 默認是0,就是不考慮權重問題。一般來說,如果我們有較多樣本有缺失值,或者分類樹樣本的分佈類別偏差很大,就會引入樣本權重,這時我們就要注意這個值了。

6、 最大葉子節點數max_leaf_nodes: 通過限制最大葉子節點數,可以防止過擬合,默認是"None”,即不限制最大的葉子節點數。如果加了限制,算法會建立在最大葉子節點數內最優的決策樹。如果特徵不多,可以不考慮這個值,但是如果特徵分成多的話,可以加以限制,具體的值可以通過交叉驗證得到。

7、 節點劃分最小不純度min_impurity_split: 這個值限制了決策樹的增長,如果某節點的不純度(基於基尼係數,均方差)小於這個閾值,則該節點不再生成子節點。即爲葉子節點 。一般不推薦改動默認值1e-7。

上面決策樹參數中最重要的包括最大特徵數max_features, 最大深度max_depth, 內部節點再劃分所需最小樣本數min_samples_split和葉子節點最少樣本數min_samples_leaf。

九、應用場景

具體的應用場景還在學習中,這裏附一片應用論文地址:http://journals.nwpu.edu.cn/xbgydxxb/FileUp/HTML/20150628.htm
看該論文主要介紹隨機森林(RF)在流式大數據方面的應用。

參考文章:
https://blog.csdn.net/li_dongxuan/article/details/55667795
統計學習方法 P138~151
https://www.cnblogs.com/pinard/p/6131423.html
https://segmentfault.com/a/1190000016466914#articleHeader1
https://blog.csdn.net/qq547276542/article/details/78304454

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章