堆疊分類器#
- class sklearn.ensemble.StackingClassifier(estimators, final_estimator=None, *, cv=None, stack_method='auto', n_jobs=None, passthrough=False, verbose=0)[原始碼]#
結合最終分類器的堆疊估計器。
堆疊泛化 (Stacked generalization) 包括堆疊個別估計器的輸出,並使用一個分類器來計算最終預測。堆疊允許透過將個別估計器的輸出作為最終估計器的輸入,來利用每個估計器的優勢。
請注意,
estimators_
是在完整的X
上擬合的,而final_estimator_
則是使用基底估計器的交叉驗證預測,透過cross_val_predict
進行訓練。請參閱使用者指南以取得更多資訊。
於 0.22 版本加入。
- 參數:
- estimatorslist of (str, estimator)
將堆疊在一起的基底估計器。列表中的每個元素都定義為一個字串(即名稱)和一個估計器實例的元組。可以使用
set_params
將估計器設定為 ‘drop’。估計器的類型通常預期為分類器。但是,在某些使用案例中(例如序數回歸),可以傳遞回歸器。
- final_estimatorestimator, default=None
將用於組合基底估計器的分類器。預設的分類器是
LogisticRegression
。- cvint, 交叉驗證產生器, 可迭代物件, 或 “prefit”, default=None
決定在
cross_val_predict
中用來訓練final_estimator
的交叉驗證分割策略。cv 的可能輸入值為:None,使用預設的 5 折交叉驗證。
整數,用於指定 (分層) K 折中的折數。
用作交叉驗證產生器的物件。
可迭代物件,產生訓練和測試分割。
"prefit"
,假設estimators
已事先擬合。在這種情況下,估計器將不會重新擬合。
對於整數/None 輸入,如果估計器是分類器,且 y 是二元或多類別,則使用
StratifiedKFold
。在所有其他情況下,則使用KFold
。這些分割器使用shuffle=False
進行實例化,因此分割在不同呼叫中會保持相同。請參閱使用者指南,以了解此處可使用的各種交叉驗證策略。
如果傳遞 “prefit”,則假設所有
estimators
都已擬合。final_estimator_
是根據estimators
在完整訓練集上的預測進行訓練,並且**不是**交叉驗證的預測。請注意,如果模型已在相同的資料上進行訓練以訓練堆疊模型,則存在過度擬合的極高風險。於 1.1 版本加入:在 1.1 版本中加入了 ‘prefit’ 選項。
注意
如果訓練樣本數量足夠大,則增加分割次數不會帶來任何好處。實際上,訓練時間會增加。
cv
不用於模型評估,而是用於預測。- stack_method{‘auto’, ‘predict_proba’, ‘decision_function’, ‘predict’}, default=’auto’
為每個基底估計器呼叫的方法。可以是:
如果為 ‘auto’,則會嘗試依序為每個估計器呼叫
'predict_proba'
、'decision_function'
或'predict'
。否則,為
'predict_proba'
、'decision_function'
或'predict'
之一。如果估計器未實作該方法,則會引發錯誤。
- n_jobsint, default=None
用於所有
estimators
的fit
中平行運行的作業數量。None
表示 1,除非在joblib.parallel_backend
環境中。-1 表示使用所有處理器。請參閱詞彙表以取得更多詳細資訊。- passthroughbool, default=False
如果為 False,則只有估計器的預測會用作
final_estimator
的訓練資料。如果為 True,則final_estimator
會在預測以及原始訓練資料上進行訓練。- verboseint, default=0
詳細程度。
- 屬性:
- classes_形狀為 (n_classes,) 的 ndarray 或,如果
y
的類型為"multilabel-indicator"
,則為 ndarray 的列表。 類別標籤。
- estimators_估計器的列表
在訓練資料上擬合後的
estimators
參數的元素。如果估計器已設定為'drop'
,則不會出現在estimators_
中。當cv="prefit"
時,estimators_
會設定為estimators
,且不會再次擬合。- named_estimators_
Bunch
可依名稱存取任何已擬合的子估計器的屬性。
n_features_in_
int在 fit 期間看到的特徵數量。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。只有在底層的估計器在 fit 時公開此屬性時才會定義。
1.0 版本新增。
- final_estimator_估計器
基於
estimators_
的輸出進行擬合,並負責最終預測的分類器。- stack_method_字串列表
每個基礎估計器使用的方法。
- classes_形狀為 (n_classes,) 的 ndarray 或,如果
另請參閱
StackingRegressor
具有最終迴歸器的估計器堆疊。
注意事項
當每個估計器使用
predict_proba
時(即,大多數情況下對於stack_method='auto'
或特定於stack_method='predict_proba'
的情況),在二元分類問題中,每個估計器預測的第一個欄位將被捨棄。實際上,這兩個特徵將是完全共線的。在某些情況下(例如,序數迴歸),可以將迴歸器作為
StackingClassifier
的第一層傳遞。但是,請注意,y
將在內部以數值遞增或字典順序進行編碼。如果此排序不適當,則應手動以所需的順序數值編碼類別。參考文獻
[1]Wolpert, David H. “Stacked generalization.” Neural networks 5.2 (1992): 241-259.
範例
>>> from sklearn.datasets import load_iris >>> from sklearn.ensemble import RandomForestClassifier >>> from sklearn.svm import LinearSVC >>> from sklearn.linear_model import LogisticRegression >>> from sklearn.preprocessing import StandardScaler >>> from sklearn.pipeline import make_pipeline >>> from sklearn.ensemble import StackingClassifier >>> X, y = load_iris(return_X_y=True) >>> estimators = [ ... ('rf', RandomForestClassifier(n_estimators=10, random_state=42)), ... ('svr', make_pipeline(StandardScaler(), ... LinearSVC(random_state=42))) ... ] >>> clf = StackingClassifier( ... estimators=estimators, final_estimator=LogisticRegression() ... ) >>> from sklearn.model_selection import train_test_split >>> X_train, X_test, y_train, y_test = train_test_split( ... X, y, stratify=y, random_state=42 ... ) >>> clf.fit(X_train, y_train).score(X_test, y_test) 0.9...
- decision_function(X)[原始碼]#
使用最終估計器計算
X
中樣本的決策函數。- 參數:
- X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣
訓練向量,其中
n_samples
是樣本數,n_features
是特徵數。
- 返回:
- decisions形狀為 (n_samples,)、(n_samples, n_classes) 或 (n_samples, n_classes * (n_classes-1) / 2) 的 ndarray
最終估計器計算的決策函數。
- fit(X, y, *, sample_weight=None, **fit_params)[原始碼]#
擬合估計器。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣
訓練向量,其中
n_samples
是樣本數,n_features
是特徵數。- y形狀為 (n_samples,) 的類陣列
目標值。請注意,
y
將在內部以數值遞增或字典順序進行編碼。如果順序很重要(例如,對於序數迴歸),則應在呼叫 fit 之前以數值方式編碼目標y
。- sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None
樣本權重。如果為 None,則樣本的權重相等。請注意,只有在所有底層估計器都支援樣本權重時才支援此功能。
- **fit_params字典
要傳遞到底層估計器的參數。
1.6 版本新增: 僅在
enable_metadata_routing=True
時可用,可以使用sklearn.set_config(enable_metadata_routing=True)
設定。有關詳細資訊,請參閱 中繼資料路由使用者指南。
- 返回:
- self物件
返回估計器的已擬合實例。
- fit_transform(X, y=None, **fit_params)[原始碼]#
擬合資料,然後轉換它。
使用可選參數
fit_params
將轉換器擬合到X
和y
,並返回X
的轉換版本。- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
輸入樣本。
- y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列,預設值為 None
目標值(對於無監督轉換為 None)。
- **fit_params字典
額外的擬合參數。
- 返回:
- X_new形狀為 (n_samples, n_features_new) 的 ndarray 陣列
轉換後的陣列。
- get_feature_names_out(input_features=None)[原始碼]#
取得轉換的輸出特徵名稱。
- 參數:
- input_features字串的類陣列或 None,預設值為 None
輸入特徵。只有在
passthrough
為True
時才使用輸入特徵名稱。如果
input_features
為None
,則使用feature_names_in_
作為輸入特徵名稱。如果未定義feature_names_in_
,則會產生名稱:[x0, x1, ..., x(n_features_in_ - 1)]
。如果
input_features
是類陣列,則如果已定義feature_names_in_
,則input_features
必須與feature_names_in_
相符。
如果
passthrough
為False
,則僅使用estimators
的名稱來產生輸出特徵名稱。
- 返回:
- feature_names_out字串物件的 ndarray
轉換後的特徵名稱。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查閱使用者指南,了解路由機制如何運作。
於 1.6 版本新增。
- 返回:
- routingMetadataRouter
一個封裝路由資訊的
MetadataRouter
。
- get_params(deep=True)[原始碼]#
從集成模型取得估計器的參數。
返回建構子中提供的參數,以及包含在
estimators
參數中的估計器。- 參數:
- deepbool,預設值為 True
設定為 True 時,會取得各個估計器以及估計器的參數。
- 返回:
- paramsdict
參數和估計器名稱對應到其值,或參數名稱對應到其值。
- property named_estimators#
可透過名稱存取任何已擬合的子估計器的字典。
- 返回:
- predict(X, **predict_params)[原始碼]#
預測 X 的目標值。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣
訓練向量,其中
n_samples
是樣本數,n_features
是特徵數。- **predict_paramsstr -> obj 的字典
傳遞給
final_estimator
呼叫的predict
的參數。 請注意,這可能用於從某些具有return_std
或return_cov
的估計器返回不確定性。 請注意,它只會考慮最終估計器的不確定性。如果
enable_metadata_routing=False
(預設值):參數直接傳遞給final_estimator
的predict
方法。如果
enable_metadata_routing=True
:參數會安全地路由到final_estimator
的predict
方法。 有關更多詳細信息,請參閱中繼資料路由使用者指南。
變更於 1.6 版本:
**predict_params
可以透過中繼資料路由 API 路由。
- 返回:
- y_pred形狀為 (n_samples,) 或 (n_samples, n_output) 的 ndarray
預測的目標值。
- predict_proba(X)[原始碼]#
使用最終估計器預測
X
的類別機率。- 參數:
- X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣
訓練向量,其中
n_samples
是樣本數,n_features
是特徵數。
- 返回:
- probabilities形狀為 (n_samples, n_classes) 的 ndarray 或形狀為 (n_output,) 的 ndarray 列表
輸入樣本的類別機率。
- score(X, y, sample_weight=None)[原始碼]#
返回給定測試資料和標籤的平均準確度。
在多標籤分類中,這是子集準確度,這是一個嚴苛的指標,因為您需要每個樣本的每個標籤集都被正確預測。
- 參數:
- X形狀為 (n_samples, n_features) 的類陣列
測試樣本。
- y形狀為 (n_samples,) 或 (n_samples, n_outputs) 的類陣列
X
的真實標籤。- sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None
樣本權重。
- 返回:
- scorefloat
self.predict(X)
相對於y
的平均準確度。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') StackingClassifier [原始碼]#
請求傳遞至
fit
方法的中繼資料。請注意,此方法僅在
enable_metadata_routing=True
時相關(請參閱sklearn.set_config
)。請參閱 使用者指南,以了解路由機制的運作方式。每個參數的選項如下:
True
:請求中繼資料,如果提供,則將其傳遞至fit
。如果未提供中繼資料,則會忽略請求。False
:不請求中繼資料,且 meta-estimator 不會將其傳遞至fit
。None
:不請求中繼資料,如果使用者提供,則 meta-estimator 會引發錯誤。str
:中繼資料應使用此給定的別名傳遞至 meta-estimator,而不是原始名稱。
預設值 (
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_output(*, transform=None)[原始碼]#
設定輸出容器。
請參閱 介紹 set_output API,以取得有關如何使用 API 的範例。
- 參數:
- transform{“default”, “pandas”, “polars”}, 預設值為 None
設定
transform
和fit_transform
的輸出。"default"
: 轉換器的預設輸出格式"pandas"
:DataFrame 輸出"polars"
:Polars 輸出None
:轉換組態不變
在 1.4 版本中新增: 新增了
"polars"
選項。
- 返回:
- self估計器實例
估計器實例。
- set_params(**params)[原始碼]#
設定來自集成模型的估計器的參數。
可以使用
get_params()
列出有效的參數鍵。請注意,您可以直接設定estimators
中包含的估計器的參數。- 參數:
- **params關鍵字引數
使用例如
set_params(parameter_name=new_value)
的特定參數。此外,除了設定估計器的參數之外,還可以設定 estimators 的個別估計器,或者可以將其設定為 'drop' 以移除它們。
- 返回:
- self物件
估計器實例。
- set_score_request(*, sample_weight: bool | None | str = '$UNCHANGED$') StackingClassifier [原始碼]#
請求傳遞至
score
方法的中繼資料。請注意,此方法僅在
enable_metadata_routing=True
時相關(請參閱sklearn.set_config
)。請參閱 使用者指南,以了解路由機制的運作方式。每個參數的選項如下:
True
:請求中繼資料,如果提供,則將其傳遞至score
。如果未提供中繼資料,則會忽略請求。False
:不請求元數據,且元估計器不會將其傳遞給score
。None
:不請求中繼資料,如果使用者提供,則 meta-estimator 會引發錯誤。str
:中繼資料應使用此給定的別名傳遞至 meta-estimator,而不是原始名稱。
預設值 (
sklearn.utils.metadata_routing.UNCHANGED
) 會保留現有的請求。這允許您變更某些參數的請求,而不變更其他參數的請求。在 1.3 版本中新增。
注意
僅當此估計器用作 meta-estimator 的子估計器時,此方法才相關,例如在
Pipeline
中使用。否則,它沒有任何作用。- 參數:
- sample_weightstr、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED
在
score
中,針對sample_weight
參數的元數據路由。
- 返回:
- self物件
更新後的物件。