sklearn cross_val_score中的参数pre_dispatch

  统计/机器学习 模型验证 Python    浏览次数: 1336
3

我用sklearn中的cross_val_score对classifier进行交叉验证,我设置的是12-fold,n_jobs=3,结果内存爆掉了。我查了一下,cross_val_score里的pre_dispatch或许能够解决内存不足的问题。但是反复看cross_val_score documentation,没看懂这个pre_dispatch到底是什么意思,怎么用。

有人设置过这个参数吗?到底怎么设置?

谢谢!

 

派大星   2017-04-06 07:36



   1个回答 
4

你的设置是cv=12, n_jobs=3,也就是用三个处理器(记为CPU_A, CPU_B, CPU_C),进行12次cross validation(记为CV_1, CV_2, CV_3, ..., CV_12)。pre_dispatch是预派遣的意思,就是提前先把任务派遣给各个处理器。


如果我们没有设置cross_val_score中的参数pre_dispatch,当我们开始执行cross_val_score,程序会一次性把全部12个CV都派遣出去,每个处理器领到4个CV。要特别注意了,这里的派遣并不是口头的安排任务,而是把任务和任务对应的数据(划重点)也发送给处理器。比如说,CPU_A领到了CV_1, CV_4, CV_7, CV_10,那么CPU_A就领到了四份训练数据集、四份测试集存放在内存里(又是重点),然后CPU_A开始依次完成CV_1, CV_4, CV_7, CV_10。


如果我们设置pre_dispatch=‘2*n_jobs’,当我们开始执行cross_val_score,程序会派遣6个CV出去,每个处理器领到2个CV。所以一开始每个处理器只需要存两份训练集、测试集(划重点)。比如说CPU_A领到了CV_1和CV_4,CPU_B领到了CV_2和CV_5,CPU_C领到了CV_3和CV_6,如果CPU_B率先完成了CV_2,那么系统会自动把CV_7派遣给CPU_B,节奏CPU_A完成了CV_1,系统再把任务CV_8放在CPU_A的任务队列里。pre_dispatch=‘2*n_jobs’的意思就是保持每个CPU都有两个任务在身(一个在做,一个在排队),除非所有任务都被派遣出去了。


如果我们设置pre_dispatch=‘1*n_jobs’,这样占用的内存最低,因为只有当当前的任务完成之后,才会有新任务(数据)派遣到闲置处理器,而非将数据放在队列中等待。

高代兄   2017-04-08 09:52



  相关主题

sklearn cross_val_score怎么同时对多个scoring进行验证   2回答

sklearn计算MAPE   1回答

sklearn GridSearchCV中的refit是什么意思   1回答

调用sklearn中的classification_report,ValueError: Mix type of y not allowed, got types set(['binary', 'continuous'])   1回答

关于sklearn.model_selection.PredefinedSplit的用法   1回答

sklearn classification_report里的support是什么意思   1回答

sklearn里LogisticRegressionCV中的参量Cs什么意思   1回答

python sklearn模型中random_state参数的意义   2回答

sklearn训练classifier的时候报错Unknown label type   1回答

查看sklearn版本   1回答

sklearn的模型如何保存下来?   2回答

sklearn中的predict_proba方法的返回值的意义   2回答



回答问题时需要注意什么?

我们谢绝在回答前讲“生动”的故事。

我们谢绝“这么简单,你自己想”、“书上有的,你认真看”这类的回答;如果你认为对方的提问方式或者内容不妥,你可以直接忽略该问题,不用进行任何作答,甚至可以对该问题投反对票。

我们谢绝答非所问。

我们谢绝自己不会、硬要回答。

我们感激每一个用户在编写答案时的努力与付出!