Estou tentando entender scikit-learn
Pipelines.
De acordo com uma nota no guia do usuário do scikit, um pipeline "possui todos os métodos que o último estimador do pipeline possui".
Então escrevi minha própria classe de estimador com um método chamado myfun
, usei um objeto desta classe como a última etapa em uma nova instância de Pipeline e chamei- myfun
o:
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()
Isso resultou na seguinte mensagem de erro:
pipe.myfun()
^^^^^^^^^^
AttributeError: 'Pipeline' object has no attribute 'myfun'
Evidentemente, ao contrário das afirmações do guia do usuário, um pipeline não possui todos os métodos que o último estimador do pipeline possui.
Então eu me pergunto: quais métodos (mais precisamente, assinaturas de métodos) de seu último estimador um pipeline possui?
Possui um subconjunto da lista na seção "Métodos" dos documentos da API ; o subconjunto é determinado por quais métodos o estimador final possui. (Sempre tem alguns, por exemplo, aqueles herdados de
BaseEstimator
.)No código fonte, você pode identificar esses métodos pelo decorador
@available_if
, por exemplohttps://github.com/scikit-learn/scikit-learn/blob/d99b728b3a7952b2111cf5e0cb5d14f92c6f3a80/sklearn/pipeline.py#L483