Как запустить 2 конвейера параллельно в Scikit-Learn или Neuraxle? - PullRequest
2 голосов
/ 05 февраля 2020

Я хочу создать простой конвейер с neuraxle (я знаю, что могу использовать другие библиотеки, но я хочу использовать neuraxle), где я хочу очистить данные, разделить их, обучить 2 модели и сравнить их.

Я хочу, чтобы мой конвейер делал что-то вроде этого:

p = Pipeline([
    PreprocessData(),
    SplitData(),
    (some magic to start the training of both models with the split of the previous step)
    ("model1", model1(params))
    ("model2", model2(params))
    (evaluate)
])

Я не знаю, возможно ли это, потому что я ничего не нашел в документации.

Также я попытался использовать другие модели, отличные от sklearn (например, catboost, xgboost ...), и получаю ошибку

AttributeError: «У объекта CatBoostRegressor нет атрибута» setup '

Я думал о создании класса для моделей, но я не буду использовать гиперпарам поиска neuraxle

1 Ответ

1 голос
/ 22 февраля 2020

Да! Вы можете сделать что-то вроде этого:

p = Pipeline([
    PreprocessData(),
    ColumnTransformer([
        (0, model1(params)),  # Model 1 will receive Column 0 of data
        ([1, 2], model2(params)),  # Model 2 will receive Column 1 and 2 of data
    ], n_dimension=2, n_jobs=2),
    (evaluate)
])

Поток данных будет разделен на две части.

n_jobs=2 должен создать два потока. Также возможно передать пользовательский класс для объединения данных, используя аргумент joiner. Мы скоро выпустим некоторые изменения, так что это должно работать правильно. На данный момент конвейер работает с 1 потоком.

Что касается вашей CatBoostRegressor модели, которая похожа на sklearn, но не происходит от sklearn, можете ли вы попытаться сделать SKLearnWrapper(model1(params)) вместо простого model1(params) при объявлении вашей модели в конвейере? Возможно, что Neuraxle не распознал модель как модель scikit-learn (которая является объектом BaseEstimator в scikit-learn), даже если ваш объект имел тот же API, что и BaseEstimator scikit-learn. Таким образом, вам может понадобиться использовать SKLearnWrapper вручную для вашей модели или кодировать вашу собственную подобную оболочку для адаптации вашего класса к Neuraxle.

Связанный: { ссылка }


РЕДАКТИРОВАТЬ :

Вы можете использовать ParallelQueuedFeatureUnion класс нейроксл. Пример скоро появится.

См. Также пример использования параллельного конвейера: https://www.neuraxle.org/stable/examples/parallel/plot_streaming_pipeline.html#sphx -glr-examples-parallel-plot-streaming-pipeline-pipe-py

...