【问题标题】:Accessing transformer functions in `sklearn` pipelines在“sklearn”管道中访问转换器函数
【发布时间】:2015-06-19 22:03:42
【问题描述】:

根据sklearn.pipeline.Pipeline文档,

管道具有管道中最后一个估计器所具有的所有方法,即如果最后一个估计器是分类器,则管道可以用作分类器。如果最后一个估计器是转换器,那么管道也是。

以下示例使用自定义虚拟函数 f 创建一个虚拟转换器:

class C:
    def fit(self, X, y=None):
        print('fit')
        return self
    def transform(self, X):
        print('transform')
        return X

    def f(self):
        print('abc')

from sklearn.pipeline import Pipeline
ppl = Pipeline([('C', C())])

我希望能够访问C 转换器的f 函数,但是调用ppl.f() 会导致AttributeError: 'Pipeline' object has no attribute 'f'

我是否误解了文档?有没有一种可靠的方法来访问最后一个变压器的功能?

【问题讨论】:

    标签: python scikit-learn


    【解决方案1】:

    Pipeline 文档稍微夸大了一些东西。它具有其最后一个估计器的所有 估计器 方法。其中包括predict(), fit_predict(), fit_transform(), transform(), decision_function(), predict_proba()... 之类的内容。

    它不能使用任何其他功能,因为它不知道如何处理管道中的所有其他步骤。在大多数情况下,您传递(X) 或可能(X,y),并且X 和/或y 必须使用fit_transform()transform() 通过管道中的每个链。

    访问最后一个估算器相当容易,如下所示:

    ppl.steps[-1][1].f()
    

    但请记住,这样做会绕过管道中的先前步骤(即,如果您将其传递给 X,它将不会使用您的 StandardScaler 或您在管道中早期执行的任何操作进行缩放。)

    【讨论】:

      猜你喜欢
      • 2017-01-17
      • 2021-03-09
      • 2020-04-16
      • 2019-09-30
      • 2020-12-20
      • 2020-12-29
      • 2016-03-26
      • 2018-01-09
      • 2018-02-16
      相关资源
      最近更新 更多