2017-02-02 275 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)。