簡體   English   中英

多處理scikit-learn

[英]Multiprocessing scikit-learn

我linearsvc使用針對訓練集和測試集工作load_file方法,我試圖讓它工作在多處理器enviorment。

如何在LinearSVC().fit()上進行多處理工作LinearSVC().fit() LinearSVC().predict() 我還不熟悉scikit-learn的數據類型。

我也在考慮將樣本分成多個數組,但我不熟悉numpy數組和scikit-learn數據結構。

這樣做會更容易進入multiprocessing.pool(),然后將樣本拆分成塊,訓練它們並稍后將訓練后的集合組合起來,它會起作用嗎?

編輯:這是我的方案:

比方說,我們在訓練樣本集中有100萬個文件,當我們想要在幾個處理器上分發Tfidfvectorizer的處理時,我們必須分割這些樣本(對於我的情況,它只有兩個類別,所以讓我們說每個樣本需要500000個訓練) 。 我的服務器有24個內核,48 GB,所以我想將每個主題分成塊數1000000/24並處理它們的Tfidfvectorizer。 就像我將測試樣本集,以及SVC.fit()和決定()。 是否有意義?

謝謝。

PS:請不要關閉它。

我認為使用SGDClassifier而不是LinearSVC這種數據是一個好主意,因為它更快。 對於矢量化,我建議你研究一下哈希變換器PR

對於多處理:您可以跨核心分布數據集,執行partial_fit ,獲取權重向量,對它們求平均值,將它們分配給估計器,再次進行部分擬合。

做平行梯度下降是一個積極研究的領域,因此那里沒有現成的解決方案。

你的數據有多少課? 對於每個班級,將單獨培訓(自動)。 如果你的內核幾乎和內核一樣多,那么通過在SGDClassifier中指定n_jobs ,每個內核只執行一個類可能會更好更容易。

對於線性模型( LinearSVCSGDClassifierPerceptron ...),您可以對數據進行分塊,在每個塊上訓練獨立模型,並通過在其中插入coef_intercept_的平均值作為屬性來構建聚合線性模型(例如SGDClasifier )。 LinearSVCSGDClassifierPerceptronpredict方法計算相同的函數(使用具有intercept_閾值和一對所有多類支持的點積進行線性預測),因此用於保持平均系數的特定模型類並不重要。

然而,如前所述,棘手的問題是並行化特征提取和當前的scikit-learn(版本0.12)並沒有提供任何方法來輕松完成。

編輯 :scikit-learn 0.13+現在有一個無狀態的散列矢量化器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM