Scikit学習ロジスティック回帰メモリリーク
-
16-10-2019 - |
質問
他の誰かがこれに遭遇したかどうか興味があります。約350kのサンプルを備えたデータセットがあり、それぞれが4Kスパース機能を備えています。スパース充填率は約0.5%です。データはaに保存されます scipy.sparse.csr.csr_matrix
オブジェクト、 dtype='numpy.float64'
.
これをSklearnのロジスティック回帰分類器への入力として使用しています。 ドキュメンテーション スパースCSRマトリックスがこの分類器への許容可能な入力であることを示します。ただし、分類器をトレーニングすると、メモリのパフォーマンスが非常に悪くなります。私のプロセスのメモリ使用量は、〜150 MBから爆発し、利用可能なすべてのメモリを満たし、すべてがディスクへのメモリスワッピングが引き継ぐと停止します。
この分類子がスパースマトリックスを密なマトリックスに拡張する理由を誰かが知っていますか?更新されたAnacoda分布内で、現時点でのデフォルトのパラメーターを現時点で使用しています。ありがとう!
scipy.__version__ = '0.14.0'
sklearn.__version__ = '0.15.2'
解決
OK、これはRTFMの状況になりましたが、この場合はRTFエラーメッセージでした。
これを実行している間、私は次のエラーを取得し続けました:
DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
これはターゲットベクトルに関係していなければならず、それは警告のみであったため、ターゲットベクトルを1次元に静かに変更するだけだと思いました。
ただし、ターゲットベクトルを明示的に1次元に変換すると、記憶の問題はなくなりました。どうやらターゲットベクトルを間違った形式で持っていると、入力ベクトルをスパースベクターから密なベクトルに変換するようになりました。
学んだ教訓: 推奨事項に従ってください Sklearnが提案するとき、あなたは何かをします。