sklearn管道的并行化

5

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

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

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

1个回答

2
一般来说不需要。如果你查看sklearn阶段的接口,方法的形式是这样的:链接
fit(X, y, other_stuff)

predict(X)

也就是说,它们处理的是整个数据集,无法对数据流(或分块的数据流)进行增量学习。

此外,从根本上讲,其中一些算法并不适用于这种情况。例如,考虑您的阶段。

("SCALE", Normalizer()),

可以假设,这是使用均值和/或方差进行归一化处理。但是,如果不看整个数据集,它怎么知道这些信息呢?因此,它必须等待整个输入才能操作,因此无法与其后的阶段并行运行。大多数(如果不是全部)阶段都是这样的。


然而,在某些情况下,您仍然可以使用sklearn进行多核处理。

  1. 某些阶段具有n_jobs参数。像这样的阶段相对于其他阶段顺序使用,但可以在内部并行化工作。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接