2015-06-18 7 views
5

Nach sklearn.pipeline.Pipeline DokumentationZugriff Transformator Funktionen in `sklearn` Pipelines

Die Pipeline hat alle Methoden, die der letzten Schätzer in der Pipeline hat, das heißt, wenn der letzte Schätzer ein Klassifikator ist, kann die Pipeline sein als Klassifikator verwendet. Wenn der letzte Schätzer ein Transformator ist, gilt dies auch für die Pipeline.

Im folgenden Beispiel wird ein Dummy-Transformator mit einem benutzerdefinierten, Dummy-Funktion 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())]) 

Ich erwartete die f Funktion des C Transformator jedoch ppl.f() Ergebnisse in AttributeError: 'Pipeline' object has no attribute 'f' Aufruf zugreifen zu können,

Fehle ich die Dokumentation falsch? Gibt es eine gute und zuverlässige Möglichkeit, auf die Funktionen des letzten Transformators zuzugreifen?

Antwort

4

Die Pipeline Dokumentation übertreibt etwas. Es hat alle Schätzer Methoden seiner letzten Schätzer. Dazu gehören Dinge wie predict(), fit_predict(), fit_transform(), transform(), decision_function(), predict_proba()....

Es kann keine anderen Funktionen verwenden, weil es nicht weiß, was mit all den anderen Schritten in der Pipeline zu tun ist. Für die meisten Situationen übergeben Sie (X) oder möglicherweise (X,y), und X und/oder y müssen jede Kette in der Pipeline entweder mit fit_transform() oder transform() durchlaufen.

Es ist ziemlich einfach, die letzte Schätzer zuzugreifen, wie folgt aus:

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

Aber denken Sie daran, dass dies in der Pipeline die vorherigen Schritte unter Umgehung (dh, wenn Sie es X passieren, wird es nicht skaliert werden mit Ihrem StandardScaler oder was auch immer Sie früher in der Pipeline tun.)

Verwandte Themen