當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python sklearn RandomForestClassifier用法及代碼示例


本文簡要介紹python語言中 sklearn.ensemble.RandomForestClassifier 的用法。

用法:

class sklearn.ensemble.RandomForestClassifier(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=True, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None)

隨機森林分類器。

隨機森林是一種元估計器,可在數據集的各種 sub-samples 上擬合多個決策樹分類器,並使用平均來提高預測準確性並控製過度擬合。如果 bootstrap=True(默認),則子樣本大小由 max_samples 參數控製,否則使用整個數據集來構建每棵樹。

在用戶指南中閱讀更多信息。

參數

n_estimators整數,默認=100

森林中的樹數量。

criterion{“gini”, “entropy”},默認=”gini”

測量分割質量的函數。支持的標準是用於基尼雜質的“gini” 和用於信息增益的“entropy”。注意:此參數為tree-specific。

max_depth整數,默認=無

樹的最大深度。如果沒有,則擴展節點直到所有葉子都是純的或直到所有葉子包含少於min_samples_split 個樣本。

min_samples_splitint 或浮點數,默認=2

拆分內部節點所需的最小樣本數:

  • 如果是 int,則將 min_samples_split 視為最小數字。
  • 如果是浮點數,那麽 min_samples_split 是一個分數,而 ceil(min_samples_split * n_samples) 是每個拆分的最小樣本數。
min_samples_leafint 或浮點數,默認=1

葉節點所需的最小樣本數。隻有在左右分支中的每個分支中至少留下min_samples_leaf 訓練樣本時,才會考慮任何深度的分割點。這可能具有平滑模型的效果,尤其是在回歸中。

  • 如果是 int,則將 min_samples_leaf 視為最小數字。
  • 如果是浮點數,那麽 min_samples_leaf 是分數,而 ceil(min_samples_leaf * n_samples) 是每個節點的最小樣本數。
min_weight_fraction_leaf浮點數,默認=0.0

需要在葉節點處的權重總和(所有輸入樣本的)的最小加權分數。當未提供sample_weight 時,樣本具有相同的權重。

max_features{“auto”, “sqrt”, “log2”}, int 或浮點數,默認=”auto”

尋找最佳分割時要考慮的特征數量:

  • 如果是 int,則在每次拆分時考慮 max_features 特征。
  • 如果是浮點數,那麽 max_features 是一個分數,並且在每次拆分時都會考慮 round(max_features * n_features) 特征。
  • 如果 “auto”,那麽 max_features=sqrt(n_features)
  • 如果“sqrt”,則max_features=sqrt(n_features)(與“auto”相同)。
  • 如果 “log2”,那麽 max_features=log2(n_features)
  • 如果沒有,那麽 max_features=n_features

注意:在找到至少一個節點樣本的有效分區之前,對拆分的搜索不會停止,即使它需要有效地檢查超過 max_features 的特征。

max_leaf_nodes整數,默認=無

以best-first 方式用max_leaf_nodes 種植樹。最佳節點定義為雜質的相對減少。如果 None 則無限數量的葉節點。

min_impurity_decrease浮點數,默認=0.0

如果該分裂導致雜質減少大於或等於該值,則該節點將被分裂。

加權雜質減少方程如下:

N_t / N * (impurity - N_t_R / N_t * right_impurity
                    - N_t_L / N_t * left_impurity)

其中N是樣本總數,N_t是當前節點的樣本數,N_t_L是左孩子的樣本數,N_t_R是右孩子的樣本數.

N , N_t , N_t_RN_t_L 都是指加權和,如果通過了 sample_weight

bootstrap布爾,默認=真

構建樹時是否使用引導樣本。如果為 False,則使用整個數據集來構建每棵樹。

oob_score布爾,默認=假

是否使用out-of-bag 個樣本來估計泛化分數。僅當 bootstrap=True 時可用。

n_jobs整數,默認=無

並行運行的作業數量。 fitpredictdecision_pathapply 都在樹上並行化。 None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有處理器。有關更多詳細信息,請參閱術語表。

random_stateint、RandomState 實例或無,默認=無

控製構建樹時使用的樣本引導的隨機性(如果 bootstrap=True )和在每個節點尋找最佳分割時要考慮的特征采樣(如果 max_features < n_features )。有關詳細信息,請參閱詞匯表。

verbose整數,默認=0

控製擬合和預測時的詳細程度。

warm_start布爾,默認=假

當設置為 True 時,重用上一次調用的解決方案以適應並向集成添加更多估計器,否則,隻需適應一個全新的森林。請參閱詞匯表。

