質問:
ネストされた相互検証の後に何をしますか?
cavaunpeu
2014-06-10 19:53:49 UTC
view on stackexchange narkive permalink

私はこのフォーラムや他の場所で徹底的に検索し、たくさんの素晴らしい資料に出くわしました。しかし、私は最終的にはまだ混乱しています。これが私が達成したいことの基本的で具体的な例、それを行うための私のアプローチ、そして私の質問です。

私は1000x51のサイズのデータ​​セットを持っています。 1000個の観測値。それぞれに50個の数値特徴と、「0」または「1」のいずれかでマークされた1つのバイナリ応答変数があります。 「0」は「早期」の応答を示し、「1」は「早期」の応答を示します。単一のLASSOロジスティック回帰モデルを構築して、応答変数を含まないテストセットで、各テスト観測値が0または1の分類になるかどうかを予測したいと思います。

私のアプローチでは、次の手順を使用します。

  1. トレーニングデータをk = 5倍に分割し、それぞれに200個の観測値を含めます。各フォールドにdata_1、data_2、data_3、data_4、data_5のラベルを付けましょう。

    k = 1の場合、train_set_kはdata_1、data_2、data_3、data_4で構成され、800個の観測値が含まれます。 test_set_kはdata_5で構成され、200個の観測値が含まれます。

    k = 2の場合、train_set_kはdata_1、data_2、data_3、およびdata_5で構成されます。 test_set_kはdata_4で構成されています。

    その他

  2. k = 1〜5の場合、train_set_kをk_i = 5倍に分割し、それぞれに800/5 = 160の観測値を含めます。これらのk_i = 5倍を交差検定して、LASSOロジスティック回帰モデルのハイパーパラメーターラムダの最適な設定を見つけます。ラムダは0から1までの浮動小数点数である必要があります。

    質問#1 :「ハイパーの最適な設定を見つけるために相互検証するもの」についてはわかりません。パラメータlambda "は実際には必要です。 Rでは、次のコードを使用しています。

      model.one.early <- cv.glmnet(x.early、y.early、family = "binomial"、nfolds = 5、 type.measure = "auc") 

    ..ここで、nfolds = 5は、上記のk_i = 5に関係します。言い換えると、各nfolds = 5倍には160個の観測値が含まれます。

    このコードから、次の値を出力できます。 "lambda.min"-最小値を与えるラムダの値上記でtype.measure = "auc"を指定したように、「最大の平均交差検定AUCを与える」ことを意味すると想定する平均交差検定誤差。 「lambda.1se」-エラーが最小値の1標準誤差以内になるようなラムダの最大値。 "

    質問#2:上記のコード行は実際には何ですか。 実行していますか? どのように lambda.minとlambda.1seの値を計算しますか?

    質問#3:どの値ラムダ(lambda.minまたはlambda.1se)の数を保持しますか?なぜですか?

  3. ハイパーパラメータを使用して、LASSOロジスティック回帰モデルをこのフォールドの800個の観測値に適合させます上記で取得したlambda.min(またはlambda.1se)。このモデルを使用して、次のようなコードを使用して、残りの200個の観測値を予測します。

      early.preds <- data.frame (predict(model.one.early、newx = as.matrix(test.early.df)、type = "response"、s = "lambda.min")) 
  4. これらの予測のAUCを計算します。

  5. 上記のループが終了すると、k = 5 lambda.min(またはlambda.1se)のリストが表示されます。値、および5つの対応するAUC値のリストs。私の理解では、これらのk = 5AUC値の平均を取ることにより、「モデルを生成する方法の一般化パフォーマンスの推定」を得ることができます。 (-Dikran Marsupial、ここにリンク)

  6. これは私が混乱しているところです。次に何をしますか?繰り返しになりますが、ラベルのない別のテストセットで予測を行いたいと思います。私が読んだことから、次のようなコードを使用して、最終的にLASSOロジスティック回帰モデルをすべての利用可能なトレーニングデータに適合させる必要があります。

      final_model <- glmnet(x = train_data_ALL、y = data_responses、family = "binomial") 

    質問#4:これは正しいですか?実際、すべてのトレーニングデータに1つのモデルを当てはめますか?

    次に、次のようなコードを使用して、このモデルを使用してテストセットを予測します。

      finals_preds <-predict(final_model、newx = test_data_ALL、type = "response"、lambda =?) 

    で採用されているネストされた相互検証手順1〜5で、ラムダの5つの値と対応する5つのAUC値のリストを取得しました。

    質問#5:ラムダのどの値を選択しますか?最高のAUCを与えるラムダの値を選択しますか?ラムダのk = 5値を平均してから、この平均をラムダ=?の上記のコード行に接続しますか?

    質問#6:最後に、ハイパーパラメータごとに 1つの一意の値を持つ 1つのLASSOロジスティック回帰モデルが必要です...正しいですか?

    質問#7:質問#5の答えが「はい」の場合、このモデルが生成するAUC値の推定値を取得するにはどうすればよいですか。この推定値は、ステップ5で取得したk = 5 AUC値の平均と同等ですか?

  7. ol>
