Python隨機森林模型RandomForestClassifier引數說明
A. max_features:
隨機森林允許單個決策樹使用特徵的最大數量。 Python為最大特徵數提供了多個可選項。 下面是其中的幾個:
Auto/None :簡單地選取所有特徵,每顆樹都可以利用他們。這種情況下,每顆樹都沒有任何的限制。
sqrt :此選項是每顆子樹可以利用總特徵數的平方根個。 例如,如果變數(特徵)的總數是100,所以每顆子樹只能取其中的10個。“log2”是另一種相似型別的選項。
0.2:此選項允許每個隨機森林的子樹可以利用變數(特徵)數的20%。如果想考察的特徵x%的作用, 我們可以使用“0.X”的格式。
max_features如何影響效能和速度?
增加max_features一般能提高模型的效能,因為在每個節點上,我們有更多的選擇可以考慮。 然而,這未必完全是對的,因為它降低了單個樹的多樣性,而這正是隨機森林獨特的優點。 但是,可以肯定,你通過增加max_features會降低演算法的速度。 因此,你需要適當的平衡和選擇最佳max_features。
B. n_estimators:
在利用最大投票數或平均值來預測之前,你想要建立子樹的數量。 較多的子樹可以讓模型有更好的效能,但同時讓你的程式碼變慢。 你應該選擇儘可能高的值,只要你的處理器能夠承受的住,因為這使你的預測更好更穩定。
C. min_sample_leaf
如果您以前編寫過一個決策樹,你能體會到最小樣本葉片大小的重要性。 葉是決策樹的末端節點。 較小的葉子使模型更容易捕捉訓練資料中的噪聲。 一般來說,我更偏向於將最小葉子節點數目設定為大於50。在你自己的情況中,你應該儘量嘗試多種葉子大小種類,以找到最優的那個。
1) RF劃分時考慮的最大特徵數max_features: 可以使用很多種型別的值,預設是"None",意味著劃分時考慮所有的特徵數;如果是"log2"意味著劃分時最多考慮log2Nlog2N 個特徵;如果是"sqrt"或者"auto"意味著劃分時最多考慮N−−√N 個特徵。如果是整數,代表考慮的特徵絕對數。如果是浮點數,代表考慮特徵百分比,即考慮(百分比xN)取整後的特徵數。其中N為樣本總特徵數。一般來說,如果樣本特徵數不多,比如小於50,我們用預設的"None"就可以了,如果特徵數非常多,我們可以靈活使用剛才描述的其他取值來控制劃分時考慮的最大特徵數,以控制決策樹的生成時間。
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。