Как запустить 2 конвейера параллельно в scikit-learn или Neuraxle?

Я хочу создать простой конвейер с 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 ответ

Решение

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

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.

Связанный: /questions/28655047/kodirovka-metki-v-neskolkih-stolbtsah-v-scikit-learn/55201464#55201464


ИЗМЕНИТЬ:

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

Также см. Этот пример использования параллельного конвейера: https://www.neuraxle.org/stable/examples/parallel/plot_streaming_pipeline.html

Другие вопросы по тегам