如何从 scikit-learn 中的 TransformedTargetRegressor 管道中的经过训练的估计器访问属性?

Posted

技术标签:

【中文标题】如何从 scikit-learn 中的 TransformedTargetRegressor 管道中的经过训练的估计器访问属性?【英文标题】:How to access attribute from a trained estimator in TransformedTargetRegressor pipeline in scikit-learn? 【发布时间】:2020-10-14 09:45:09 【问题描述】:

我使用 scikit-Learn 设置了一个小型管道,我将其包裹在 TransforedTargetRegressor 对象中。训练结束后,我想从训练有素的估计器中访问属性(例如feature_importances_)。谁能告诉我这是怎么做到的?

from sklearn.pipeline import Pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.ensemble import RandomForestRegressor
from sklearn.preprocessing import MinMaxScaler
from sklearn.compose import TransformedTargetRegressor

# setup the pipeline
Pipeline(steps = [('scale', StandardScaler(with_mean=True, with_std=True)),
                  ('estimator', RandomForestRegressor())])

# tranform target variable
model = TransformedTargetRegressor(regressor=pipeline, 
                                   transformer=MinMaxScaler())
           
# fit model
model.fit(X_train, y_train)

我尝试了以下方法:

# try to access the attribute of the fitted estimator
model.get_params()['regressor__estimator'].feature_importances_
model.regressor.named_steps['estimator'].feature_importances_

但这会导致以下NotFittedError

NotFittedError:此 RandomForestRegressor 实例尚未拟合。 在使用此方法之前,使用适当的参数调用“fit”。

【问题讨论】:

【参考方案1】:

当您查看TransformedTargetRegressor 的文档时,它说属性.regressor_(注意结尾的下划线)返回fitted 回归量。因此,您的调用应如下所示:

model.regressor_.named_steps['estimator'].feature_importances_

您之前的调用只是返回了一个不合适的克隆。这就是错误的来源。

【讨论】:

感谢您的提示!您提出的代码 sn-p 返回了“TypeError: 'Pipeline' object is not subscriptable”。但是,根据您的回答,我发现“model.regressor_.named_steps['estimator'].feature_importances_”有效!

以上是关于如何从 scikit-learn 中的 TransformedTargetRegressor 管道中的经过训练的估计器访问属性?的主要内容,如果未能解决你的问题,请参考以下文章

您如何使用 scikit-learn 中的惯性计算差距统计的标准偏差?

如何将模型 (GLM) 从 h2o 移植到 scikit-learn?

如何防止一个高度相关的变量淹没 scikit-learn 中的其余变量?

从 scikit-learn 中的文件加载决策树

从 scikit-learn 中的 one-hot-encoding 回溯分类特征?

默认过滤器中的 Django trans 标记