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. 在某些情況下,您可以推出自己的(近似)並行版本的其他階段。例如,考慮到任何迴歸階段,你可以將它包裝在一個階段中,隨機地將你的數據分成部分,並行學習部分,並輸出一個迴歸器,它是所有迴歸器的平均值。因人而異。