花了一天时间纠结代码效率问题,把代码效率提高了一大截。其中不得不提的是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,可返回的内容更灵活。
领取专属 10元无门槛券
私享最新 技术干货