2017-12-12 24 views
0

ロジスティック回帰を必要とするビジネスプロセスの概念実証を現在行っています。私はデータセット(以下のコードに従って)に対して分類を実行するために統計モデルglmを使用しています。私たちのデータセットは、約10M行と約80個のフィーチャ(ほぼ70+がダミー、例えば定義されたカテゴリ変数に基づいて "1"または "0")で構成されています。小さなデータセットを使うと、glmはうまく動作しますが、完全なデータセットに対して実行すると、Pythonは "メモリを割り当てることができません"というエラーを投げています。私が間違っていた場合統計モデルのマルチプロセッシングを減らすglm

glmmodel = smf.glm(formula, data, family=sm.families.Binomial()) 
glmresult = glmmodel.fit() 
resultstring = glmresult.summary().as_csv() 

これはこれはstatsmodelsが原因かもしれないと思って私を得たが、利用可能なすべてのCPUコアを使用するように設計されており、各サブプロセスは下にRAMに設定されたデータのコピーを作成している(私を修正してください)。最低限の数のコアを使うだけの方法があるのではないでしょうか?私はパフォーマンスには達していませんが、完全なデータセットに対してglmを実行できるようにしたいだけです。

参考のため、必要に応じてマシン構成と詳細を以下に示します。

CPU: 10 cores 
RAM: 40 GB (usable/free ~25GB as there are other processes running on the 
same machine) 
swap: 16 GB 
dataset size: 1.4 GB (based on Panda's DataFrame.info(memory_usage='deep') 

答えて

0

GLMは、それは、これが現れる他の問題へのリンクが含まれてhttps://github.com/statsmodels/statsmodels/issues/2914 から、次のコピーの私のFAQ問題の説明のみリニアalgbraライブラリを通じて

マルチプロセッシング使用しています。

(引用:)

Statsmodelsは、それが当社の管理下にある並列処理のためのいくつかの場所でJOBLIBを使用しています。現在の使用法は主にブートストラップ用であり、モデルでは直接使用されていません。

しかし、numpy/scipyの基礎となるBlas/Lapackライブラリの中には、複数のコアも使用しています。これは、大規模な配列を持つ線形代数に対しては効率的ですが、特に高レベルで並列処理を使用したい場合は、処理を遅くする可能性があります。

線形代数ライブラリで使用されるコアの数を制限するにはどうすればよいですか?

これは、どの線形代数ライブラリが使用されているかによって異なります。 https://groups.google.com/d/msg/pystatsmodels/Lz9-In0pgPk/BtcYsj_ABQAJ

openblasメーリングリストのスレッドを参照してください。OSX上で加速= 1

環境変数OMP_NUM_THREADSを設定してみてください、アナコンダで

MKL VECLIB_MAXIMUM_THREADS設定:

import mkl 
mkl.set_num_threads(1) 
関連する問題