在我的問題中,我想用一個簡單的RandomizedSearchCV調整器來調整sklearn.ensemble.StackingRegressor。由于我們需要在實體化StackingRegressor()時定義估計器,我無法在我的param_distribution randomizedsearch中正確定義估計器的引數空間。
我嘗試了下面的方法,但我遇到了錯誤:
from sklearn.datasets import load_diabetes
from sklearn.linear_model import RidgeCV
from sklearn.svm import LinearSVR
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestRegressor,
梯度提升壓限器(GradientBoostingRegressor)
from sklearn.ensemble import StackingRegressor
X, y = load_diabetes(return_X_y=True)
rfr = RandomForestRegressor()
gbr = GradientBoostingRegressor()
估計器 = [rfr, gbr]
sreg = StackingRegressor(imposators=estimators)
params = {'rfr__max_depth': [3, 5, 10, 100] 。
'gbr__max_depth': [3, 5, 10, 100]] }
grid = RandomizedSearchCV(estimator=sreg,
param_distributions=params,
cv=3)
grid.fit(X,y)
我面臨著錯誤 AttributeError: 'RandomForestRegressor' object has no attribute 'estimators_'。
是否有辦法在StackingRegressor中調整不同估計器的引數?
uj5u.com熱心網友回復:
如果你把你的估計器定義為一個估計器名稱和估計器實體的圖元串列,如下所示,你的代碼應該可以作業。
import pandas as pd
from sklearn.datasets import load_diabetes
from sklearn.model_selection import RandomizedSearchCV
from sklearn.ensemble import RandomForestRegressor, GradientBoostingRegressor
from sklearn.ensemble import StackingRegressor
X, y = load_diabetes(return_X_y=True)
rfr = RandomForestRegressor()
gbr = GradientBoostingRegressor()
estimators = [('rfr', rfr), ('gbr', gbr)]
sreg = StackingRegressor(estimators=估算器)
params = {
'rfr__max_depth': [3, 5] 。
'gbr__max_depth': [3, 5]
}
grid = RandomizedSearchCV(
estimator=sreg,
param_distributions=params,
n_iter=2,
cv=3,
verbose=1。
random_state=100。
)
grid.fit(X, y)
res = pd.DataFrame(grid.cv_results_)
print(res)
# mean_fit_time std_fit_time ... std_test_score rank_test_score。
# 0 1.121728 0.024188 ... 0.024546 2
# 1 1.096936 0.034377 ... 0.013047 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/329652.html
標籤:
上一篇:動態陣列創建中的分段錯誤
