【问题标题】:Pararelization of sklearn Pipelinesklearn Pipeline的并行化
【发布时间】:2017-10-02 18:17:30
【问题描述】:

我有一组流水线,并希望拥有多线程架构。我的典型 Pipeline 如下图所示:

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

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

【问题讨论】:

    标签: python multithreading scikit-learn pipeline amazon-data-pipeline


    【解决方案1】:

    一般来说,不会。

    如果你查看sklearn阶段的接口,方法是of the form

    fit(X, y, other_stuff)
    
    predict(X)
    

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

    此外,从根本上说,某些算法不适合这一点。以你的舞台为例

    ("SCALE", Normalizer()),
    

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


    但是,在某些情况下,您仍然可以通过 sklearn 使用多核。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 2021-06-17
      • 2018-01-24
      • 2019-06-05
      • 2018-02-14
      • 2020-09-25
      • 2018-02-12
      • 2017-03-14
      相关资源
      最近更新 更多