當前位置:編程學習大全網 - 源碼下載 - RandomForest隨機森林算法

RandomForest隨機森林算法

/qq_16633405/article/details/61200502

/12199764/viewspace-1572056/

/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、 當我們需要推斷超出範圍的獨立變量或非獨立變量,隨機森林做得並不好。

分類問題

回歸問題

常用方法 :參考 /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

參數調優 :隨機森林參數的調優在數據分析和挖掘中也占有壹定的地位,學會好的調優方法能夠達到事半功倍的效果。調優參考 /cherdw/article/details/54971771

  • 上一篇:如何寫cmake使其包含c++11特性
  • 下一篇:需要壹個專業音樂合成軟件,連接效果好的...
  • copyright 2024編程學習大全網