2016-05-18 16 views
2

データセット全体が80 millionのサンプルを持ち、各サンプルは200の高密度フィーチャを持っています。バッチ処理で分類器を訓練することがよくあります。たとえば、clf = sklearn.linear_model.SGDClassifierを採用した場合は、clf.partial_fit(batch_data, batch_y)を使用して、モデルをバッチデータに適合させることができます。scikit-learnで大規模なデータをスケールする方法は?

これまでに、batch_dataの規模を調整する必要があります。 mean-stdの正規化を使用するとします。したがって、各フィーチャディメンションのグローバル平均と標準偏差を取得する必要があります。その後、グローバル平均と標準偏差を使用してbatch_dataをスケーリングすることができます。

ここで問題は、データセット全体の平均と標準偏差を取得する方法です。グローバルstdを計算するために、$ \ sigma^2 = E(X^2) - E(X)^ 2 $を使うことができる。次に、E(X^2)E(X)をバッチ処理で計算する必要があります。

HadoopまたはSparkがこのタスクに適していると思います。データの各バッチに対して、部分的にE(X^2)E(X)を計算するためにインスタンスを開始し、それをグローバルなものに減らすことができます。

scikit-learnには、大きなデータセットを拡大縮小するための効率的な方法がありますか?おそらくmultithreadingを使用したり、複数のプロセスを開始してバッチデータを処理したりして、結果を減らしてグローバルな手段と標準を得ることができます。

答えて

1

n_jobsオプションは、並列処理のアルゴリズムscikit-learnの大部分で利用できます。

このサイズのデータ​​については、apache sparkを使用することをおすすめします。

+0

はい、私はスパークを試みています!あなたの提案をありがとう! – mining

+1

関連記事はここにあります - [Apache Sparkでscikit-learnを自動スケーリングする](https://databricks.com/blog/2016/02/08/auto-scaling-scikit-learn-with-apache-spark。 html) –

+0

ありがとう!参照は非常に便利です!私はそれを試してみよう! – mining

関連する問題