1. 程式人生 > >RandomForest 調參

RandomForest 調參

防止 car val 輸入 決策 amp str entropy 最小值

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

一、Bagging框架的參數:

1. n_estimators: 也就是弱學習器的最大叠代次數,或者說最大的弱學習器的個數默認是10。一般來說n_estimators太小,容易欠擬合,n_estimators太大,又容易過擬合,一般選擇一個適中的數值。Random Forest來說,增加“子模型數”(n_estimators)可以明顯降低整體模型的方差,且不會對子模型的偏差和方差有任何影響。模型的準確度會隨著“子模型數”的增加而提高,由於減少的是整體模型方差公式的第二項,故準確度的提高有一個上限。在實際應用中,可以以10為單位,考察取值範圍在1至201的調參情況。

2. bootstrap默認True是否有放回的采樣。

3. oob_score 默認為False即是否采用袋外樣本來評估模型的好壞。有放回采樣中大約36.8%的沒有被采樣到的數據,我們常常稱之為袋外數據(Out Of Bag, 簡稱OOB)這些數據沒有參與訓練集模型的擬合,因此可以用來檢測模型的泛化能力。個人推薦設置為True,因為袋外分數反應了一個模型擬合後的泛化能力。對單個模型的參數訓練,我們知道可以用cross validation(cv)來進行,但是特別消耗時間,而且對於隨機森林這種情況也沒有大的必要,所以就用這個數據對決策樹模型進行驗證,算是一個簡單的交叉驗證性能消耗小,但是效果不錯。

4. criterion 即CART樹做劃分時對特征的評價標準分類模型和回歸模型的損失函數是不一樣的。分類RF對應的CART分類樹默認是基尼系數gini,另一個可選擇的標準是信息增益entropy,是用來選擇節點的最優特征和切分點的兩個準則。回歸RF對應的CART回歸樹默認是均方差mse,另一個可以選擇的標準是絕對值差mae一般來說選擇默認的標準就已經很好的。

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

二、決策樹的參數:

1. max_features: RF劃分時考慮的最大特征數。可以使用很多種類型的值,默認是

"None",意味著劃分時考慮所有的特征數;如果是"log2"意味著劃分時最多考慮log2N個特征;如果是"sqrt"或者"auto"意味著劃分時最多考慮N??√N個特征。如果是整數,代表考慮的特征絕對數。如果是浮點數,代表考慮特征百分比,即考慮(百分比xN)取整後的特征數,其中N為樣本總特征數。一般來說,如果樣本特征數不多,比如小於50,我們用默認的"None"就可以了如果特征數非常多,我們可以靈活使用剛才描述的其他取值來控制劃分時考慮的最大特征數,以控制決策樹的生成時間

2. max_depth: 決策樹最大深度。默認為"None",決策樹在建立子樹的時候不會限制子樹的深度這樣建樹時,會使每一個葉節點只有一個類別,或是達到min_samples_split。一般來說,數據少或者特征少的時候可以不管這個值。如果模型樣本量多,特征也多的情況下,推薦限制這個最大深度,具體的取值取決於數據的分布。常用的可以取值10-100之間。

3. min_samples_split: 內部節點再劃分所需最小樣本數,默認2。這個值限制了子樹繼續劃分的條件,如果某節點的樣本數少於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

8. splitter: 隨機選擇屬性"random"還是選擇不純度最大"best"的屬性,建議用默認 best

9. presort:是否對數據進行預分類,以加快擬合中最佳分裂點的發現。默認False,適用於大數據集。小數據集使用True,可以加快訓練。是否預排序,預排序可以加速查找最佳分裂點,對於稀疏數據不管用,Bool,auto:非稀疏數據則預排序,若稀疏數據則不預排序.

10. 進行預測常用的幾種方法:

  • predict_proba(x):給出帶有概率值的結果。每個點在所有label(類別)的概率和為1.
  • predict(x):直接給出預測結果。內部還是調用的predict_proba(),根據概率的結果看哪個類型的預測值最高就是哪個類型。
  • predict_log_proba(x):和predict_proba基本上一樣,只是把結果給做了log()處理。

RandomForest 調參