2015-06-18 12 views
5

Secondo sklearn.pipeline.Pipeline documentazione,Accesso alle funzioni di trasformazione in `condotte sklearn`

La conduttura ha tutti i metodi che l'ultimo stimatore nella pipeline è, vale a dire se l'ultimo stimatore è un classificatore, la tubazione può essere usato come classificatore. Se l'ultimo stimatore è un trasformatore, anche in questo caso è la pipeline.

L'esempio seguente crea un trasformatore fittizio con un costume, funzione fittizia 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())]) 

mi aspettavo di essere in grado di accedere alla funzione f del trasformatore C, tuttavia rimettere ppl.f() risultati in AttributeError: 'Pipeline' object has no attribute 'f'

Sto interpretando male la documentazione? Esiste un modo valido e affidabile per accedere alle funzioni dell'ultimo trasformatore?

risposta

4

La documentazione Pipeline sovrastima leggermente le cose. Ha tutti gli stimoli del suo ultimo stimatore. Questi includono cose come predict(), fit_predict(), fit_transform(), transform(), decision_function(), predict_proba()....

Non è possibile utilizzare altre funzioni, perché non saprebbe cosa fare con tutti gli altri passaggi nella pipeline. Per la maggior parte delle situazioni, si passa (X) o eventualmente (X,y) e X e/o y devono passare attraverso ogni catena nella pipeline con fit_transform() o transform().

E 'abbastanza facile per accedere all'ultimo stimatore, in questo modo:

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

Ma ricordate che così facendo bypassa i passaggi precedenti nella pipeline (cioè, se si passa X, non lo farà essere ridimensionato con il tuo StandardScaler o qualsiasi altra cosa tu stia facendo in precedenza nella pipeline.)

Problemi correlati