2

我有一套管道,并希望有多线程体系结构。我的典型流水线如下所示:sklearn的pararelization管道

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

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

回答

1

一般来说,没有。

如果你看一下界面sklearn阶段,方法是of the form

fit(X, y, other_stuff) 

predict(X) 

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

此外,基本上,一些算法不适合这一点。考虑例如你的阶段

("SCALE", Normalizer()), 

大概,这使用均值和/或方差进行归一化。没有看到整个数据集,它怎么能知道这些东西?因此它必须在操作之前等待整个输入,因此不能与其后的阶段并行运行。大多数(如果不是全部的话)阶段就是这样。


然而,在某些情况下,你仍然可以使用多核与sklearn

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

  2. 在某些情况下,您可以推出自己的(近似)并行版本的其他阶段。例如,考虑到任何回归阶段,你可以将它包装在一个阶段中,随机地将你的数据分成部分,并行学习部分,并输出一个回归器,它是所有回归器的平均值。因人而异。