使用 sklearn Pipeline 和 MultiOutputRegressor 访问属性

Posted

技术标签:

【中文标题】使用 sklearn Pipeline 和 MultiOutputRegressor 访问属性【英文标题】:Access attributes with sklearn Pipeline and MultiOutputRegressor 【发布时间】:2020-02-12 00:11:36 【问题描述】:

假设一个机器学习模型,比如 LightGBM 的LGBMRegressor,有一个属性best_iteration_。在调用fit 方法后如何访问此属性,从而利用了sklearn 的PipelineMultiOutputRegressor

对于Pipeline,我试过named_steps

foo.named_steps['reg']

返回以下对象sklearn.multioutput.MultiOutputRegressor.

然后,我尝试了.estimators_

foo.named_steps['reg'].estimators_

返回一个列表。但是,该列表包含提供给模型的初始参数。

有人能解释一下访问模型属性的理想方式吗?

【问题讨论】:

这可能是解决方案的一部分:***.com/questions/28822756/… 【参考方案1】:

我假设foo 是一个 sklearn 管道对象,如果是这样,您可能可以这样做:

for e in foo.named_steps['reg'].estimators_:
    print(e.best_iteration_)
foo.named_steps['reg'].estimators_ 返回估算器列表 MultiOutputRegressor 内部。 e 是您使用的 LGBMRegressor 在 MultiOutputRegressor 内部。

您可以将best_iteration_ 替换为您想要访问的模型的任何属性。

【讨论】:

是的,foo 的类型为 sklearn.pipeline.Pipeline。但是,我尝试了您的for 循环建议,并返回了None 根据documentation,我引用:The best iteration of fitted model if early_stopping_rounds has been specified.你需要指定early_stopping_rounds否则它会返回None。

以上是关于使用 sklearn Pipeline 和 MultiOutputRegressor 访问属性的主要内容,如果未能解决你的问题,请参考以下文章

sklearn.pipeline.Pileline

如何使用 sklearn.pipeline 转换新数据

从 sklearn.pipeline.Pipeline 获取转换器结果

无法使用 Sklearn 和 Keras Wrappers 使 pipeline.fit() 工作

将 Sklearn GridSearchCV 与 Pipeline 一起使用时如何传递权重

Sklearn ColumnTransformer + Pipeline = TypeError