極端隨機樹分類器 (ExtraTreesClassifier)#
- class sklearn.ensemble.ExtraTreesClassifier(n_estimators=100, *, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='sqrt', max_leaf_nodes=None, min_impurity_decrease=0.0, bootstrap=False, oob_score=False, n_jobs=None, random_state=None, verbose=0, warm_start=False, class_weight=None, ccp_alpha=0.0, max_samples=None, monotonic_cst=None)[原始碼]#
極端隨機樹分類器。
此類別實現了一個元估算器,它在資料集的各種子樣本上擬合多個隨機決策樹(又稱極端隨機樹),並使用平均來提高預測準確性並控制過度擬合。
在使用者指南中閱讀更多內容。
- 參數:
- n_estimators整數,預設值=100
森林中的樹木數量。
在 0.22 版本中變更:
n_estimators
的預設值在 0.22 版本中從 10 變更為 100。- criterion{“gini”, “entropy”, “log_loss”}, 預設值=”gini”
衡量分割品質的函數。支援的標準是“gini”,用於 Gini 不純度;“log_loss”和“entropy”都用於 Shannon 信息增益,請參閱數學公式。注意:此參數是樹狀結構特定的。
- max_depth整數,預設值=None
樹的最大深度。如果為 None,則會擴展節點,直到所有葉子都為純粹,或直到所有葉子包含的樣本少於 min_samples_split 樣本。
- min_samples_split整數或浮點數,預設值=2
分割內部節點所需的最小樣本數
如果是整數,則將
min_samples_split
視為最小值。如果是浮點數,則
min_samples_split
是一個分數,並且ceil(min_samples_split * n_samples)
是每次分割的最小樣本數。
在 0.18 版本中變更: 新增了分數的浮點數值。
- min_samples_leaf整數或浮點數,預設值=1
葉節點所需的最小樣本數。只有在左右分支中至少保留
min_samples_leaf
個訓練樣本時,才會考慮任何深度下的分割點。這可能會達到平滑模型的效果,尤其是在迴歸中。如果是整數,則將
min_samples_leaf
視為最小值。如果是浮點數,則
min_samples_leaf
是一個分數,並且ceil(min_samples_leaf * n_samples)
是每個節點的最小樣本數。
在 0.18 版本中變更: 新增了分數的浮點數值。
- min_weight_fraction_leaf浮點數,預設值=0.0
葉節點所需的權重總和(所有輸入樣本的權重)的最小加權分數。如果未提供 sample_weight,則樣本具有相等的權重。
- max_features{“sqrt”, “log2”, None}, 整數或浮點數,預設值=”sqrt”
尋找最佳分割時要考慮的特徵數
如果是整數,則在每次分割時考慮
max_features
個特徵。如果是浮點數,則
max_features
是一個分數,並且在每次分割時考慮max(1, int(max_features * n_features_in_))
個特徵。如果為“sqrt”,則
max_features=sqrt(n_features)
。如果為“log2”,則
max_features=log2(n_features)
。如果為 None,則
max_features=n_features
。
在 1.1 版本中變更:
max_features
的預設值從"auto"
變更為"sqrt"
。注意:在至少找到節點樣本的一個有效分割之前,分割的搜尋不會停止,即使這需要實際檢查超過
max_features
個特徵。- max_leaf_nodes整數,預設值=None
以最佳優先的方式生長具有
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
是右子節點的樣本數。如果傳遞了
sample_weight
,則N
、N_t
、N_t_R
和N_t_L
都指的是加權總和。新增於 0.19 版本。
- bootstrap布林值,預設值=False
在建立樹木時是否使用自助取樣。如果為 False,則使用整個資料集來建立每棵樹。
- oob_score布林值或可呼叫物件,預設值=False
是否使用袋外 (out-of-bag) 樣本來估計泛化分數。預設情況下,會使用
accuracy_score
。提供一個簽名為metric(y_true, y_pred)
的可呼叫物件以使用自定義指標。僅在bootstrap=True
時可用。- n_jobsint,預設值為 None
要並行執行的工作數量。
fit
、predict
、decision_path
和apply
都在樹之間進行並行化。None
表示 1,除非在joblib.parallel_backend
環境中。-1
表示使用所有處理器。有關更多詳細資訊,請參閱詞彙表。- random_stateint、RandomState 實例或 None,預設值為 None
控制 3 個隨機性的來源
建立樹時使用的樣本的 bootstrap 抽樣 (如果
bootstrap=True
)在尋找每個節點的最佳分割時要考慮的特徵的抽樣 (如果
max_features < n_features
)每個
max_features
的分割的抽取
有關詳細資訊,請參閱詞彙表。
- verboseint,預設值為 0
控制擬合和預測時的詳細程度。
- warm_startbool,預設值為 False
當設定為
True
時,重複使用上次呼叫擬合的結果,並向集成模型添加更多估計器;否則,僅擬合一個全新的森林。有關詳細資訊,請參閱詞彙表 和 擬合額外樹。- class_weight{“balanced”, “balanced_subsample”}, dict 或 dicts 列表,預設值為 None
與類別相關聯的權重,形式為
{class_label: weight}
。如果未給定,則所有類別都假設具有權重 1。對於多輸出問題,可以按照 y 的列的相同順序提供 dict 的列表。請注意,對於多輸出(包括多標籤),應該為每列的每個類別在自己的 dict 中定義權重。例如,對於四類多標籤分類,權重應該是 [{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” 相同,不同之處在於權重是基於每個生長樹的 bootstrap 樣本計算的。
對於多輸出,y 的每列的權重將會相乘。
請注意,如果指定了 sample_weight,這些權重將與 sample_weight(通過 fit 方法傳遞)相乘。
- ccp_alpha非負浮點數,預設值為 0.0
用於最小成本複雜度剪枝的複雜度參數。將選擇成本複雜度小於
ccp_alpha
的最大子樹。預設情況下,不執行剪枝。有關詳細資訊,請參閱最小成本複雜度剪枝。有關此類剪枝的示例,請參閱 使用成本複雜度剪枝進行決策樹的後剪枝。在 0.22 版本中新增。
- max_samplesint 或 float,預設值為 None
如果 bootstrap 為 True,則從 X 中抽取樣本以訓練每個基底估計器的數量。
如果為 None (預設值),則抽取
X.shape[0]
個樣本。如果為 int,則抽取
max_samples
個樣本。如果為 float,則抽取
max_samples * X.shape[0]
個樣本。因此,max_samples
應該在區間(0.0, 1.0]
內。
在 0.22 版本中新增。
- monotonic_cst形狀為 (n_features) 的 int 類陣列,預設值為 None
- 指示要對每個特徵強制執行的單調性約束。
1:單調遞增
0:無約束
-1:單調遞減
如果 monotonic_cst 為 None,則不應用約束。
- 單調性約束不支援以下情況:
多類別分類(即當
n_classes > 2
時),多輸出分類(即當
n_outputs_ > 1
時),使用具有遺失值的資料訓練的分類。
約束適用於正類的機率。
請在 使用者指南 中閱讀更多資訊。
在 1.4 版本中新增。
- 屬性:
- estimator_
ExtraTreeClassifier
用於建立擬合子估計器集合的子估計器模板。
在 1.2 版本中新增:
base_estimator_
已重新命名為estimator_
。- estimators_DecisionTreeClassifier 列表
擬合子估計器的集合。
- classes_形狀為 (n_classes,) 的 ndarray 或此類陣列的列表
類別標籤(單輸出問題),或類別標籤陣列的列表(多輸出問題)。
- n_classes_int 或列表
類別數量(單輸出問題),或包含每個輸出類別數量的列表(多輸出問題)。
feature_importances_
形狀為 (n_features,) 的 ndarray基於雜質的特徵重要性。
- n_features_in_int
在 fit 期間看到的特徵數量。
在 0.24 版本中新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。僅在
X
具有全部為字串的特徵名稱時定義。在 1.0 版本中新增。
- n_outputs_int
執行
fit
時的輸出數量。- oob_score_float
使用袋外估計獲得的訓練資料集的分數。僅當
oob_score
為 True 時,此屬性才存在。- oob_decision_function_形狀為 (n_samples, n_classes) 或 (n_samples, n_classes, n_outputs) 的 ndarray
使用訓練集上的袋外估計計算的決策函數。如果 n_estimators 很小,則可能存在一個資料點在 bootstrap 期間從未被排除。在這種情況下,
oob_decision_function_
可能包含 NaN。僅當oob_score
為 True 時,此屬性才存在。estimators_samples_
陣列列表每個基底估計器抽取的樣本子集。
- estimator_
另請參閱
ExtraTreesRegressor
具有隨機分割的額外樹迴歸器。
RandomForestClassifier
具有最佳分割的隨機森林分類器。
RandomForestRegressor
使用具有最佳分割的樹的集成迴歸器。
備註
控制樹大小的參數(例如
max_depth
、min_samples_leaf
等)的預設值會導致完全生長且未經修剪的樹,這些樹在某些資料集上可能非常大。為了減少記憶體消耗,應通過設定這些參數值來控制樹的複雜性和大小。參考資料
[1]P. Geurts、D. Ernst 和 L. Wehenkel,“Extremely randomized trees”,Machine Learning,63(1), 3-42, 2006。
範例
>>> from sklearn.ensemble import ExtraTreesClassifier >>> from sklearn.datasets import make_classification >>> X, y = make_classification(n_features=4, random_state=0) >>> clf = ExtraTreesClassifier(n_estimators=100, random_state=0) >>> clf.fit(X, y) ExtraTreesClassifier(random_state=0) >>> clf.predict([[0, 0, 0, 0]]) array([1])
- apply(X)[原始碼]#
將森林中的樹應用於 X,傳回葉子索引。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}
輸入樣本。在內部,其 dtype 將被轉換為
dtype=np.float32
。如果提供稀疏矩陣,它將被轉換為稀疏的csr_matrix
。
- 傳回值:
- X_leaves形狀為 (n_samples, n_estimators) 的 ndarray
對於 X 中的每個資料點 x 和森林中的每棵樹,傳回 x 最終所在的葉子的索引。
- decision_path(X)[原始碼]#
傳回森林中的決策路徑。
在 0.18 版本中新增。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}
輸入樣本。在內部,其 dtype 將被轉換為
dtype=np.float32
。如果提供稀疏矩陣,它將被轉換為稀疏的csr_matrix
。
- 傳回值:
- indicator形狀為 (n_samples, n_nodes) 的稀疏矩陣
傳回節點指示矩陣,其中非零元素表示樣本通過節點。矩陣為 CSR 格式。
- n_nodes_ptr形狀為 (n_estimators + 1,) 的 ndarray
來自 indicator[n_nodes_ptr[i]:n_nodes_ptr[i+1]] 的列給出第 i 個估計器的指示器值。
- 屬性 estimators_samples_#
每個基底估計器抽取的樣本子集。
回傳一個動態生成的索引列表,用於識別擬合集成模型中每個成員時所使用的樣本,即袋內樣本。
注意:該列表會在每次呼叫屬性時重新建立,以減少物件記憶體佔用空間,避免儲存取樣資料。因此,獲取該屬性的速度可能會比預期的慢。
- 屬性 feature_importances_#
基於雜質的特徵重要性。
數值越高,表示特徵越重要。特徵的重要性計算方式為該特徵所帶來的(標準化)準則總降低量,也稱為 Gini 重要性。
警告:基於雜質的特徵重要性對於高基數特徵(許多唯一值)可能會產生誤導。請參考
sklearn.inspection.permutation_importance
作為替代方案。- 傳回值:
- feature_importances_形狀為 (n_features,) 的 ndarray
除非所有樹都是只包含根節點的單節點樹,否則此陣列的值總和為 1,在這種情況下,它將是一個零陣列。
- fit(X, y, sample_weight=None)[原始碼]#
從訓練集 (X, y) 建立樹的森林。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}
訓練輸入樣本。在內部,其 dtype 將被轉換為
dtype=np.float32
。如果提供稀疏矩陣,它將被轉換為稀疏的csc_matrix
。- y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列
目標值(分類中的類別標籤,回歸中的實數)。
- sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None
樣本權重。如果為 None,則樣本的權重相等。在每個節點中搜尋分割時,將忽略會建立淨權重為零或負數的子節點的分割。在分類的情況下,如果分割會導致任何單一類別在任一子節點中具有負權重,也會被忽略。
- 傳回值:
- self物件
擬合的估算器。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看使用者指南,了解路由機制如何運作。
- 傳回值:
- routingMetadataRequest
一個
MetadataRequest
,封裝了路由資訊。
- get_params(deep=True)[原始碼]#
取得此估算器的參數。
- 參數:
- deep布林值,預設值為 True
如果為 True,則會回傳此估算器和包含的子物件(也是估算器)的參數。
- 傳回值:
- paramsdict
參數名稱對應到它們的值。
- predict(X)[原始碼]#
預測 X 的類別。
輸入樣本的預測類別是森林中樹木的投票結果,並根據其機率估計進行加權。也就是說,預測的類別是樹木中具有最高平均機率估計的類別。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}
輸入樣本。在內部,其 dtype 將被轉換為
dtype=np.float32
。如果提供稀疏矩陣,它將被轉換為稀疏的csr_matrix
。
- 傳回值:
- y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的 ndarray
預測的類別。
- predict_log_proba(X)[原始碼]#
預測 X 的類別對數機率。
輸入樣本的預測類別對數機率計算方式為森林中樹木的平均預測類別機率的對數。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}
輸入樣本。在內部,其 dtype 將被轉換為
dtype=np.float32
。如果提供稀疏矩陣,它將被轉換為稀疏的csr_matrix
。
- 傳回值:
- p形狀為 (n_samples, n_classes) 的 ndarray,或此類陣列的列表
輸入樣本的類別機率。類別的順序對應於屬性 classes_ 中的順序。
- predict_proba(X)[原始碼]#
預測 X 的類別機率。
輸入樣本的預測類別機率計算方式為森林中樹木的平均預測類別機率。單棵樹的類別機率是葉節點中相同類別的樣本比例。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}
輸入樣本。在內部,其 dtype 將被轉換為
dtype=np.float32
。如果提供稀疏矩陣,它將被轉換為稀疏的csr_matrix
。
- 傳回值:
- p形狀為 (n_samples, n_classes) 的 ndarray,或此類陣列的列表
輸入樣本的類別機率。類別的順序對應於屬性 classes_ 中的順序。
- score(X, y, sample_weight=None)[原始碼]#
回傳給定測試資料和標籤的平均準確度。
在多標籤分類中,這是子集準確度,這是一個嚴格的指標,因為您需要每個樣本的每個標籤集都正確預測。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
測試樣本。
- y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列
X
的真實標籤。- sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None
樣本權重。
- 傳回值:
- score浮點數
self.predict(X)
相對於y
的平均準確度。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') ExtraTreesClassifier [原始碼]#
請求傳遞至
fit
方法的中繼資料。請注意,此方法僅在
enable_metadata_routing=True
時才相關(請參閱sklearn.set_config
)。請參閱使用者指南,了解路由機制如何運作。每個參數的選項如下:
True
:請求中繼資料,並在提供時傳遞給fit
。如果未提供中繼資料,則忽略請求。False
:不請求中繼資料,且元估算器不會將其傳遞給fit
。None
:不請求中繼資料,如果使用者提供中繼資料,則元估算器會引發錯誤。str
:應該使用此給定別名而不是原始名稱將中繼資料傳遞給元估算器。
預設值 (
sklearn.utils.metadata_routing.UNCHANGED
) 會保留現有的請求。這允許您變更某些參數的請求,而不變更其他參數的請求。在 1.3 版中新增。
注意
此方法僅在將此估計器作為元估計器(meta-estimator)的子估計器時相關,例如在
Pipeline
中使用。否則,它沒有任何效果。- 參數:
- sample_weightstr、True、False 或 None,預設值 = sklearn.utils.metadata_routing.UNCHANGED
fit
中sample_weight
參數的中繼資料路由。
- 傳回值:
- self物件
更新後的物件。
- set_params(**params)[原始碼]#
設定此估計器的參數。
此方法適用於簡單的估計器以及巢狀物件(如
Pipeline
)。後者具有<component>__<parameter>
形式的參數,因此可以更新巢狀物件的每個元件。- 參數:
- **paramsdict
估計器參數。
- 傳回值:
- self估計器實例
估計器實例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') ExtraTreesClassifier [原始碼]#
請求傳遞給
score
方法的中繼資料。請注意,此方法僅在
enable_metadata_routing=True
時才相關(請參閱sklearn.set_config
)。請參閱使用者指南,了解路由機制如何運作。每個參數的選項如下:
True
:請求中繼資料,並在提供時傳遞給score
。如果未提供中繼資料,則忽略請求。False
:不請求中繼資料,並且元估計器不會將其傳遞給score
。None
:不請求中繼資料,如果使用者提供中繼資料,則元估算器會引發錯誤。str
:應該使用此給定別名而不是原始名稱將中繼資料傳遞給元估算器。
預設值 (
sklearn.utils.metadata_routing.UNCHANGED
) 會保留現有的請求。這允許您變更某些參數的請求,而不變更其他參數的請求。在 1.3 版中新增。
注意
此方法僅在將此估計器作為元估計器(meta-estimator)的子估計器時相關,例如在
Pipeline
中使用。否則,它沒有任何效果。- 參數:
- sample_weightstr、True、False 或 None,預設值 = sklearn.utils.metadata_routing.UNCHANGED
score
中sample_weight
參數的中繼資料路由。
- 傳回值:
- self物件
更新後的物件。