2016-06-17 1 views
1

у меня есть данные на два этапе:Объединение два подогнанных оценщиков в трубопровод

import numpy as np 

data_pre = np.array([[1., 2., 203.], 
        [0.5, np.nan, 208.]]) 

data_post = np.array([[2., 2., 203.], 
         [0.5, 2., 208.]]) 

У меня также есть две уже существующие встроенные оценщики:

from sklearn.preprocessing import Imputer 
from sklearn.ensemble import GradientBoostingRegressor 

imp = Imputer(missing_values=np.nan, strategy='mean', axis=1).fit(data_pre) 
gbm = GradientBoostingRegressor().fit(data_post[:,:2], data_post[:,2]) 

мне нужно пройти подогнанный трубопровод и data_pre к другой функции.

def the_function_i_need(estimators): 
    """ 
    """ 
    return fitted pipeline 

fitted_pipeline = the_function_i_need([imp, gbm]) 
sweet_output = static_function(fitted_pipeline, data_pre) 

Есть ли способ объединить эти два существующие и встроенная модель объектов в подогнанный трубопровод без переоборудования модели или я не повез?

ответ

2

Я попытался изучить это. Я не мог найти простого способа сделать это.

Единственный способ, который я чувствую, - написать Custom Transformer, который служит оберткой над существующим Imputer и GradientBoostingRegressor. Вы можете инициализировать оболочку с уже установленным Regressor и/или Imputer. Затем вы можете отменить вызов до fit, не делая ничего в этом. Во всех последующих вызовах transform вы можете позвонить transform базовой модели. Это грязный способ сделать это, и его нельзя делать до тех пор, пока это не будет очень важно для вашего приложения. Хороший учебник по написанию пользовательских классов для Scikit-Learn Pipelines можно найти here. Другой рабочий пример пользовательских объектов конвейера из документации scikit-learn можно найти here.

+0

Это в основном то, что я делал, но, согласен, это немного грязно, поэтому я оставил вопрос на случай, если кто-то найдет что-то лучше. Он работает, и он наполняет мои потребности, просто чувствует себя немного рискованным. Спасибо, что посмотрели! – Chris

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