Machine learning 使用sklearn并行培训多个模型?

Machine learning 使用sklearn并行培训多个模型?,machine-learning,scikit-learn,python-multiprocessing,Machine Learning,Scikit Learn,Python Multiprocessing,我想训练具有不同随机状态的多个LinearSVC模型,但我更喜欢并行进行。sklearn中是否有支持这一点的机制?我知道Gridsearch或某些集成方法正在隐式地进行,但引擎盖下的东西是什么?引擎盖下的“东西”是库,它为例如GridSearchCV和一些集成方法中的多处理提供了动力。它的Parallelhelper类是一把非常方便的瑞士刀,用于令人尴尬的循环并行 这是一个使用joblib与4个进程并行训练具有不同随机状态的多个LinearSVC模型的示例: 从joblib并行导入,延迟 从sk

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

引擎盖下的“东西”是库,它为例如
GridSearchCV
和一些集成方法中的多处理提供了动力。它的
Parallel
helper类是一把非常方便的瑞士刀,用于令人尴尬的循环并行

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

从joblib并行导入,延迟
从sklearn.svm导入LinearSVC
将numpy作为np导入
def系列_型号(X、y、seed):
模型=线性SVC(随机状态=种子)
返回模型。拟合(X,y)
X=np.数组([[1,2,3],[4,5,6]]
y=np.array([0,1])
结果=并行(n_作业=4)(范围(10)内种子的延迟(列车模型)(X,y,种子))
#结果是使用不同种子训练的10个模型的列表

不要这样做!LinearSVC中的随机性是一种加速的启发式方法。只需将容差设置得更高,或者使用
SVC(kernel=“linear”)
。这段代码似乎不会减少我的机器上的时间成本,因为我的机器有4个CPU。在我的代码中,普通的非并行代码花费1030秒,而根据@YS-L的答案修改的并行代码花费1061秒。前者只创建一个CPU%值为
400%、100%、100%、100%
的PID,后者创建4个CPU%值为
100%、100%、100%的PID