堆疊分類器#

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

用於所有 estimatorsfit 中平行運行的作業數量。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_字串列表

每個基礎估計器使用的方法。

另請參閱

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 將轉換器擬合到 Xy,並返回 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

輸入特徵。只有在 passthroughTrue 時才使用輸入特徵名稱。

  • 如果 input_featuresNone,則使用 feature_names_in_ 作為輸入特徵名稱。如果未定義 feature_names_in_,則會產生名稱:[x0, x1, ..., x(n_features_in_ - 1)]

  • 如果 input_features 是類陣列,則如果已定義 feature_names_in_,則 input_features 必須與 feature_names_in_ 相符。

如果 passthroughFalse,則僅使用 estimators 的名稱來產生輸出特徵名稱。

返回:
feature_names_out字串物件的 ndarray

轉換後的特徵名稱。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查閱使用者指南,了解路由機制如何運作。

於 1.6 版本新增。

返回:
routingMetadataRouter

一個封裝路由資訊的 MetadataRouter

get_params(deep=True)[原始碼]#

從集成模型取得估計器的參數。

返回建構子中提供的參數,以及包含在 estimators 參數中的估計器。

參數:
deepbool,預設值為 True

設定為 True 時,會取得各個估計器以及估計器的參數。

返回:
paramsdict

參數和估計器名稱對應到其值,或參數名稱對應到其值。

property n_features_in_#

fit 期間看到的特徵數量。

property named_estimators#

可透過名稱存取任何已擬合的子估計器的字典。

返回:
數據集包裹 (Bunch)
predict(X, **predict_params)[原始碼]#

預測 X 的目標值。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

訓練向量,其中 n_samples 是樣本數,n_features 是特徵數。

**predict_paramsstr -> obj 的字典

傳遞給 final_estimator 呼叫的 predict 的參數。 請注意,這可能用於從某些具有 return_stdreturn_cov 的估計器返回不確定性。 請注意,它只會考慮最終估計器的不確定性。

  • 如果 enable_metadata_routing=False(預設值):參數直接傳遞給 final_estimatorpredict 方法。

  • 如果 enable_metadata_routing=True:參數會安全地路由到 final_estimatorpredict 方法。 有關更多詳細信息,請參閱中繼資料路由使用者指南

變更於 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

設定 transformfit_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物件

更新後的物件。

transform(X)[來源]#

針對每個估計器,傳回 X 的類別標籤或機率。

參數:
X形狀為 (n_samples, n_features) 的類陣列或稀疏矩陣

訓練向量,其中 n_samples 是樣本數,n_features 是特徵數。

返回:
y_preds形狀為 (n_samples, n_estimators) 或 (n_samples, n_classes * n_estimators) 的 ndarray

每個估計器的預測輸出。