【发布时间】:2021-11-23 11:17:46
【问题描述】:
我想对我的随机森林中的一棵树进行预测。但是,如果我将管道包裹在 TransformedTargetRegressor 周围,.set_params 似乎不起作用。
请在下面找到一个示例:
from sklearn.datasets import load_boston
from sklearn.compose import TransformedTargetRegressor
from sklearn.pipeline import Pipeline
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import StandardScaler
# loading data
boston = load_boston()
X = boston["data"]
Y = boston["target"]
# pipeline and training
pipe = Pipeline([
('scaler', StandardScaler()),
('model', RandomForestRegressor(n_estimators = 100, max_depth = 4, random_state = 0))
])
treg = TransformedTargetRegressor(regressor=pipe, transformer=StandardScaler())
treg.fit(X, Y)
# single tree from random forest
tree = treg.regressor_.named_steps['model'].estimators_[0]
x_sample = X[0:1]
print('baseline: ', treg.predict(x_sample))
x_scaled = treg.regressor_.named_steps['scaler'].transform(x_sample)
y_predicted = tree.predict(x_scaled)
y_transformed = treg.transformer_.inverse_transform([y_predicted])
print("internal pipeline changes: ", y_transformed)
new_model = treg.set_params(**{'regressor__model': tree})
y_predicted = new_model.predict(x_sample)
print('with set_params(): ', y_predicted)
我得到的输出如下所示。我希望“with set_params()”与“内部管道更改”相同:
基线:[26.41013313]
内部管道更改:[[30.02424242]]
使用 set_params():[26.41013313]
【问题讨论】:
标签: python scikit-learn pipeline random-forest