sklearn Pipeline 的并行化

Spa*_*Boy 5 python multithreading pipeline scikit-learn amazon-data-pipeline

我有一组 Pipelines,想要拥有多线程架构。我的典型 Pipeline 如下所示:

huber_pipe = Pipeline([
        ("DATA_CLEANER", DataCleaner()),
        ("DATA_ENCODING", Encoder(encoder_name='code')),
        ("SCALE", Normalizer()),
        ("FEATURE_SELECTION", huber_feature_selector),
        ("MODELLING", huber_model)
    ])
Run Code Online (Sandbox Code Playgroud)

是否可以在不同的线程或核心中运行管道的步骤?

Ami*_*ory 2

一般来说,没有。

如果查看sklearn阶段的接口,方法的形式如下:

fit(X, y, other_stuff)

predict(X)
Run Code Online (Sandbox Code Playgroud)

也就是说,它们作用于整个数据集,并且不能对数据流(或分块流)进行增量学习。

此外,从根本上讲,某些算法不适合于此。例如考虑您的舞台

("SCALE", Normalizer()),
Run Code Online (Sandbox Code Playgroud)

据推测,这使用均值和/或方差进行标准化。如果没有看到整个数据集,它怎么能知道这些事情呢?因此,它必须在操作之前等待整个输入,因此不能与其之后的阶段并行运行。大多数(如果不是几乎所有)阶段都是这样。


但是,在某些情况下,您仍然可以将多核与sklearn.

  1. 有些阶段有一个n_jobs参数。像这样的阶段相对于其他阶段按顺序使用,但可以并行化其中的工作。

  2. 在某些情况下,您可以推出您自己的(近似)其他阶段的并行版本。例如,给定任何回归器阶段,您可以将其包装在一个阶段中,该阶段将数据随机分成n个部分,并行学习这些部分,并输出一个回归器,该回归器是所有回归器的平均值。YMMV。