使用 Python 和 Sklearn 加快计算时间

Faster Computing Time with Python and Sklearn

我正在做一篇关于机器学习分类任务的模型评估技术的论文,我正在使用一些 sklearn 模型,因为我可以编写大部分通用代码,因为我有很多不同的数据集。 Sklearns 模型输出的一部分是 predict_proba,其中它进行了概率估计。对于具有大量数据点的大型数据集,计算每个数据点的 predict_proba 需要很长时间。我加载了 htop 并看到 python 仅使用单个内核进行计算,因此我写出了以下函数:

from joblib import Parallel, delayed
import multiprocessing
num_cores = multiprocessing.cpu_count()

def makeprob(r,first,p2,firstm):
    reshaped_r = first[r].reshape(1,p2)           
    probo = clf.predict_proba(reshaped_r)  
    probo = probo.max()                    
    print('Currently at %(perc)s percent' % {'perc': (r/firstm)*100})    
    return probo

# using multiple cores to run the function 'makeprob'
results = Parallel(n_jobs=num_cores)(delayed(makeprob)(r,first,p2,firstm) for r in range(firstm)) 

现在我看到 htop 所有内核都在使用,并且加速很显着,但没有我想要的那么快,如果有人知道加速或指出我的方法在这种情况下获得更快计算增益的正确方向会很棒。

性能损失取决于三个因素:

  1. 你的 python 程序:确保数据集得到很好的优化,不会过度使用 RAM(即,只包含你需要的关键变量的子集)
  2. python 环境: 如果您在 ipython (Jupyter) Notebook 中 运行 Sk-learn,'Multiprocessing' 不会 运行 和 python 脚本一样快。参见 iPython for parallel computing。 python 脚本会更快。
  3. Python library : 几个 Python 库是为使用计算机的所有资源而设计的。例如,对于 Tensorflow Tensorflow ,支持的设备类型是 CPU 和 GPU(您可以使用多个 GPU)。