導航:首頁 > 源碼編譯 > 隨機森林演算法參數解釋及調優

隨機森林演算法參數解釋及調優

發布時間:2023-09-09 01:07:22

㈠ RandomForest隨機森林演算法

https://blog.csdn.net/qq_16633405/article/details/61200502
http://blog.itpub.net/12199764/viewspace-1572056/
https://blog.csdn.net/colourful_sky/article/details/82082854

隨機森林中隨機是核心,通過隨機的選擇樣本、特徵,降低了決策樹之間的相關性。隨機森林中的隨機主要有兩層意思,一是隨機在原始訓練數據中有放回的選取等量的數據作為訓練樣本,二是在建立決策樹時,隨機的選特徵中選取一部分特徵建立決策樹。這兩種隨機使得各個決策樹之間的相關性小,進一步提高模型的准確性。
隨機森林未用到決策樹的剪枝,那怎樣控制模型的過擬合呢?主要通過控制 樹的深度(max_depth),結點停止分裂的最小樣本數(min_size)等參數。隨機森林還可以處理缺失值。

假設訓練集中n個樣本,每個樣本有d個特徵,需要訓練一個包含T棵數的隨機森林,具體的演算法流程如下所示:
1、對於T棵決策樹,分別重復如下操作:a、使用Bootstrap抽樣,從訓練集D獲得大小為n的訓練集D; b、從d個特徵中隨機選取m(m
2、如果是回歸問題,則最後的輸出是 每個樹輸出的均值;
3、如果是分類問題,則根據投票原則,確定最終的類別。
每棵樹的生成都是隨機的,至於隨機選取的特徵數,如何決定隨機選取的特徵數的大小呢,主要有兩種方法,一種是交叉驗證,另外一種的經驗性設置 m= log_2 d +1。

1、分類間隔:分類間隔是指森林中正確分類樣本的決策樹的比例減去錯誤分類的決策樹的比例,通過平均每個樣本的分類間隔得到隨機森林的分類間隔。對於分類間隔,當然是越大越好,大的分類間隔說明模型的分類效果比較穩定,泛化效果好。
2、袋外誤差:對於每棵樹都有一部分樣本而沒有被抽取到,這樣的樣本就被稱為袋外樣本,隨機森林對袋外樣本的預測錯誤率被稱為袋外誤差(Out-Of-Bag Error,OOB)。計算方式如下所示:
(1)對於每個樣本,計算把該樣本作為袋外樣本的分類情況;
(2)以投票的方式確定該樣本的分類結果;
(3)將誤分類樣本個數占總數的比率作為隨機森林的袋外誤差。
3、變數重要程度刻畫:其實變數重要程度刻畫不能算是模型性能評估裡面,因為有的實際應用中需要查看這么多的特徵中到底那一部分特徵是相對重要的特徵,這個時候變數的重要程度的刻畫就顯得尤為重要了。其計算方式主要有一下兩種方式:
(1)通過計算特徵的平均信息增益大小得出;
(2)通過計算每個特徵對模型准確率的影響,通過打亂樣本中某一特徵的特徵值順序,產生新樣本,將新樣本放入建立好的隨機森林模型計算準確率。相對於不重要的特徵,即使打亂了順序也不會對結果產生很大的影響,對於重要的特徵,會對結果產生很大的影響的。

優點
1、對於大部分的數據,它的分類效果比較好。
2、能處理高維特徵,不容易產生過擬合,模型訓練速度比較快,特別是對於大數據而言。
3、在決定類別時,它可以評估變數的重要性。
4、對數據集的適應能力強:既能處理離散型數據,也能處理連續型數據,數據集無需規范化。
缺點
1、隨機森林容易產生過擬合,特別是在數據集相對小或者是低維數據集的時候。
2、 計算速度比單個的決策樹慢。
3、 當我們需要推斷超出范圍的獨立變數或非獨立變數,隨機森林做得並不好。

分類問題

回歸問題

常用方法 :參考 https://blog.csdn.net/w952470866/article/details/78987265
predict_proba(x):給出帶有概率值的結果。每個點在所有label(類別)的概率和為1。
predict(x):預測X的結果。內部還是調用的predict_proba(),根據概率的結果看哪個類型的預測值最高就是哪個類型。
predict_log_proba(x):和predict_proba基本上一樣,只是把結果給做了log()處理。
fit(X, y, sample_weight=None): 從訓練數據集(X,y)上建立一個決策樹森林。x為訓練樣本,y為目標值(分類中的類標簽,回歸中的實數)。
參數
和GBDT對比,GBDT的框架參數比較多,重要的有最大迭代器個數,步長和子采樣比例,調參起來比較費力。但是RandomForest則比較簡單,這是因為bagging框架里的各個弱學習器之間是沒有依賴關系的,這減小的調參的難度。換句話說,達到同樣的調參效果,RandomForest調參時間要比GBDT少一些。
Bagging框架參數
n_estimators:最大的弱學習器個數(建立隨機森林分類器(樹)的個數)。太小容易欠擬合,太大又容易過擬合,一般選擇一個適中的數值。增大可以降低整體模型的方差,提升模型的准確度,且不會對子模型的偏差和方差有任何影響。由於降低的是整體模型方差公式的第二項,故准確度的提高有一個上限。在實際應用中,可以在1至200之間取值;
n_jobs:引擎允許使用處理器的數量。 若值為1則只能使用一個處理器, 值為-1則表示沒有限制。設置n_jobs可以加快模型計算速度;
oob_score:是否採用袋外誤差來評估模型的好壞,默認為 False,推薦設置為True,因為袋外分數反應了一個模型擬合後的泛化能力;
CART決策樹參數
max_features: RF劃分時考慮的最大特徵數。可以使用很多種類型的值,默認是"None",意味著劃分時考慮所有的特徵數;如果是"log2"意味著劃分時最多考慮log2N個特徵;如果是"sqrt"或者"auto"意味著劃分時最多考慮N−−√N個特徵。如果是整數,代表考慮的特徵絕對數。如果是浮點數,代表考慮特徵百分比,即考慮(百分比xN)取整後的特徵數,其中N為樣本總特徵數。一般來說,如果樣本特徵數不多,比如小於50,我們用默認的"None"就可以了,如果特徵數非常多,我們可以靈活使用剛才描述的其他取值來控制劃分時考慮的最大特徵數,以控制決策樹的生成時間。
max_depth: 決策樹最大深度。默認為"None",決策樹在建立子樹的時候不會限制子樹的深度這樣建樹時,會使每一個葉節點只有一個類別,或是達到min_samples_split。一般來說,數據少或者特徵少的時候可以不管這個值。如果模型樣本量多,特徵也多的情況下,推薦限制這個最大深度,具體的取值取決於數據的分布。常用的可以取值10-100之間。
min_samples_split: 內部節點再劃分所需最小樣本數,默認2。這個值限制了子樹繼續劃分的條件,如果某節點的樣本數少於min_samples_split,則不會繼續再嘗試選擇最優特徵來進行劃分。 默認是2.如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。
min_samples_leaf:葉子節點最少樣本數。 這個值限制了葉子節點最少的樣本數,如果某葉子節點數目小於樣本數,則會和兄弟節點一起被剪枝。 默認是1,可以輸入最少的樣本數的整數,或者最少樣本數占樣本總數的百分比。如果樣本量不大,不需要管這個值。如果樣本量數量級非常大,則推薦增大這個值。
min_weight_fraction_leaf:葉子節點最小的樣本權重和。這個值限制了葉子節點所有樣本權重和的最小值,如果小於這個值,則會和兄弟節點一起被剪枝。 默認是0,就是不考慮權重問題。一般來說,如果我們有較多樣本有缺失值,或者分類樹樣本的分布類別偏差很大,就會引入樣本權重,這時我們就要注意這個值了。
max_leaf_nodes: 最大葉子節點數。通過限制最大葉子節點數,可以防止過擬合,默認是"None」,即不限制最大的葉子節點數。如果加了限制,演算法會建立在最大葉子節點數內最優的決策樹。如果特徵不多,可以不考慮這個值,但是如果特徵分成多的話,可以加以限制,具體的值可以通過交叉驗證得到。
min_impurity_split: 節點劃分最小不純度。這個值限制了決策樹的增長,如果某節點的不純度(基於基尼系數,均方差)小於這個閾值,則該節點不再生成子節點,即為葉子節點 。一般不推薦改動默認值1e-7。
上面的決策樹參數中最重要的包括最大特徵數 max_features , 最大深度 max_depth , 內部節點再劃分所需最小樣本數 min_samples_split 和葉子節點最少樣本數 min_samples_leaf
參數調優 :隨機森林參數的調優在數據分析和挖掘中也佔有一定的地位,學會好的調優方法能夠達到事半功倍的效果。調優參考 https://blog.csdn.net/cherdw/article/details/54971771

㈡ 決策樹演算法之隨機森林

在 CART 分類回歸樹 的基礎之上,我們可以很容易的掌握隨機森林演算法,它們之間的區別在於,CART 決策樹較容易過擬合,而隨機森林可以在一定程度上解決該問題。

隨機森林的主要思想是:使用隨機性產生出一系列簡單的決策樹,並組合它們的預測結果為最終的結果,可謂三個臭皮匠賽過一個諸葛亮,下面我們就來具體了解一下。

產生隨機森林的步驟大致為三步

在第 1 步,它是一個可放回抽樣,即所產生的樣本是允許重復的,這種抽樣又被稱為 Bootstrap,例如我們有以下 mmy 數據

在做完 Bootstrap 之後,可能的樣本數據如下

可見,樣本數據中,第 3 條和第 4 條樣本是一樣的,都對應的是原始數據中的第 4 條。

接下來,就是要使用上面的樣本數據來產生決策樹了,產生決策樹的方法和 CART 基本一致,唯一的不同地方在於,節點的構建不是來自於全部的候選特徵,而是先從中隨機的選擇 n 個特徵,在這 n 個特徵中找出一個作為最佳節點。

舉個例子,假設 n = 2,且我們隨機選擇了「血液循環正常」和「血管堵塞」這兩個特徵來產生根節點,如下:

我們將在上述兩個特徵中選擇一個合適的特徵作為根節點,假設在計算完 Gini 不純度之後,「血液循環正常」這個特徵勝出,那麼我們的根節點便是「血液循環正常」,如下圖所示

接下來我們還需要構建根節點下面的節點,下一個節點將會在剩下的「胸口疼痛」、「血管堵塞」和「體重」三個特徵中產生,但我們依然不會計算所有這 3 個特徵的 Gini 不純度,而是從中隨機選擇 2 個特徵,取這 2 個特徵中的 Gini 不純度較低者作為節點。

例如我們隨機選到了「胸口疼痛」和「體重」這兩列,如下:

假設此時「體重」的 Gini 不純度更低,那麼第 2 個節點便是「體重」,如下圖:

繼續下去,我們便產生了一棵決策樹。

隨機森林是多棵決策樹,在產生完一棵決策樹後,接著會循環執行上述過程:Bootstrap 出訓練樣本,訓練決策樹,直到樹的數量達到設置值——通常為幾百棵樹。

現在我們產生了幾百棵樹的隨機森林,當我們要預測一條數據時,該怎麼做呢?我們會聚合這些樹的結果,選擇預測結果最多的那個分類作為最終的預測結果。

例如我們現在有一條數據:

該條數據被所有樹預測的結果如下:

上述結果聚合後為:

取最多的那項為最終的預測結果,即 Yes——該病人被診斷為患有心臟病。

以上,隨機森林的兩個過程: B ootstrap 和 Agg regate 又被稱為 Bagging

本文我們一起學習了隨機森林的演算法,和 CART 決策樹比起來,它主要被用來解決過擬合問題,其主要的思想為 Bagging,即隨機性有助於增強模型的泛化(Variance) 能力。

參考:

相關文章:

閱讀全文

與隨機森林演算法參數解釋及調優相關的資料

熱點內容
小奔運動app網路異常怎麼回事 瀏覽:447
php開啟壓縮 瀏覽:303
伺服器主機如何設置啟動 瀏覽:282
linux配置網路命令 瀏覽:774
一張照片怎麼製作視頻app 瀏覽:908
pythonweb和php 瀏覽:976
電腦伺服器地址ip地址 瀏覽:823
對矩陣壓縮是為了 瀏覽:910
setfacl命令 瀏覽:172
linux子系統中斷 瀏覽:342
linux查看進程ps 瀏覽:224
知識庫系統php 瀏覽:623
小波變換壓縮圖像python 瀏覽:151
阿里巴巴程序員怎麼月入百萬 瀏覽:173
如何使用國外伺服器 瀏覽:188
燃燈者pdf 瀏覽:468
編譯器用數學嗎 瀏覽:7
圖形化apk反編譯工具 瀏覽:48
考勤表加密怎麼辦 瀏覽:735
arj壓縮與解壓批處理怎麼寫 瀏覽:658