class_weight{“balanced”, “balanced_subsample”},字典或字典列表,默認=無

{class_label: weight} 形式的類關聯的權重。如果沒有給出,所有的類都應該有一個權重。對於multi-output 問題,可以按照與 y 的列相同的順序提供字典列表。

請注意,對於多輸出(包括多標簽),應為其自己的字典中的每一列的每個類定義權重。例如,對於four-class,多標簽分類權重應該是 [{0: 1, 1: 1}, {0: 1, 1: 5}, {0: 1, 1: 1}, {0: 1, 1: 1}] 而不是 [{1:1}, {2:5}, {3:1}, {4:1}]。

“balanced” 模式使用 y 的值自動調整與輸入數據中的類頻率成反比的權重,如 n_samples / (n_classes * np.bincount(y))

“balanced_subsample” 模式與“balanced” 模式相同,隻是權重是根據每棵生長的樹的引導樣本計算的。

對於multi-output,y 的每一列的權重將相乘。

請注意,如果指定了 sample_weight,這些權重將乘以 sample_weight(通過 fit 方法傳遞)。

ccp_alpha非負浮點數,默認=0.0

用於最小Cost-Complexity 修剪的複雜度參數。將選擇具有最大成本複雜度且小於ccp_alpha 的子樹。默認情況下,不進行剪枝。有關詳細信息,請參閱最小 Cost-Complexity 修剪。

max_samplesint 或浮點數,默認=無

如果 bootstrap 為 True,則從 X 抽取的樣本數以訓練每個基本估計器。

  • 如果無(默認),則繪製 X.shape[0] 樣本。
  • 如果是 int,則繪製 max_samples 樣本。
  • 如果浮點數,則繪製 max_samples * X.shape[0] 樣本。因此,max_samples 應該在區間 (0.0, 1.0] 中。

屬性

base_estimator_DecisionTreeClassifier

用於創建擬合sub-estimators 集合的子估計器模板。

estimators_DecisionTreeClassifier列表

擬合sub-estimators 的集合。

classes_ndarray 形狀 (n_classes,) 或此類數組的列表

類標簽(單輸出問題)或類標簽數組列表(multi-output 問題)。

n_classes_int 或列表

類數(單輸出問題),或包含每個輸出的類數的列表(multi-output 問題)。

n_features_int

已棄用:屬性 n_features_ 在版本 1.0 中已棄用,並將在 1.2 中刪除。

n_features_in_int

擬合期間看到的特征數。

feature_names_in_ndarray 形狀(n_features_in_,)

擬合期間看到的特征名稱。僅當 X 具有全為字符串的函數名稱時才定義。

n_outputs_int

執行fit 時的輸出數。

feature_importances_ndarray 形狀 (n_features,)

基於雜質的特征重要性。

oob_score_浮點數

使用out-of-bag 估計獲得的訓練數據集的分數。此屬性僅在oob_score 為 True 時存在。

oob_decision_function_ndarray 形狀 (n_samples, n_classes) 或 (n_samples, n_classes, n_outputs)

使用 out-of-bag 估計訓練集計算的決策函數。如果 n_estimators 很小,則可能在引導期間從未遺漏數據點。在這種情況下,oob_decision_function_ 可能包含 NaN。此屬性僅在oob_score 為 True 時存在。

注意

控製樹大小的參數的默認值(例如 max_depthmin_samples_leaf 等)會導致完全生長和未修剪的樹在某些數據集上可能非常大。為了減少內存消耗,應該通過設置這些參數值來控製樹的複雜性和大小。

每次拆分時,特征總是隨機排列。因此,即使使用相同的訓練數據 max_features=n_featuresbootstrap=False ,如果在搜索最佳拆分期間枚舉的幾個拆分的標準改進相同,則找到的最佳拆分可能會有所不同。要在擬合期間獲得確定性行為,必須修複 random_state

參考

1
  1. Breiman,“Random Forests”,機器學習,45(1),5-32,2001。

例子

>>> from sklearn.ensemble import RandomForestClassifier
>>> from sklearn.datasets import make_classification
>>> X, y = make_classification(n_samples=1000, n_features=4,
...                            n_informative=2, n_redundant=0,
...                            random_state=0, shuffle=False)
>>> clf = RandomForestClassifier(max_depth=2, random_state=0)
>>> clf.fit(X, y)
RandomForestClassifier(...)
>>> print(clf.predict([[0, 0, 0, 0]]))
[1]

相關用法


注:本文由純淨天空篩選整理自scikit-learn.org大神的英文原創作品 sklearn.ensemble.RandomForestClassifier。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。