Как запустить 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