如何在 scikit-learn 或 Neuraxle 中并行 运行 2 个管道?
How to run 2 pipelines in parallel in scikit-learn or 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' object has no attribute 'setup'
我考虑过为模型创建一个 class,但我不会使用 neuraxle
的超参数搜索
是的!你可以这样做:
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
应该创建两个线程。也可以传递自定义 class 以使用 joiner
参数将数据放回一起。我们将很快发布一些更改,所以这应该可以正常工作。目前,管道使用 1 个线程。
关于您的 CatBoostRegressor
模型,它类似于 sklearn 但不是来自 sklearn,您可以在声明模型时尝试做 SKLearnWrapper(model1(params))
而不是简单地 model1(params)
在管线中?可能是 Neuraxle 没有将该模型识别为 scikit-learn 模型(它是 scikit-learn 中的 BaseEstimator 对象),即使您的对象具有与 scikit-learn 的 BaseEstimator 相同的 API。因此,您可能需要在您的模型周围手动使用 SKLearnWrapper
或编写您自己的类似包装器以使您的 class 适应 Neuraxle。
相关:
编辑:
您可以使用 Neuraxle 的 ParallelQueuedFeatureUnion class。示例即将推出。
我想用 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' object has no attribute 'setup'
我考虑过为模型创建一个 class,但我不会使用 neuraxle
是的!你可以这样做:
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
应该创建两个线程。也可以传递自定义 class 以使用 joiner
参数将数据放回一起。我们将很快发布一些更改,所以这应该可以正常工作。目前,管道使用 1 个线程。
关于您的 CatBoostRegressor
模型,它类似于 sklearn 但不是来自 sklearn,您可以在声明模型时尝试做 SKLearnWrapper(model1(params))
而不是简单地 model1(params)
在管线中?可能是 Neuraxle 没有将该模型识别为 scikit-learn 模型(它是 scikit-learn 中的 BaseEstimator 对象),即使您的对象具有与 scikit-learn 的 BaseEstimator 相同的 API。因此,您可能需要在您的模型周围手动使用 SKLearnWrapper
或编写您自己的类似包装器以使您的 class 适应 Neuraxle。
相关:
编辑:
您可以使用 Neuraxle 的 ParallelQueuedFeatureUnion class。示例即将推出。