約2,000のバイナリ変数/ 200,000行のデータセットがあり、単一のバイナリ従属変数を予測しようとしています。この段階での私の主な目標は、予測の正確さを得ることではなく、これらの変数のどれが重要な予測子であるかを識別することです。最終モデルの変数の数を約100に減らしたいのですが。
最も重要な変数を取得する比較的迅速な方法はありますか?randomForestに時間がかかっているようです。
200,000件すべてを使用する必要はないので、サンプリングはテーブルのオプションです。
約2,000のバイナリ変数/ 200,000行のデータセットがあり、単一のバイナリ従属変数を予測しようとしています。この段階での私の主な目標は、予測の正確さを得ることではなく、これらの変数のどれが重要な予測子であるかを識別することです。最終モデルの変数の数を約100に減らしたいのですが。
最も重要な変数を取得する比較的迅速な方法はありますか?randomForestに時間がかかっているようです。
200,000件すべてを使用する必要はないので、サンプリングはテーブルのオプションです。
回答:
単純な一変量フィルターから始めて、交差検証を使用して、保持する変数を決定できます。R用パッケージのsbf
関数caret
は本当に便利です。詳しくは、19ページ以降のこちらをご覧ください。
これは、収縮と変数選択を行う投げ縄や友人にとって適切な問題のように聞こえます。Elements of Statistical Learningは、回帰のなげなわとエラスティックネット、およびこの問題に関連するのはロジスティック回帰について説明しています。
本の著者は、lassoとelastic netの効率的な実装をglmnetと呼ばれるRパッケージとして利用できるようにしました。以前はこのパッケージを使用して、データマトリックスが約250,000行のバイナリデータ分析を行いましたが、列はいくぶん少なくなりますが、実際には他のすべての列に対してすべての列の回帰を実行しています。データマトリックスもスパースである場合、実装もそれを利用でき、メソッドは実際にはOPの完全なデータセットに対して機能すると思います。投げ縄に関するコメントは次のとおりです。
Pythonの場合、投げ縄や弾性ネットなどのメソッドのscikit-learnに実装があります。
glmnet
R での呼び出しが1つではなく、ほぼ2つだけです)。もう1つのオプションは、投げ縄のしきい値処理です。これは、実装も非常に簡単です。springer.com/gp/book/9783642201912のセクション2.9を参照してください。
各変数の関連性のロジスティック回帰/カイ2乗検定を実行し、p値がある値よりも小さい変数(たとえば、2)のみを保持することができます。