二 答え:
tobip
2014-07-03 19:25:33 UTC
view on stackexchange narkive permalink

最初の質問に答えるには(ネストされた相互検証後に何をしますか?):

ネストされた相互検証は、アルゴリズムが持つテストデータに基づいていくつかのスコアを提供しますまだ見ていません。通常のCV(「ネストされていない」)は、1つの保留されたテストセットに基づいて、そのようなスコアを1つだけ提供します。したがって、モデルの実際のパフォーマンスをより適切に評価できます。

ネストされたCVの後、選択したモデルをデータセット全体に適合させます。次に、モデルを使用して、ラベルのない新しいデータ(1000個のオブジェクトの一部ではない)を予測します。

外部とを使用して適切なネストされたCVを実行するかどうかは100%確信できません。内側のループ。ネストされたCVを理解するために、このの説明が役に立ちました:enter image description here

(Petersohn、Temporal Video Segmentation、Vogt Verlag、2010、p.34)

(ネストされた)CVよりも優れた代替手段としてのブートストラップに関する考えはここにあります。

PS:回答が得られる可能性が高いと思います1つの投稿で7つではなく1つまたは2つの質問をする場合。他の人が簡単に見つけられるように、それらを分割したいと思うかもしれません。

素晴らしい答えtobipをどうもありがとう。上記の質問は、私の「基本的なモデル検証トピックを理解するための頭脳スクランブル」中に間違いなく提起されました。幸いなことに、この時点ですべてがまっすぐになっています。次回は質問を少なくするように頑張ります。
これは素晴らしい答えですが、まだ1つの関連する質問があります。最小のテストエラーを与えるパラメーターセットp(つまり、アルゴリズムのステップ10のetilda_cv)が、外部交差検定の各反復で同じでない場合はどうなりますか?この場合、外部CVテストエラーe_cvは、さまざまなハイパーパラメータ設定のエラーを平均化するため、パフォーマンス統計としてはあまり意味がないようです。ほとんどの場合、最小のetilda_cvを与えるパラメータセットを選択する方がよいように思われます[つまり、セットPのモード:= {arg min(etilda_cv_i)}ここで、iは反復にインデックスを付けます。
...上記のアルゴリズムのように外部相互検証の]。次に、外部CVテストエラーは、同じパラメータセットであるが異なるテストセットから生じるテストエラー値のセットからe_cv =(1 / m)sum(e_m)として計算できます。
この答えが「選ばれたモデル」によって何を意味するのかは不明です。「最高の外部パフォーマンスを提供するハイパーパラメータを備えたモデル」のようなものを意味する場合、それは正しくないと思います。
cbeleites unhappy with SX
2014-07-06 18:17:53 UTC
view on stackexchange narkive permalink

質問#5:[さまざまな代理モデルに対して返されるすべてのλの]ラムダのどの値を選択しますか?

明らかに、λが実質的に同じである場合、本質的に選択の余地がないため、問題はありません。

さまざまな代理モデルで見つかったλがいたるところに跳ね返る場合は、問題が発生しています。これは、サンプルサイズが小さすぎて、データセットに基づいてλを自動調整できないことを示しています。 、またはモデルが(まだ)非常に不安定であること。どちらの場合も、私見では、一歩下がってモデリングアプローチについてもう一度考える必要があります。

