我正在尝试了解scikit-learn
管道。
根据 scikit 用户指南中的注释,管道“具有管道中最后一个估计器具有的所有方法”。
因此,我使用名为 的方法编写了自己的估计器类myfun
,使用此类的对象作为新 Pipeline 实例中的最后一步,并调用myfun
它:
class MyEstimator:
def __init__(self):
pass
def fit(self, X, y):
return self
def myfun(self):
return None
from sklearn.pipeline import make_pipeline
pipe = make_pipeline(MyEstimator())
pipe.myfun()
这导致出现以下错误消息:
pipe.myfun()
^^^^^^^^^^
AttributeError: 'Pipeline' object has no attribute 'myfun'
显然与用户指南的声明相反,管道并不具有管道中最后一个估计器所具有的所有方法。
所以我想知道:管道的最后一个估计器有哪些方法(更准确地说,方法签名)?
它具有API 文档“方法”部分中列表的子集;子集由最终估计器具有的方法确定。(它总是有一些,例如从 继承的
BaseEstimator
。)在源码中,你可以通过装饰器来识别这些方法
@available_if
,例如https://github.com/scikit-learn/scikit-learn/blob/d99b728b3a7952b2111cf5e0cb5d14f92c6f3a80/sklearn/pipeline.py#L483