python循环并行,sklearn大神们早已经为你封装好了一个函数

花了一天时间纠结代码效率问题,把代码效率提高了一大截。其中不得不提的是sklearn大神们组装好的并行函数 Parallel. 函数和用法简洁明了,省去了使用multiprocessing繁琐的过程。

官网的例子:

简单说就是自己定义一个需要并行的函数,然后调用Parallel,再用delayed传入参数。并行的函数的return需要是list,这样并行后输出的结果才能正常,有序的保存。以一个自己写的cross-validation并行每一个Fold为例:

Step 1. 定义需要并行的函数,train_index 和 test_index 是每一个循环的“指针”,这个函数只需要定义到每一个循环内是怎么运行的。返回需要是List

Step 2. 使用parallel运行该函数,用delayed传入参数和需要循环的参数,train_index和test_index用 for循环遍历即可。注意sklearn做交叉验证的时候,需要使用相同的estimator,所以这里用了clone.

Step 3. 收割结果。result1和result2会以成对的Tuple出现在all_results中, 使用zip重新组装下就可以得到result1和result2了

之前很怀念matlab一个parafor搞定的设定,sklearn的玩法其实跟parafor的感觉差不多,不过因为返回的是list,可返回的内容更灵活。

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20181110G1MAXZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券