5

私はscikit-learnを使用して、SVMを使用したいくつかの予測モデルの構築に取り組んでいます。約5000の例と約700の機能を含むデータセットがあります。トレーニングセットで18x17グリッド検索を行い、テストセットに最適なパラメーターを使用して、5分割交差検証を行っています。実行に予想よりもはるかに時間がかかり、次のことに気づきました。

1)個々のSVMトレーニングの反復には、1分しかかからないように見えるものもあれば、最大15分かかるものもあります。これは、異なるデータとパラメーター(Cとガンマ、rbfカーネルを使用しています)で予想されますか?

2)余分なメモリを利用するためにWindowsで64ビットPythonを使用しようとしていますが、すべてのPythonプロセスがタスクマネージャーで1ギガでトップになっているようです。それが、ランタイム。

3)以前は32ビットを使用していて、ほぼ同じデータセットで実行していましたが、(結果を保存しませんでしたが)かなり高速だったことを覚えています。私は64ビットウィンドウ用にscikit-learnのサードパーティビルドを使用したので、32ビットPythonでこれを試す方が良いかどうかわかりませんか?(ソースhttp://www.lfd.uci.edu/~gohlke/pythonlibs/

ランタイムを短縮する方法についての提案をいただければ幸いです。グリッド検索の検索スペースを減らすことは役立つと思いますが、最適なパラメーターの範囲さえわからないので、できるだけ大きくしたいと思います。より高速なSVM実装もある場合は、お知らせください。試してみる場合があります。

補遺:戻って、32ビットバージョンを再度実行してみました。なんらかの理由ではるかに高速です。64ビットバージョンが16時間で到達するまでに約3時間かかりました。なぜそのような違いがあるのでしょうか?

4

3 に答える 3

7

1)これは予想されることです。小さなガンマと小さな正則化はより多くのサポートベクターを選択するため、モデルはより複雑になり、適合に時間がかかります。

2)cache_size基礎となるlibsvmライブラリに渡される引数があります。ただし、データに応じて、libsvmは使用可能なすべてのキャッシュを使用する場合と使用しない場合があります。

3)わからない。両方のプラットフォームでより時間のかかる実験を実行します。プロジェクトのメーリングリストで調査結果を報告してください。これはさらに調査する価値があるかもしれません。

まず、特徴を正規化したことを確認します(たとえば、データが密なnumpy配列の場合は、分散によって平均とスケールの特徴を削除します)。スパースデータの場合は、フィーチャをスケーリングするだけです(または、テキストデータにはTF-IDF変換を使用します)。ドキュメントの前処理セクションを参照してください。

次に、粗いグリッド(大きな対数ステップ)から始めて、たとえば3x3グリッドとし、その領域で3x3グリッドを再実行して、関心のある領域に焦点を当てる必要があります。一般に、CxガンマSVMパラメーターグリッドは非常にスムーズです。

于 2012-02-07T09:43:11.080 に答える
4

これに余裕がある場合は、LinearSVCの使用を検討してください。libsvmベースのSVCにはとの間のトレーニングの複雑さがO(n_features * n_samples^2)ありO(n_features * n_samples^3)、LinearSVC(liblinearに基づく)にはO(n_features*n_samples)トレーニングの複雑さとO(n_features)テストの複雑さがあります。

于 2012-02-08T17:53:50.537 に答える
3

SGD は非常に高速ですが、1)rbfではなく線形のみ、2)パラメーターalpha eta0 ...変更方法がわかりません:専門家のO.Griselに渡してください。

32ビットと64ビットのPython(どのハードウェア、どのpyバージョン?)では、私にはわかりませんが、SOに関する一般的な質問に値するかもしれません-ベンチマークスイートが必要です。CPU使用率>90%を確認できますか、ガベージコレクションをカウントしますか?

于 2012-02-08T17:20:58.897 に答える