10

load_fileマルチプロセッサ環境で動作させようとしている方法を使用して、linearsvcをトレーニングセットとテストセットに対して動作させました。

マルチプロセッシングを機能させるにはどうすればよいLinearSVC().fit() LinearSVC().predict()ですか?私はまだscikit-learnのデータ型に精通していません。

サンプルを複数の配列に分割することも考えていますが、numpy配列とscikit-learnデータ構造に精通していません。

これを行うと、multiprocessing.pool()に入れるのが簡単になります。これにより、サンプルをチャンクに分割し、トレーニングして、トレーニング済みのセットを後で組み合わせることができますか?

編集:これが私のシナリオです:

たとえば、トレーニングサンプルセットに100万個のファイルがあり、Tfidfvectorizerの処理を複数のプロセッサに分散する場合は、それらのサンプルを分割する必要があります(私の場合、カテゴリは2つしかないため、トレーニングする各サンプルは500000とします)。 。私のサーバーには48GBの24コアがあるので、各トピックを1000000/24のチャンク数に分割し、それらでTfidfvectorizerを処理したいと思います。そのように、SVC.fit()とdecide()だけでなく、サンプルセットのテストも行います。それは意味がありますか?

ありがとう。

PS:これを閉じないでください。

4

2 に答える 2

13

この種のデータにはLinearSVCの代わりにSGDClassifierを使用する方がはるかに高速であるため、良いアイデアだと思います。ベクトル化については、ハッシュトランスフォーマーPRを調べることをお勧めします。

マルチプロセッシングの場合:データセットをコア全体に分散し、実行しpartial_fit、重みベクトルを取得し、それらを平均化し、推定量に分散し、再度部分適合を実行できます。

平行勾配降下法を実行することは活発な研究の領域であるため、そこに既成の解決策はありません。

あなたのデータにはいくつのクラスがありますか?クラスごとに、個別に(自動的に)トレーニングされます。n_jobsコアとほぼ同じ数のクラスがある場合は、SGDClassifierで指定することにより、コアごとに1つのクラスを実行する方が適切で簡単な場合があります。

于 2012-10-26T07:36:25.260 に答える
11

線形モデル(LinearSVC、、 ...)の場合SGDClassifierPerceptronデータをチャンク化し、各チャンクで独立したモデルをトレーニングし、属性としてSGDClasifierの平均値をその中に貼り付けることで、集約線形モデル(たとえば)coef_を構築できます。、、intercept_predict方法は同じ関数を計算するため(しきい値と1対すべてのマルチクラスサポートを備えた内積を使用した線形予測)、平均係数を保持するために使用する特定のモデルクラスは重要ではありません。LinearSVCSGDClassifierPerceptronintercept_

ただし、前述のように、トリッキーな点は特徴抽出を並列化することであり、現在のscikit-learn(バージョン0.12)はこれを簡単に行う方法を提供していません。

編集:scikit-learn 0.13+に、ステートレスのハッシュベクトライザーが追加されました。

于 2012-10-26T09:24:50.537 に答える