根据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'
我是否误解了文档?是否有一种良好可靠的方式来访问最后一个变压器的功能?
答案 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>