私の仕事では、サンプルサイズが非常に小さい状況にしか遭遇しません。したがって、(あらゆる種類の正則化の)最小の複雑なモデルを生成するハイパーパラメータを常に決定します。
状況は異なる場合がありますが、LASSOを使用しているという事実はモデルの複雑さに問題があるので、それはあなたにとっても賢明なアプローチだと思います。

質問#3:ラムダのどの値(lambda.minまたはlambda.1se)を保持しますか?

モデルの複雑さに関する同じ理由適用されます。 lambda.1se を選びます。

質問#6 [および#4]:結局、1つのLASSOロジスティック回帰モデルが必要です。各ハイパーパラメータの一意の値...正しいですか?

はい

質問#7:質問#5の答えが「はい」の場合、どうすればよいですか。このモデルが生成するAUC値の推定値を取得しますか?この推定値は、ステップ5で取得したk = 5 AUC値の平均と同等ですか?

いいえ、ステップ5のAUCではありません。これは、ネストされた外側のループによって測定されます。検証。

モデルトレーニングは、λの自動調整を含むものと考えるのが最も簡単だと思います。つまりたとえばを使用してλを自動調整するために必要なすべてを実行するトレーニング関数を記述します。 [反復]相互検証してから、トレーニング関数に渡されるすべてのデータでトレーニングされたモデルを返します。これらのモデルに対して通常のリサンプリング検証を実行します。

質問#1と#2

...は、コードを読むことで最もよく答えられます。Rで作業するので、コードとステップバイステップでも動作します。さらに、統計学習の要素がハイパーパラメータの調整について何を言っているかを読んでください。 AFAIK、その本は、ハイパーパラメータ調整のための1SEのアイデアの起源です。


長い答え:

lambda.1se の背後にある重要な考え方は、観察されたエラーはバイアスだけでなくランダムにも影響を受けるということですエラー(分散)。観測されたエラーの最小値を選択するだけで、分散が「スキミング」されるリスクがあります。テストするモデルが多いほど、誤って見栄えの良いモデルが観測される可能性が高くなります。 lambda.1se はこれを防止しようとします。

ここには(少なくとも)3つの異なる差異の原因があります:

  • 有限テストセットの分散:問題の代理モデルの有限テストセットの実際の構成(「有限テストセットエラー」)
  • モデルの不安定性:の分散のすべての可能なデータセットに関して、特定の問題に対するそのトレーニングサンプルサイズのモデルの平均パフォーマンスの周りの代理モデルの真のパフォーマンス
  • 特定のデータセットの分散特定の問題のサイズ$ n $。
    この最後のタイプの分散は、たとえば比較する場合に重要です。アルゴリズムですが、手元のデータセットで達成できるパフォーマンスを見積もりたい場合はそれほどではありません。

サンプルサイズが小さい問題の場合、有限のテストセットの分散は圧倒的に大きくなる可能性があります。テスト手順をベルヌーイ試行としてモデル化することで、桁違いのアイデアを得ることができます。観測されたパフォーマンスに関連付けられているため、この分散のサイズを知ることができます。原則として、これを使用して観測されたパフォーマンスの周りに信頼区間を構築し、得られた最高のパフォーマンスの観測と確実に区別できない最も複雑でないモデルを使用することを決定できます。これは基本的に lambda.1se の背後にある考え方です。

モデルの不安定性は追加の分散を引き起こします(ちなみに、モデルの複雑さが増すにつれて分散が大きくなります)。しかし、通常、優れたモデルの特徴の1つは、実際には安定していることです。 λに関しては、安定したモデル(およびλの推定を確実に行うのに十分な大きさのデータセット)は、常に同じλが返されることを意味します。逆に、λが大きく変動する場合は、λの最適化が成功しなかったことを示しています。



このQ&Aは英語から自動的に翻訳されました。オリジナルのコンテンツはstackexchangeで入手できます。これは、配布されているcc by-sa 3.0ライセンスに感謝します。
Loading...