前後選択の背後にあるロジックを理解しようとしています(モデル選択にはもっと良い方法があることはわかっていますが)。フォワードモデル選択では、選択プロセスは空のモデルから開始され、変数が順番に追加されます。後方選択では、選択プロセスは完全なモデルで開始され、変数は順番に除外されます。
質問:前方後方選択はどのモデルで開始されますか?
フルモデルですか?空のモデル?間に何か? ウィキペディアおよび Hastie etal。 (2009)-統計学習の要素、60ページで方法を説明していますが、開始モデルについて何も見つかりませんでした。分析には、関数 R
パッケージMASS
。
UPDATE:
以下に、R
の例を示します。stepAIC関数は各ステップを自動的に出力します。コンソールでの選択プロセスの結果、選択は完全なモデルから始まるようです。ただし、jjetの回答に基づいて、何か間違ったことをしたかどうかはわかりません。
# Example data N <- 1000000 y <- rnorm(N) x1 <- y + rnorm(N) x2 <- y + rnorm(N) x3 <- y + rnorm(N) x4 <- rnorm(N) x5 <- rnorm(N) x6 <- rnorm(N) data <- data.frame(y, x1, x2, x3, x4, x5, x6) # Selection library("MASS") mod <- lm(y ~., data) stepAIC(mod, direction = "both")
コメント
回答
「前方-後方」選択は、「前方-段階的」選択の別名だと思います。これは、stepAICで使用されるデフォルトのアプローチです。この手順では、空のモデルから始めて、前方選択の場合と同じように順番に構築します。唯一の注意点は、新しい変数$ X_ {new} $を追加するたびに、$ X_ {new} $が含まれた後、モデルにすでに存在する他の変数を削除する必要があるかどうかを確認する必要があることです。 。このアプローチでは、すべての異なるモデルを「非線形に」検索することになります。
——–編集——–
次のRコードは、3つの選択戦略の違いを示しています。
# library(MASS) set.seed(1) N <- 200000 y <- rnorm(N) x1 <- y + rnorm(N) x2 <- y + rnorm(N) x3 <- y + rnorm(N) x4 <- rnorm(N) x5 <- rnorm(N) x6 <- x1 + x2 + x3 + rnorm(N) data <- data.frame(y, x1, x2, x3, x4, x5, x6) fit1 <- lm(y ~ ., data) fit2 <- lm(y ~ 1, data) stepAIC(fit1,direction="backward") stepAIC(fit2,direction="forward",scope=list(upper=fit1,lower=fit2)) stepAIC(fit2,direction="both",scope=list(upper=fit1,lower=fit2))
このコードで例を少し変更しました。まず、シードを設定します。私が使用したのと同じデータを見ることができます。また、アルゴリズムが少し速く実行されるようにNを小さくしました。x6を除いてすべての変数を同じに保ちました。x6はyを個別に最も予測するようになりました。これにより、最初になります。順方向および順方向ステップワイズ選択で選択された変数。ただし、x1、x2、およびx3がモデルに入ると、x6はyから独立するため、除外する必要があります。順方向ステップワイズがまさにこれを行うことがわかります。 x6で始まり、x1、x2、x3が含まれるようになり、その後戻ってx6をドロップし、終了します。フォワードを使用するだけの場合、アルゴリズムがこの種の多重共線性チェックに戻ることはないため、x6はモデルに残ります。
コメント
- ありがとうございますあなたの答えjjetのためにあなた!あなたの言うことは完全に理にかなっていますが、上記で更新したコードを実行すると、選択は完全なモデルから始まるように見えます。何か間違ったことをしましたか?
- コードにわずかな問題があります。 mod < -lm(y〜。、data)の後にstepAIC(mod、direction = "両方")。最初の行で、' " y〜。。これが、前方選択の開始点になります。代わりに、'を" y〜1 "と記述します。インターセプトモデル-'が探している開始点。 '上記の編集をRコードで行ったので、これがクリアされるはずです。
- 多大なご協力をありがとうございました!最後の質問:スコープ引数がなく、
mod <- lm(y ~., data)
があるように例を維持する場合、通常の後方選択を実行するのか、それとも前方後方選択を実行するのか。完全な開始モデル? - 後者。 'は、すべての変数を含む初期モデルを使用して前後に実行します。 'スコープリストが定義されていない場合は、"下位"モデルは最初に指定したモデルであり、"上部"モデルは完全なモデルです。
回答
前方後方モデル選択は、特徴の最適な組み合わせを見つけるという組み合わせ最適化問題を解決するための2つの貪欲なアプローチです( NP完全)。したがって、次善の、計算効率の高い戦略を探す必要があります。たとえば、Pudilet。による特徴選択のフローティング検索方法を参照してください。 al。
Forwardメソッドでは、空のモデルから開始し、すべての機能を反復処理します。機能ごとにモデルをトレーニングし、メトリックに応じて最適なモデルを生成する機能を選択します。同様の方法で、すでに選択した機能と組み合わせると最高の改善が得られる次の機能を追加します。
逆方向の方法では、手順を逆にします。すべての機能から開始し、その機能を繰り返し削除します。その削除は、パフォーマンスへの悪影響が最も少ないか、最大の改善につながります。
コメント
- 回答ありがとうございますjpmuc!ただし、これが私の元の質問である"前後の選択を開始するモデルに答えるかどうかはわかりません。"私はあなたの答えに何かが欠けていますか、それとも一般的な前後選択の手順を明確にしたいですか?
- この特徴選択方法では、具体的なモデルやパラメータのセットに縛られていません。特定のタイプの最良のモデル(この場合は線形モデル)を構築できる一連の機能を選択します。これは、 stat.columbia.edu/~martin/W2024/R10.pdf と rstudio-pubs-static.s3.amazonaws.com/ …
object
scope
任意のモデルで開始する引数:stepAIC(lm(y~1, data), scope=~x1+x2+x3+x4+x5, direction = "both")
。私は'あるかどうかわからない'は、" forward-backward "が特定の開始モデルを意味するかどうか、またはどちらを意味するかについての信頼できる回答です。ただし、ある場合でも、'式を使用するときに、他の人がそれを知っていると思い込まないようにするのが賢明です。