【问题标题】:Train multiple models in parallel with sklearn?使用 sklearn 并行训练多个模型?
【发布时间】:2015-06-17 19:39:36
【问题描述】:

我想训练多个具有不同随机状态的 LinearSVC 模型,但我更喜欢并行进行。 sklearn中是否有支持这一点的机制?我知道 Gridsearch 或某些集成方法正在隐式执行,但幕后的东西是什么?

【问题讨论】:

  • 不要那样做! LinearSVC 中的随机性是加速的启发式方法。只需将容差设置得更高,或者使用SVC(kernel="linear")

标签: machine-learning scikit-learn python-multiprocessing


【解决方案1】:

引擎盖下的“东西”是库joblib,它支持例如GridSearchCV 中的多处理和一些集成方法。 Parallel helper 类是一把非常方便的瑞士刀,用于尴尬地并行 for 循环。

这是一个使用 joblib 与 4 个进程并行训练具有不同随机状态的多个 LinearSVC 模型的示例:

from joblib import Parallel, delayed
from sklearn.svm import LinearSVC
import numpy as np

def train_model(X, y, seed):
    model = LinearSVC(random_state=seed)
    return model.fit(X, y)

X = np.array([[1,2,3],[4,5,6]])
y = np.array([0, 1])
result = Parallel(n_jobs=4)(delayed(train_model)(X, y, seed) for seed in range(10))
# result is a list of 10 models trained using different seeds

【讨论】:

  • 这段代码似乎并没有减少我有 4 个 CPU 的机器上的时间成本。在我的代码中,正常的非并行代码花费 1030 秒,而根据@YS-L 的答案修改的并行代码花费 1061 秒。前者只创建一个 CPU% 值为 400%, 100%, 100%, 100% 的 PID,而后者创建 4 个 CPU% 值为 100%, 100%, 100%, 100% 的 PID。
猜你喜欢
  • 1970-01-01
  • 2018-05-13
  • 2018-09-22
  • 2017-08-19
  • 2023-03-14
  • 2021-05-13
  • 1970-01-01
  • 2018-10-27
  • 2018-04-02
相关资源
最近更新 更多