非常に大きなデータセットから重要な変数をすばやく選択するにはどうすればよいですか?


9

約2,000のバイナリ変数/ 200,000行のデータセットがあり、単一のバイナリ従属変数を予測しようとしています。この段階での私の主な目標は、予測の正確さを得ることではなく、これらの変数のどれが重要な予測子であるかを識別することです。最終モデルの変数の数を約100に減らしたいのですが。

最も重要な変数を取得する比較的迅速な方法はありますか?randomForestに時間がかかっているようです。

200,000件すべてを使用する必要はないので、サンプリングはテーブルのオプションです。


「正確な」予測子ではなく「重要な」予測子によって、結果を説明し、理論の構築を支援するのに最適な候補を見つけたいと思いますか?もしそうなら、100の説明変数は非常に大きな数であり、法外に大きい。理論構築と(むしろ単なる予測より)真の説明は、おそらくあなたは10または15にXの数を減らすことを必要とするであろう
rolando2

2
@ rolando2一部のアプリケーションでは、100はまったく大きくありません。たとえば、高速ブロードバンドへのアクセスに関する文献は、約150の変数(分析される数百のうち)を指し、それらのすべては合理的です:エンジニアリングの容易さ(地形、岩石のタイプ、気候など)、経済学に関連しています(SESなど)、人口統計、地域の交通インフラの形状、政治(税およびビジネス環境)など。多くの経済モデルには、理論的に重要な変数が何百も含まれていると思います。
whuber

@whuber-私はあなたの要点を考えています...非常に多くの変数が果たす因果的(単なる予測ではなく)の役割を整理するには、非常に献身的で才能があり、経験豊かなアナリストが必要であることに同意しますか?
rolando2

@rolando確かに。2000変数は大変な作業です!
whuber

回答:


6

単純な一変量フィルターから始めて、交差検証を使用して、保持する変数を決定できます。R用パッケージのsbf関数caretは本当に便利です。詳しくは、19ページ以降のこちらをご覧ください。


ありがとう。私はその論文を読んだだけで、それは確かなアプローチのようです。ただし、64ビット4MBメモリシステムでメモリの問題が発生しています。
DevX、2011年

1
@DevX:データが多すぎる場合は、サンプルを取り、そのサンプルに基づいて変数を選択してみてください。
Zach

13

これは、収縮と変数選択を行う投げ縄や友人にとって適切な問題のように聞こえます。Elements of Statistical Learningは、回帰のなげなわとエラスティックネット、およびこの問題に関連するのはロジスティック回帰について説明しています。

本の著者は、lassoとelastic netの効率的な実装をglmnetと呼ばれるRパッケージとして利用できるようにしました。以前はこのパッケージを使用して、データマトリックスが約250,000行のバイナリデータ分析を行いましたが、列はいくぶん少なくなりますが、実際には他のすべての列に対してすべての列の回帰を実行しています。データマトリックスもスパースである場合、実装もそれを利用でき、メソッドは実際にはOPの完全なデータセットに対して機能すると思います。投げ縄に関するコメントは次のとおりです。

  • Lassoは、滑らかでないペナルティ関数()を使用して変数の選択を実現します。これにより、通常、一部のパラメーターが0に等しいパラメーター推定値が得られます。推定される非ゼロパラメーターの数と量ゼロ以外のパラメーターは縮小され、調整パラメーターによって決定されます。glmnetでの実装の効率は、大きなペナルティの場合、0と異なるパラメータはほとんどないという事実に大きく依存しています。1
  • 多くの場合、調整パラメーターの選択は交差検証によって行われますが、交差検証ステップがなくても、メソッドはペナルティパラメーターによってインデックスが付けられた選択された変数の適切なシーケンスを提供できる場合があります。
  • 欠点は、変数選択の場合、変数がある程度相関している場合は特に、変数の選択においてラッソが不安定になる可能性があることです。この不安定性を改善するために、より一般的なエラスティックネットペナルティが考案されましたが、問題が完全に解決されるわけではありません。アダプティブラッソは、ラッソの変数選択を改善するためのもう1つのアイデアです。
  • 安定性選択は、ラッソーのような方法で選択した変数の安定性を高めるためにMeinshausenとBühlmannによって提案された一般的な方法です。これは、データセットのサブサンプルへの多数の適合を必要とするため、計算量がはるかに多くなります。
  • 投げ縄についての合理的な考え方は、単一変数モデルから、ペナルティパラメータによってパラメータ化されたより複雑なモデル(必ずしもすべての変数を含む必要はない)までの範囲の「良い」モデルの1次元セットを生成する方法です。対照的に、一変量フィルターは、優れた単一変数モデルのみの選択または順序付けを生成します。

Pythonの場合、投げ縄や弾性ネットなどのメソッドのscikit-learnに実装があります。


追加概念として、GWASのように潜在的な予測因子急騰、の数は、あなたが事前に選択この記事のような何かを行うことができれば:ゲノムワイド関連解析を投げ縄罰せロジスティック回帰で
ニックSabbe

@NickSabbe、この参照をありがとう。とても便利です。GWASのコンテキストでは、おそらく相関予測子が非常に多い他のコンテキストでも、Sylvia Richardsonは、たとえば安定性選択とのいくつかの比較に基づいてベイジアンモデル選択を推奨すると聞きました。ただし、MCMCの計算は非常に困難でした。
NRH、2011年

簡単に実装できるので、アダプティブラッソに重点を置く価値があると思います(glmnetR での呼び出しが1つではなく、ほぼ2つだけです)。もう1つのオプションは、投げ縄のしきい値処理です。これは、実装も非常に簡単です。springer.com/gp/book/9783642201912のセクション2.9を参照してください。
ベンジャミンクリストファーセン

2

各変数の関連性のロジスティック回帰/カイ2乗検定を実行し、p値がある値よりも小さい変数(たとえば、2)のみを保持することができます。


4
この推奨事項がどのように機能するかを理解するために、(たとえば)重要な予測子が100(たとえば)あり(従属変数との相関が高い)、残りが完全に従属変数と相互に無関係である場合を考えます。0.2未満のp値を持つ変数を保持すると、約100 + 0.2 *(2000-100)= 480の変数になることを保証します。そのうちの380は無意味です。以下のために小さなデータセットこのアプローチは、時には迅速な初期画面として使用されているが、それは本当に真剣にここでは考慮することはできません。
whuber

良い点@whuber。約100を維持するには、アルファレベルをはるかに低く設定する必要がありますが、他の調整にのみ影響を与える可能性のある変数を見逃す可能性があります。ただし、ランダムフォレストのようなものを実行する場合、2000年から480年に移行する方が管理しやすくなる可能性があります。
Glen

そうです、そのようなスクリーニングにはメリットがあります。480は削減ですが、2000のすべての元の変数間の高い相関の可能性から、追加の問題があります。これにより、関連する質問への回答の一部に示されているように、100個の正しい変数の一部またはすべてが保持されない可能性があります。
whuber
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.