StackingRegressor#

class sklearn.ensemble.StackingRegressor(estimators, final_estimator=None, *, cv=None, n_jobs=None, passthrough=False, verbose=0)[原始碼]#

具有最終迴歸器的估計器堆疊。

堆疊泛化包含堆疊個別估計器的輸出,並使用迴歸器來計算最終預測。堆疊允許利用每個個別估計器的優勢,將其輸出作為最終估計器的輸入。

請注意,estimators_ 是在完整的 X 上擬合的,而 final_estimator_ 則使用基本估計器的交叉驗證預測,利用 cross_val_predict 進行訓練。

使用者指南中閱讀更多內容。

在 0.22 版本中新增。

參數:
estimatorslist of (str, estimator)

將堆疊在一起的基本估計器。列表中的每個元素都定義為字串(即名稱)和估計器實例的元組。可以使用 set_params 將估計器設定為「drop」。

final_estimatorestimator,預設值為 None

用來組合基礎估計器的迴歸器。預設的迴歸器是 RidgeCV

cvint、交叉驗證產生器、可迭代物件或 “prefit”,預設值為 None

決定在 cross_val_predict 中用於訓練 final_estimator 的交叉驗證分割策略。cv 的可能輸入包括:

  • None,使用預設的 5 折交叉驗證,

  • 整數,指定 (Stratified) KFold 中的折數,

  • 用作交叉驗證產生器的物件,

  • 產生訓練集、測試集分割的可迭代物件,

  • "prefit",假設 estimators 已預先擬合。在這種情況下,估計器將不會重新擬合。

對於整數/None 輸入,如果估計器是分類器且 y 是二元或多類別,則使用 StratifiedKFold。在所有其他情況下,使用 KFold。這些分割器以 shuffle=False 實例化,因此分割在不同呼叫之間會保持一致。

請參閱 使用者指南,了解此處可以使用的各種交叉驗證策略。

如果傳遞 “prefit”,則假設所有 estimators 都已擬合。 final_estimator_ 在完整訓練集上 estimators 的預測結果上進行訓練,並且**不**使用交叉驗證的預測。請注意,如果模型在用於訓練堆疊模型的相同資料上進行訓練,則存在非常高的過度擬合風險。

在 1.1 版中新增:在 1.1 版中新增了 ‘prefit’ 選項

注意

如果訓練樣本的數量足夠大,則較大的分割數將不會帶來任何好處。實際上,訓練時間會增加。 cv 不用於模型評估,而是用於預測。

n_jobsint,預設值為 None

用於並行執行所有 estimatorsfit 的作業數量。 None 表示 1,除非在 joblib.parallel_backend 環境中。 -1 表示使用所有處理器。請參閱 詞彙表 以了解更多詳細資訊。

passthroughbool,預設值為 False

當 False 時,只有估計器的預測將被用作 final_estimator 的訓練資料。當 True 時,final_estimator 在預測以及原始訓練資料上進行訓練。

verboseint,預設值為 0

詳細程度。

屬性:
estimators_估計器列表

estimators 參數的元素,已在訓練資料上擬合。如果估計器已設定為 'drop',則它不會出現在 estimators_ 中。當 cv="prefit" 時,estimators_ 會設定為 estimators,並且不會再次擬合。

named_estimators_Bunch

按名稱存取任何已擬合子估計器的屬性。

n_features_in_int

fit 期間看到的特徵數量。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅當基礎估計器在擬合時公開此屬性時才會定義。

在 1.0 版中新增。

final_estimator_估計器

estimators_ 的輸出上擬合的迴歸器,負責最終預測。

stack_method_str 列表

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

另請參閱

StackingClassifier

具有最終分類器的估計器堆疊。

參考文獻

[1]

Wolpert, David H. “Stacked generalization.” Neural networks 5.2 (1992): 241-259.

範例

>>> from sklearn.datasets import load_diabetes
>>> from sklearn.linear_model import RidgeCV
>>> from sklearn.svm import LinearSVR
>>> from sklearn.ensemble import RandomForestRegressor
>>> from sklearn.ensemble import StackingRegressor
>>> X, y = load_diabetes(return_X_y=True)
>>> estimators = [
...     ('lr', RidgeCV()),
...     ('svr', LinearSVR(random_state=42))
... ]
>>> reg = StackingRegressor(
...     estimators=estimators,
...     final_estimator=RandomForestRegressor(n_estimators=10,
...                                           random_state=42)
... )
>>> from sklearn.model_selection import train_test_split
>>> X_train, X_test, y_train, y_test = train_test_split(
...     X, y, random_state=42
... )
>>> reg.fit(X_train, y_train).score(X_test, y_test)
0.3...
fit(X, y, *, sample_weight=None, **fit_params)[原始碼]#

擬合估計器。

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

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

y形狀為 (n_samples,) 的類陣列

目標值。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

樣本權重。如果為 None,則樣本權重相等。請注意,只有當所有基礎估計器都支援樣本權重時,才支援此項。

**fit_params字典

要傳遞給基礎估計器的參數。

在 1.6 版中新增:只有在 enable_metadata_routing=True 時才可用,這可以使用 sklearn.set_config(enable_metadata_routing=True) 進行設定。請參閱 Metadata Routing 使用者指南 以了解更多詳細資訊。

傳回值:
self物件

傳回已擬合的實例。

fit_transform(X, y, *, sample_weight=None, **fit_params)[原始碼]#

