【機器學習】集成學習的概念與隨機森林算法梳理

1. 集成學習概念

“三個臭皮匠,頂個諸葛亮”思想
“弱可學習”等價於“強可學習” —— Schapire
可以理解爲就是指採用多個分類器對數據集進行預測,從而提高整體分類器的泛化能力。 
集成學習有兩個流派
一個是boosting派系,它的特點是各個弱學習器之間有依賴關係。
另一種是bagging流派,它的特點是各個弱學習器之間沒有依賴關係,可以並行擬合。

2. 個體學習器概念

又稱“基學習器”,感覺只有在集成學習裏提到,可以是決策樹、神經網絡、樸素貝葉斯法、支持向量機等等
單個學習器可能效果並不好,所以需要集成學習

3. boosting 

可將弱學習器提升爲強學習器的算法
前一個學習器學習錯誤的樣本在下次學習中將會得到“特殊關照”,擬合殘差思想
代表性算法:Adaboost
以m個樣本的二分類爲例,初始每個樣本的權重W_mi爲1/m
訓練一個基學習器T0,計算錯誤率err = S W_mi*[G(xi)≠yi]
計算該學習器的權重W_T0 = 1/2 * (ln(1-err)/err)
重新計算每個樣本的權重:分類對的W_mi(新一輪) = W_mi(上一輪)*exp(-W_T0)/sum_W 
重新計算每個樣本的權重:分類錯的W_mi(新一輪) = W_mi(上一輪)*exp(W_T0)/sum_W
再根據新的訓練集訓練基學習器T1
如此循環

4. bagging

又稱裝袋算法,算法思想是訓練多個“好而不同”的基學習器進行投票決定該樣本屬於哪個類(迴歸的話,輸出各學習器輸出的平均值)
假如有m個樣本,有放回選取m個集合D,每次不被選到的概率爲(1-1/m),當m趨於無窮時候,不被選到的概率爲1/e,約36.8%
不被稱爲袋外數據,可以用於交叉驗證
用集合D訓練基學習器T0
如此反覆,得到N個基學習器,集成爲強學習器,通過投票、平均法(迴歸)輸出最終結果

5. 結合策略(平均法,投票法,學習法)

平均法:
簡單平均、加權平均
個體學習器性能相差較大時宜使用加權平均法,相近用簡單平均法。加權平均容易過擬合
投票法:
相對多數投票法:輸出得票最多的預測
絕對多數投票法:得票最多超過50%的輸出,否則拒絕預測
加權投票法:給每個分類器預測結果一個權重再求和,最大的輸出

6. 隨機森林思想

隨機森林就是通過集成學習的思想將多棵樹集成的一種算法,它的基本單元是決策樹,而它的本質屬於集成學習方法。隨機森林的名稱中有兩個關鍵詞,一個是“隨機”,一個就是“森林”。“森林”我們很好理解,一棵叫做樹,那麼成百上千棵就可以叫做森林了,這也是隨機森林的主要思想--集成思想的體現。然而,bagging的代價是不用單棵決策樹來做預測,具體哪個變量起到重要作用變得未知,所以bagging改進了預測準確率但損失瞭解釋性。

“森林”容易理解,就是由很多“樹”組成,那麼“隨機”體現在什麼方面呢?

(1)訓練集隨機的選取:如果訓練集大小爲N,對於每棵樹而言,隨機且有放回地從訓練集中的抽取N個訓練樣本(這種採樣方式稱爲bootstrap sample方法),作爲該樹的訓練集;這樣保證了每顆樹的訓練集都不同,從而構建的樹也不同

(2)特徵的隨機選取:從M個特徵中選取m個特徵,這樣可以避免某個特徵與分類結果具有強相關性,如果所有特徵都選取,那麼所有的樹都會很相似,那樣就不夠“隨機”了

另外還有一點,隨機森林法構建樹的時候不需要做額外的剪枝操作。個人理解:因爲前兩個“隨機”操作,以及多顆樹的建立,已經避免了過擬合現象,所以這種情況下,我們只需要讓每棵樹在它自己的領域內做到最好就可以了。

隨機森林算法的預測性能與兩個因素有關:

(1)森林中任意兩棵樹的相關性,相關性越強,則總體性能越容易差

(2)森林中每棵樹的預測性能,每棵樹越好,則總體性能越好

其實可以理解爲要求“好而不同”。然而特徵數m的選擇越大,則相關性與個體性能都比較好,特徵數m選擇越小,則相關性與個體性能都更小,所以m的選擇影響着隨機森林的預測性能。


7. 隨機森林的推廣

(1)extra trees:樣本集不抽樣,直接使用原樣本集。分裂的時候隨機選擇特徵,相較於RF,每棵樹的規模更大,但是進一步減小了方差,增加了bias

(2)Totally Random Trees Embedding:根據擁有某特徵的樣本x在不同樹的葉子結點號,給數據升維


8. 優缺點

優點:

    (1) 訓練可以高度並行化,對於大數據時代的大樣本訓練速度有優勢。

 (2) 由於可以隨機選擇決策樹節點劃分特徵,這樣在樣本特徵維度很高的時候,仍然能高效的訓練模型。

 (3) 在訓練後,可以給出各個特徵對於輸出的重要性

 (4) 由於採用了隨機採樣,訓練出的模型的方差小,泛化能力強。

 (5) 相對於Boosting系列的Adaboost和GBDT, RF實現比較簡單。

 (6) 對部分特徵缺失不敏感。

缺點:

    (1)隨機森林已經被證明在某些噪音較大的分類或迴歸問題上會過擬合

    (2)對小樣本數據或者低維(特徵少)數據可能不能產生最好的分類

9. sklearn參數

1.框架參數

    首先我們關注於RF的Bagging框架的參數。這裏可以和GBDT對比來學習。在scikit-learn 梯度提升樹(GBDT)調參小結中我們對GBDT的框架參數做了介紹。GBDT的框架參數比較多,重要的有最大迭代器個數,步長和子採樣比例,調參起來比較費力。但是RF則比較簡單,這是因爲bagging框架裏的各個弱學習器之間是沒有依賴關係的,這減小的調參的難度。換句話說,達到同樣的調參效果,RF調參時間要比GBDT少一些。

    下面我來看看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最大的決策樹個數。

2.RF決策樹參數

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

    1) RF劃分時考慮的最大特徵數max_features: 可以使用很多種類型的值,默認是"auto",意味着劃分時最多考慮N−−√N個特徵;如果是"log2"意味着劃分時最多考慮log2Nlog2N個特徵;如果是"sqrt"或者"auto"意味着劃分時最多考慮N−−√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

這部分轉自參考【5】


10.應用場景

數據維度不是很高(也不能太低..畢竟要隨機抽取特徵),而對準確性有較高要求時。

因爲不需要很多參數調整就可以達到不錯的效果,基本上不知道用什麼方法的時候都可以先試一下隨機森林。

參考

【1】李航,統計學習方法

【2】https://www.cnblogs.com/maybe2030/p/4585705.html

【3】https://www.jianshu.com/p/a779f0686acc

【4】https://www.cnblogs.com/pinard/p/6156009.html

【5】https://blog.csdn.net/nowfuture/article/details/81745177

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