我有一组管道,希望拥有多线程架构。我的典型管道如下所示:
huber_pipe = Pipeline([
("DATA_CLEANER", DataCleaner()),
("DATA_ENCODING", Encoder(encoder_name='code')),
("SCALE", Normalizer()),
("FEATURE_SELECTION", huber_feature_selector),
("MODELLING", huber_model)
])
是否可以在不同的线程或核心中运行管道的步骤?
答案 0 :(得分:2)
一般来说,没有。
如果查看sklearn
阶段的界面,方法为of the form:
fit(X, y, other_stuff)
predict(X)
也就是说,它们可以处理整个数据集,并且无法对数据流(或分块流)进行增量学习。
此外,从根本上说,有些算法不适用于此。考虑一下你的舞台
("SCALE", Normalizer()),
据推测,这使用均值和/或方差进行归一化。没有看到整个数据集,它怎么知道这些东西?因此,它必须在操作之前等待整个输入,因此不能与其后的阶段并行运行。大多数(如果不是几乎所有)阶段都是这样。
但是,在某些情况下,您仍然可以使用sklearn
的多核。
某些阶段有n_jobs
parameter。像这样的阶段相对于其他阶段使用顺序,但可以并行化其中的工作。
在某些情况下,您可以滚动自己的(近似)其他阶段的并行版本。例如,给定任何回归阶段,您可以将其包装在一个阶段,该阶段将您的数据随机地分块到 n 部分,并行学习部分,并输出一个回归量,它是所有回归量的平均值。 YMMV。