2017-02-02 201 views
1

我正在做一个关于机器学习分类任务的模型评估技术的论文,我使用了一些sklearn模型,因为我可以写大部分的通用代码,因为我有很多不同的数据集。 Sklearns模型输出的一部分是predict_proba,其中概率估计值。对于有大量数据点的大型数据集,要计算每个数据点的predict_proba需要很长时间。我装了htop看到蟒蛇仅使用计算单核,所以我写了以下功能:Python和Sklearn更快的计算时间

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

的性能损失取决于三个要素:

  1. 你的Python程序:请确保数据集很好的优化不被滥用RAM(即,让一个子集,只有关键变量,你需要)
  2. python environnment:如果你在ipython(Jupyter)Notebook中运行Sk-learn,'Multiprocessing'将不会像python脚本那样快。请参阅iPython for parallel computing。一个python脚本会更快。
  3. Python库:本地设计了几个Python库,以使用计算机的所有资源。例如,使用Tensorflow Tensorflow,支持的设备类型是CPU和GPU(并且您可以使用多个GPU)。