データセット全体が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
を使用したり、複数のプロセスを開始してバッチデータを処理したりして、結果を減らしてグローバルな手段と標準を得ることができます。
はい、私はスパークを試みています!あなたの提案をありがとう! – mining
関連記事はここにあります - [Apache Sparkでscikit-learnを自動スケーリングする](https://databricks.com/blog/2016/02/08/auto-scaling-scikit-learn-with-apache-spark。 html) –
ありがとう!参照は非常に便利です!私はそれを試してみよう! – mining