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
用於並行執行所有
estimators
的fit
的作業數量。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
輸入特徵。只有在
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()[原始碼]#
取得此物件的中繼資料路由 (metadata routing)。
請參考 使用者指南 了解路由機制如何運作。
1.6 版本新增。
- 傳回值:
- routing MetadataRouter
一個封裝路由資訊的
MetadataRouter
。
- get_params(deep=True)[原始碼]#
取得集成 (ensemble) 中估算器的參數。
回傳建構函式中給定的參數,以及
estimators
參數中包含的估算器。- 參數:
- deep 布林值,預設為 True
設定為 True 會取得各個估算器以及估算器的參數。
- 傳回值:
- params 字典
參數和估算器名稱對應到它們的值,或是參數名稱對應到它們的值。
- predict(X, **predict_params)[原始碼]#
預測 X 的目標值。
- 參數:
- X形狀為 (n_samples, n_features) 的 {類陣列, 稀疏矩陣}
訓練向量,其中
n_samples
是樣本數,n_features
是特徵數。- **predict_params 字串 -> 物件的字典
傳遞給
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
預測的目標值。
- 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
fit
中sample_weight
參數的中繼資料路由。
- 傳回值:
- self物件
更新後的物件。
- set_output(*, transform=None)[原始碼]#
設定輸出容器。
有關如何使用 API 的範例,請參閱 導入 set_output 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$') 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
用於
score
中sample_weight
參數的中繼資料路由。
- 傳回值:
- self物件
更新後的物件。