ビッグデータのロジスティック回帰


9

約5000の機能のデータセットがあります。そのデータについて、私は最初に特徴の選択にカイ二乗検定を使用しました。その後、応答変数と有意な関係を示す変数を約1500個取得しました。

ここでロジスティック回帰を当てはめる必要があります。私はRにglmultiパッケージを使用しています(glmultiパッケージはvlmの効率的なサブセット選択を提供します)が、一度に30の機能しか使用できません。それ以外の場合、データセットの行数が約20000であるため、パフォーマンスが低下します。

上記の問題を解決する他のアプローチや手法はありますか?上記の方法で行くと、モデルを合わせるのに時間がかかりすぎます。


8
単一のマシンのメモリにデータセットを収めることができる場合、特に質問のタイトルでこれを行う場合、私はこれを「ビッグデータ」の問題とは呼びません
logc

私が使用しているsklearnLogisticRegressionと、それは私のラップトップ上の分程度で4000個の機能20,000行の問題を解決します。
Thomas Ahle

回答:


13

機能のスクリーニングを行ってから、残っている機能を、以前に行われたデータ拷問の量がわからないメソッドにフィードすることは適切ではありません。すべての潜在的な機能(エラスティックネットなど)を処理できる方法を使用することをお勧めします。データ削減の使用に関する他の提案も優れたアイデアです。


これの証拠はありますか?O / w機能スクリーニングと同じくらいヒューリスティックなようです。
ズビン

2
ペナルティ付き最尤推定ではコンテキストが考慮されます。たとえば、投げ縄では、選択されていない変数を100個と考えるよりも、選択されていない変数を1000個とすると、変数の回帰係数の推定値が小さくなります。それ以外の場合、変数は偏った方法で選択され、2番目のステップで変数を再フィットするとコンテキストが失われます。
フランクハレル2015

ここでバイアスされているとはどういう意味ですか?些細な意味では、なげなわは常に偏っているため、追加の偏りを参照する必要があるので、私は不思議に思っています。また、妥当な特性を持ついくつかの2段階のアプローチがあります。たとえば、pdfs.semanticscholar.org
d90a /

2
投げ縄ゼロに向かって意図的にバイアス係数がオーバーフィッティング防止します。ペナルティなしのパラメーターは、極端な予測値につながります。ペナルティなしモデルで「選択された」変数をフィッティングすると、必要なラッソバイアスが取り消され、予測値のオーバーフィッティングが大幅に増加します。
フランクハレル

10

最初のアプローチは、PCAを使用してデータセットの次元を減らすことです。分散全体の約97%を保持するようにしてください。これはかなり役立つ場合があります。

別のオプションは、確率的勾配降下法のようなものを使用することです。これは、はるかに高速なアルゴリズムであり、Rのメモリに適合することができます。

編集: Rの1つの問題は、RAMしか使用できないため、8 GBのメモリしかない場合に制限されます。私はこれで多くの問題に遭遇し、それ以来、より大きなデータセットをよりよく処理するように見えるpythonのscikit-learnの使用に移行しました。

データセットのサイズに基づいて開始する場所のいくつかのアイデアを与える非常に素晴らしいチャートはここにあります:http : //3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flow -chart.jpg

ここに画像の説明を入力してください


8
PCAをこのように使用することの大きな懸念は、応答変数と独立変数の間のすべての関係が、無視する総分散の3%に存在する可能性があることです。使用する主成分の数を決定する一般的な方法もないようです。非常に最小の成分は応答自体に比例し、それによって含める変数の最適な選択を構成するためです。
whuber

1
確かに、メインメモリにデータセットを読み込むことができる場合(私が説明することを考慮した場合だと思います)、確率的勾配降下法は、次元削減手法を試す前に最初に取るべきステップだと思います。Scikit-learnをpython(またはR、ただし私はこの言語のユーザーではありません)で使用すると、これは問題なく機能します。
Bertrand R

これは有用な答えだと思いますが、OPは機能の削減ではなく、ロジスティック回帰について尋ねていると思います。多分あなたはエディションの質問のその部分に取り組むことができますか?
logc 2014年

PCAが回帰問題にどれほど役立つかわかりません。問題は次のとおりです。PCAは入力行列の最大の特異値を保持しますが、行列の疑似逆行列は特異値を反転させるため、元の値の最小値を維持する必要があります。データをスケッチするだけの方がいい場合があります。arxiv.org
Thomas

4

@Frank Harrellが既に述べたように、エラスティックネットまたはLASSOを使用して5000のすべての機能(p)でペナルティ付き回帰を実行することは、機能選択の良い出発点になります(3500の変数は、従属変数)。これらの方法はどちらも、Rパッケージを使用して実行できますglmnet

関心のある潜在的な予測変数(p = 5000)間で共有される関係を考慮するために、パッケージを使用してランダムフォレストを実行するrandomForestか、パッケージを使用して勾配ブースティングを実行しgbm、潜在的な予測変数の相対的な重要性を評価することをお勧めしますバイナリの結果に関して。この情報があれば、より簡潔なロジスティック回帰モデルを構築する準備がはるかに整います。


3
いいえ、モデルから削除するパラメーターを決定するためにデータ浚渫を行うことは正しくありません。エラスティックネットのようなランダムフォレストの価値は、適切な量の収縮が組み込まれていることです。マスクされていない方法で見つかった変数のサブセットからやり直すと、バイアスが発生します。Y
フランクハレル2014年

1

これはRに限定されているわけではないと思います。これは、おそらくあなたがすべきではないビッグデータの問題です。Apache Sparkのスケーラブルな機械学習ライブラリであるMLlibを試すことができます。

一方、Apache Sparkは、インメモリの大規模データ処理のための高速で一般的なエンジンです。これらは、単純なプログラミングモデルを使用してコンピューターのクラスター全体で大規模なデータセットの分散処理を可能にするHadoopフレームワークで動作します。単一サーバーから数千のマシンにスケールアップするように設計されており、それぞれがローカルの計算とストレージを提供します。

「数千台のマシン」はオプション(!)であることに注意してください。ローカルワーク/ホームデスクトップにも設定できます。

MLlibに戻ると、次のアルゴリズムが最初から付属しています。

  • K-meansによるK-meansクラスタリング|| 初期化。
  • L1およびL2正規化線形回帰。
  • L1およびL2で正規化されたロジスティック回帰。
  • 最小二乗交互フィルタリング、明示的評価または暗黙的フィードバック。
  • 単純ベイズ多項式分類。
  • 確率的勾配降下法。

ビッグデータを定期的に使用している場合は、Hadoopソリューションの採用が必要になる場合があります。


0

Vowpal Wabbit:Vowpal Wabbitを試すことができ ます。これは、非常に大規模なデータセットと非常に多数の機能でうまく機能します。

ウェブサイトによると:

これはYahoo!で始まったプロジェクトです。Microsoft Researchで調査を続け、高速でスケーラブルで有用な学習アルゴリズムを設計する。VWは、機械学習における速度の本質であり、terafeatureデータセットから簡単に学習できます。並列学習により、学習アルゴリズムの最初である線形学習を実行すると、単一のマシンネットワークインターフェイスのスループットを超える可能性があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.