嵌套交叉驗證後該怎麼辦?
我已經在這個論壇和其他地方進行了詳盡的搜索,並且遇到了很多很棒的材料。但是,我最終仍然感到困惑。這是一個基本的、具體的示例,說明了我想要完成的工作、我的方法以及我的問題。
我有一個大小為 1000 x 51 的數據集;1000 個觀測值,每個觀測值具有 50 個數字特徵和 1 個二進制響應變量,標記為“0”或“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 組成。
等等。 2. 對於 k = 1 到 5,將 train_set_k 劃分為 k_i = 5 個折疊,每個折疊包含 800/5 = 160 個觀察值。對這些 k_i = 5 折進行交叉驗證,為我們的 LASSO 邏輯回歸模型找到超參數 lambda 的最佳設置。Lambda 應該是介於 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”-給出最小平均交叉驗證誤差的 lambda 值,我假設它的意思是“給出最大平均交叉驗證 AUC”,如我在上面指定了 type.measure = “auc”; “lambda.1se” - lambda 的最大值,使得誤差在最小值的 1 個標準誤差之內。”
**問題 #2:**上面的代碼行實際上在做什麼? 它如何計算 lambda.min 和 lambda.1se 的值?
**問題 #3:**我想保留哪個 lambda 值(lambda.min 或 lambda.1se)?為什麼? 3. 使用上面獲得的超參數 lambda.min(或 lambda.1se)將 LASSO 邏輯回歸模型擬合到此折疊中的 800 個觀察值。使用這個模型來預測剩餘的 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 值的列表。據我了解,通過取這些 k = 5 AUC 值的平均值,我們可以獲得“對我們生成模型的方法的泛化性能的估計”。(-Dikran 有袋動物,鏈接在這裡)
- 這就是我感到困惑的地方。接下來我該怎麼做?同樣,我想對一個單獨的、未標記的測試集進行預測。根據我的閱讀,我最終必須使用所有可用的訓練數據來擬合我的 LASSO 邏輯回歸模型,使用如下代碼:
final_model <- glmnet(x=train_data_ALL, y=data_responses, family="binomial")
**問題4:**這是正確的嗎?我是否確實在我的所有訓練數據上擬合了一個模型?
然後,我會簡單地使用這個模型來預測我的測試集,使用如下代碼:
finals_preds <- predict(final_model, newx=test_data_ALL, type="response", lambda=?)
在步驟 1 到 5 中使用的嵌套交叉驗證中,我獲得了 5 個 lambda 值和 5 個相應 AUC 值的列表。
問題 #5:我選擇哪個 lambda 值?我是否選擇給出最高 AUC 的 lambda 值?我是否對 lambda 的 k = 5 個值進行平均,然後將此平均值插入上述lambda = 的代碼行中。
問題 #6:最後,我只想要一個LASSO 邏輯回歸模型,每個超參數都有一個唯一值……對嗎?
**問題 #7:**如果問題 #5 的答案是肯定的,我們如何獲得該模型將產生的 AUC 值的估計值?這個估計值是否等同於在步驟 5 中獲得的 k = 5 AUC 值的平均值?
要回答您最初的問題(嵌套交叉驗證後要做什麼?):
嵌套交叉驗證根據算法尚未看到的測試數據為您提供幾個分數。普通 CV(“非嵌套”)僅根據一個保留的測試集為您提供一個這樣的分數。因此,您可以更好地評估模型的真實性能。
在嵌套 CV 之後,您將所選模型擬合到整個數據集上。然後您使用該模型對新的、未標記的數據(不屬於您的 1000 obs.)進行預測。
我不能 100% 確定您使用外部和內部循環執行正確的嵌套 CV。為了理解嵌套 CV,我發現這個描述很有幫助:
(Petersohn,時間視頻分割,Vogt Verlag,2010 年,第 34 頁)
可以在此處找到有關引導作為比(嵌套)CV 更好的替代方案的想法。
PS:我想如果你在一篇文章中只問 1 或 2 個問題而不是 7 個問題,你更有可能得到答案。也許您想將它們分開,以便其他人更容易找到它們。