4

一部のデータを分類するために scikit-learn SVC を使用しています。トレーニングのパフォーマンスを上げたい。

clf = svm.SVC(cache_size=4000、確率=真、詳細=真)

libsvm および libsvm との sckikit-learn インターフェイスは OpenMp を使用するため、次のことを望んでいました。

エクスポート OMP_NUM_THREADS=16

複数のコアで実行されます。残念ながら、これは役に立ちませんでした。

何か案は?

ありがとう

4

3 に答える 3

8

scikit-learn の libsvm の現在のバインディングでは、OpenMP サポートはありません。ただし、パフォーマンスの問題がsklearn.svm.SVCある場合は、よりスケーラブルなモデルを代わりに使用する必要があります。

データが高次元の場合、線形に分離できる可能性があります。その場合、単純なベイズ モデルなどの単純なモデルや、トレーニングsklearn.linear_model.Perceptronが非常に高速であることが知られているモデルを最初に試すことをお勧めします。また、scikit-learn の他の線形モデルよりもメモリ効率は劣りますが、それを使用してsklearn.linear_model.LogisticRegression実装sklearn.svm.LinearSVCすることもできます。liblinearlibsvm

データが線形に分離できない場合は、試すことができますsklearn.ensemble.ExtraTreesClassifier(パラメーターを調整して、n_estimatorsトレーニング速度と予測精度をトレードオフします)。

RBFSamplerまたは、scikit-learn のトランスフォーマー + 出力に線形モデルを当てはめることを使用して、RBF カーネルを近似することを試みることができます。

http://scikit-learn.org/dev/modules/kernel_approximation.html

于 2012-11-07T17:47:36.810 に答える
2

このスレッドは 1 年以上前のものですが、答える価値があると思いました。

libsvm と liblinear (linearSVC) の両方の scikit-learn で openmp サポート用のパッチを作成しました。これはhttps://github.com/fidlr/sklearn-openmpで入手できます。

これは、OpenMP サポートを追加する方法に関する libsvm の FAQ と、liblinear のマルチコア実装に基づいています。

リポジトリを複製して sklearn-build-openmp.sh を実行し、パッチを適用してビルドします。

タイミングOMP_NUM_THREADS=4 python plot_permutation_test_for_classification.py:

  • 2.3 分の 1 に低下した線形カーネル timinig を使用した svmlib
  • RBF カーネル - 同じ。
  • x1.6 で 4 つのスレッドが削除された liblinear

詳細と使用方法については、 http://fidlr.org/post/137303264732/scikit-learn-017-with-libsvm-openmp-supportを参照してください。

于 2016-01-15T21:52:32.567 に答える