私はこのフォーラムや他の場所で徹底的に検索し、たくさんの素晴らしい資料に出くわしました。しかし、私は最終的にはまだ混乱しています。これが私が達成したいことの基本的で具体的な例、それを行うための私のアプローチ、そして私の質問です。
私は1000x51のサイズのデータセットを持っています。 1000個の観測値。それぞれに50個の数値特徴と、「0」または「1」のいずれかでマークされた1つのバイナリ応答変数があります。 「0」は「早期」の応答を示し、「1」は「早期」の応答を示します。単一のLASSOロジスティック回帰モデルを構築して、応答変数を含まないテストセットで、各テスト観測値が0または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で構成されています。
その他
-
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)の数を保持しますか?なぜですか?
-
ハイパーパラメータを使用して、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"))
-
これらの予測のAUCを計算します。
-
上記のループが終了すると、k = 5 lambda.min(またはlambda.1se)のリストが表示されます。値、および5つの対応するAUC値のリストs。私の理解では、これらのk = 5AUC値の平均を取ることにより、「モデルを生成する方法の一般化パフォーマンスの推定」を得ることができます。 (-Dikran Marsupial、ここにリンク)
-
これは私が混乱しているところです。次に何をしますか?繰り返しになりますが、ラベルのない別のテストセットで予測を行いたいと思います。私が読んだことから、次のようなコードを使用して、最終的に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値の平均と同等ですか?
ol>