在`sklearn`管道中访问变换器函数

时间:2015-06-18 17:48:11

标签: python scikit-learn

根据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())])

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

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

1 个答案:

答案 0 :(得分:4)

Pipeline文档略微夸大了事情。它具有最后一个估算器的所有 estimator 方法。其中包括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或您之前在管道中执行的任何操作。)< / p>