擬合 (fit) 估算器 (estimators) 並回傳每個估算器對 X 的預測結果。

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

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

y形狀為 (n_samples,) 的類陣列

目標值。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

樣本權重。如果為 None,則樣本權重相等。請注意,只有當所有基礎估計器都支援樣本權重時,才支援此項。

**fit_params字典

要傳遞給基礎估計器的參數。

在 1.6 版中新增:只有在 enable_metadata_routing=True 時才可用,這可以使用 sklearn.set_config(enable_metadata_routing=True) 進行設定。請參閱 Metadata Routing 使用者指南 以了解更多詳細資訊。

傳回值:
y_preds 形狀為 (n_samples, n_estimators) 的 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()[原始碼]#

取得此物件的中繼資料路由 (metadata routing)。

請參考 使用者指南 了解路由機制如何運作。

1.6 版本新增。

傳回值:
routing MetadataRouter

一個封裝路由資訊的 MetadataRouter

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

取得集成 (ensemble) 中估算器的參數。

回傳建構函式中給定的參數,以及 estimators 參數中包含的估算器。

參數:
deep 布林值,預設為 True

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

傳回值:
params 字典

參數和估算器名稱對應到它們的值,或是參數名稱對應到它們的值。

property n_features_in_#

fit 期間看到的特徵數量。

property named_estimators#

可依名稱存取任何已擬合的子估算器的字典。

傳回值:
Bunch
predict(X, **predict_params)[原始碼]#

預測 X 的目標值。

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

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

**predict_params 字串 -> 物件的字典

傳遞給 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

預測的目標值。

score(X, y, sample_weight=None)[原始碼]#

回傳預測的決定係數。

決定係數 \(R^2\) 定義為 \((1 - \frac{u}{v})\),其中 \(u\) 是殘差平方和 ((y_true - y_pred)** 2).sum(),而 \(v\) 是總平方和 ((y_true - y_true.mean()) ** 2).sum()。最佳可能的分數是 1.0,而且可以是負數(因為模型可能任意地更差)。一個總是預測 y 期望值的常數模型,而忽略輸入特徵,會得到 0.0 的 \(R^2\) 分數。

參數:
X形狀類似陣列 (n_samples, n_features)

測試樣本。對於某些估算器,這可能是一個預先計算好的核心矩陣,或是形狀為 (n_samples, n_samples_fitted) 的通用物件列表,其中 n_samples_fitted 是估算器擬合時使用的樣本數。

y形狀類似陣列 (n_samples,) 或 (n_samples, n_outputs)

X 的真實值。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

樣本權重。

傳回值:
score浮點數

self.predict(X) 相對於 y\(R^2\)

注意事項

在迴歸器上呼叫 score 時使用的 \(R^2\) 分數,從 0.23 版開始使用 multioutput='uniform_average',以保持與 r2_score 的預設值一致。這會影響所有多輸出迴歸器的 score 方法(除了 MultiOutputRegressor)。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') StackingRegressor[原始碼]#

請求傳遞給 fit 方法的中繼資料。

請注意,只有在 enable_metadata_routing=True 時,此方法才相關(請參閱 sklearn.set_config)。有關路由機制如何運作,請參閱 使用者指南

每個參數的選項為:

  • True:請求中繼資料,如果提供了,則將其傳遞給 fit。如果未提供中繼資料,則會忽略該請求。

  • False:不請求中繼資料,並且元估算器不會將其傳遞給 fit

  • None:不請求中繼資料,如果使用者提供,元估算器會引發錯誤。

  • str:應該將中繼資料傳遞給元估算器,並使用此給定的別名,而不是原始名稱。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的請求。這允許您變更某些參數的請求,而不變更其他參數的請求。

在 1.3 版本中新增。

注意

只有當此估算器用作元估算器的子估算器時,此方法才相關,例如,在 Pipeline 中使用。否則,它沒有任何作用。

參數:
sample_weight字串、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

fitsample_weight 參數的中繼資料路由。

傳回值:
self物件

更新後的物件。

set_output(*, transform=None)[原始碼]#

設定輸出容器。

有關如何使用 API 的範例,請參閱 導入 set_output 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$') StackingRegressor[原始碼]#

請求傳遞到 score 方法的中繼資料。

請注意,只有在 enable_metadata_routing=True 時,此方法才相關(請參閱 sklearn.set_config)。有關路由機制如何運作,請參閱 使用者指南

每個參數的選項為:

  • True:請求中繼資料,如果提供了中繼資料,則會將其傳遞給 score。如果未提供中繼資料,則會忽略該請求。

  • False:不請求中繼資料,元估算器將不會將其傳遞給 score

  • None:不請求中繼資料,如果使用者提供,元估算器會引發錯誤。

  • str:應該將中繼資料傳遞給元估算器,並使用此給定的別名,而不是原始名稱。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的請求。這允許您變更某些參數的請求,而不變更其他參數的請求。

在 1.3 版本中新增。

注意

只有當此估算器用作元估算器的子估算器時,此方法才相關,例如,在 Pipeline 中使用。否則,它沒有任何作用。

參數:
sample_weight字串、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

用於 scoresample_weight 參數的中繼資料路由。

傳回值:
self物件

更新後的物件。

transform(X)[原始碼]#

傳回每個估算器對 X 的預測。

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

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

傳回值:
y_preds 形狀為 (n_samples, n_estimators) 的 ndarray

每個估算器的預測輸出。