2015-06-18 4 views
5

Согласно sklearn.pipeline.Pipeline документации,Доступ к функции трансформатора в `sklearn` трубопроводов

Трубопровод имеет все методы, которые последний оценщик в трубопроводе имеет, то есть, если последняя оценка является классификатор, трубопровод может быть используется как классификатор. Если последняя оценка является трансформатором, опять же, так же как и конвейер.

В следующем примере создается фиктивный трансформатор с обычаем, фиктивная функцией 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'

Я неверно истолковал документацию? Есть ли хороший и надежный способ доступа к последним функциям трансформатора?

ответ

4

Документация Pipeline несколько завышена. Он имеет все оценки его последней оценки. К ним относятся такие вещи, как predict(), fit_predict(), fit_transform(), transform(), decision_function(), predict_proba()....

Он не может использовать какие-либо другие функции, поскольку он не знает, что делать со всеми другими шагами в конвейере. В большинстве случаев вы проходите (X) или, возможно, (X,y), а X и/или y должны проходить через каждую цепь в трубопроводе либо с fit_transform(), либо transform().

Это довольно легко получить доступ к последнему оценщику, как это:

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

Но помните, что делать это в обходе предыдущих шагов в трубопроводе (то есть, если вы передаёте X, он не будет масштабироваться с помощью стандартного калькулятора или любого другого, что вы делаете ранее в конвейере.)

Смежные вопросы