Logistic

嵌套交叉驗證後該怎麼辦?

  • June 10, 2014

我已經在這個論壇和其他地方進行了詳盡的搜索,並且遇到了很多很棒的材料。但是,我最終仍然感到困惑。這是一個基本的、具體的示例,說明了我想要完成的工作、我的方法以及我的問題。

我有一個大小為 1000 x 51 的數據集;1000 個觀測值,每個觀測值具有 50 個數字特徵和 1 個二進制響應變量,標記為“0”或“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 邏輯回歸模型找到超參數 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"))

  1. 計算這些預測的 AUC。
  2. 一旦上述循環完成,我應該有一個 k = 5 lambda.min(或 lambda.1se)值的列表,以及一個 5 個相應 AUC 值的列表。據我了解,通過取這些 k = 5 AUC 值的平均值,我們可以獲得“對我們生成模型的方法的泛化性能的估計”。(-Dikran 有袋動物,鏈接在這裡
  3. 這就是我感到困惑的地方。接下來我該怎麼做?同樣,我想對一個單獨的、未標記的測試集進行預測。根據我的閱讀,我最終必須使用所有可用的訓練數據來擬合我的 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 個問題,你更有可能得到答案。也許您想將它們分開,以便其他人更容易找到它們。

引用自:https://stats.stackexchange.com/questions/102842

comments powered by Disqus