Cross-Validation

用於模型選擇的嵌套交叉驗證

  • July 22, 2013

如何使用嵌套交叉驗證進行模型選擇

根據我在網上閱讀的內容,嵌套 CV 的工作方式如下:

  • 有內部 CV 循環,我們可以在其中進行網格搜索(例如,為每個可用模型運行 K-fold,例如超參數/特徵的組合)
  • 有外部 CV 循環,我們在單獨的外部折疊中測量在內部折疊中獲勝的模型的性能。

在這個過程結束時,我們最終得到楷模 (是外循環中的折疊數)。這些模型是在內部 CV 中的網格搜索中獲勝的模型,並且它們可能是不同的(例如,具有不同內核的 SVM,使用可能不同的特徵進行訓練,具體取決於網格搜索)。

如何從此輸出中選擇模型?在我看來,從這些模型中選擇最好的模型由於每個模型都在數據集的不同部分進行了訓練和測試,因此獲勝模型並不是一個公平的比較。

那麼如何使用嵌套 CV 進行模型選擇呢?

我還閱讀了討論嵌套模型選擇如何對分析學習過程有用的線程。我可以對從外部 K 折中獲得的分數進行哪些類型的分析/檢查?

如何從此 [外部交叉驗證] 輸出中選擇模型?

簡短的回答:你沒有。

內部交叉驗證視為模型擬合過程的一部分。這意味著擬合包括超參數的擬合(這是內部交叉驗證隱藏的地方)就像任何其他模型估計例程一樣。

外部交叉驗證估計了這種模型擬合方法的性能。為此,您使用通常的假設

  • 這 $ k $ 外部代理模型等價於 model.fitting.procedure使用所有數據構建的“真實”模型。
  • 或者,如果 1. 崩潰(重採樣驗證的悲觀偏差),至少 $ k $ 外部代理模型彼此等價。

這允許您匯集(平均)測試結果。這也意味著您不需要在它們之間進行選擇,因為您假設它們基本相同。第二個較弱的假設的崩潰是模型不穩定性。

不要選擇看似最好的 $ k $ 代理模型 - 這通常只是“收穫”測試不確定性並導致樂觀偏差。

那麼如何使用嵌套 CV 進行模型選擇呢?

內部CV進行選擇。

在我看來,從這 K 個獲勝模型中選擇最佳模型並不是一個公平的比較,因為每個模型都在數據集的不同部分進行了訓練和測試。

你是對的,選擇其中一個不是好主意 $ k $ 代理模型。但你對原因是錯誤的。真正的原因:見上文。他們沒有在相同的數據上進行培訓和測試這一事實在這裡並沒有“傷害”。

  • 沒有相同的測試數據:因為您想在事後聲稱測試結果概括為從未見過的數據,這不會產生影響。

  • 沒有相同的訓練數據:

    • 如果模型是穩定的,這沒有什麼區別:這裡的穩定意味著如果訓練數據通過用其他案例替換一些案例而受到“擾動”,則模型不會改變(很多)。

    • 如果模型不穩定,三個考慮因素很重要:

      1. 您實際上可以通過使用迭代/重複來衡量是否以及在何種程度上是這種情況 $ k $ -折疊交叉驗證。這使您可以比較相同案例的交叉驗證結果,這些結果是由基於略有不同的訓練數據構建的不同模型預測的。
      2. 如果模型不穩定,則在模型的檢驗結果上觀察到的方差 $ k $ -fold 交叉驗證增加:您不僅由於總共僅測試有限數量的案例而具有方差,而且由於模型的不穩定性(預測能力的方差)而具有額外的方差。
      3. 如果不穩定性是一個真正的問題,您就無法很好地推斷“真實”模型的性能。

這讓我想到了你的最後一個問題:

我可以對從外部 K 折中獲得的分數進行哪些類型的分析/檢查?

  • 檢查預測的穩定性(使用迭代/重複交叉驗證)
  • 檢查優化的超參數的穩定性/變化。

一方面,大量分散的超參數可能表明內部優化不起作用。另一方面,這可以讓您在未來類似情況下無需昂貴的優化步驟就可以決定超參數。由於成本高昂,我不是指計算資源,而是指這種“成本”信息可能更好地用於估計“正常”模型參數的事實。

  • 檢查所選模型的內部和外部估計之間的差異。如果存在很大差異(內部非常過度樂觀),則存在內部優化由於過度擬合而無法正常工作的風險。

更新@user99889的問題:如果外部CV發現不穩定怎麼辦?

首先,在外部 CV 循環中檢測模型在這方面沒有產生穩定的預測與檢測預測誤差對於應用程序來說太高並沒有真正的不同。這是模型驗證(或驗證)的可能結果之一,暗示我們擁有的模型不適合其目的。

在回答@davips 的評論中,我正在考慮解決內部CV 中的不穩定性——即作為模型優化過程的一部分。

但是您肯定是對的:如果我們根據外部 CV 的發現更改我們的模型,則需要對更改後的模型進行另一輪獨立測試。

但是,外部 CV 的不穩定性也表明優化設置不正確 - 因此發現外部 CV 中的不穩定性意味著內部 CV 沒有以必要的方式懲罰不穩定性 - 這將是我的主要觀點在這種情況下批評。換句話說,為什麼優化允許/導致嚴重過擬合的模型?

然而,這裡有一個特點,恕我直言,在仔細考慮具體情況**後,恕我直言“最終”模型的進一步變化:正如我們確實檢測到過度擬合,任何對模型提出的變化(更少的 df/更多限制性或聚合)都會朝著太過擬合的方向發展(或者至少是不太容易過擬合的超參數)。獨立測試的重點是檢測過擬合——欠擬合可以通過已經在訓練過程中使用的數據來檢測。

因此,如果我們正在談論進一步減少 PLS 模型中相對良性的潛在變量的數量(如果提議的更改將是完全不同類型的模型,例如 PLS 而不是 SVM,那麼所有的賭注都將失敗),如果我知道我們無論如何都處於建模的中間階段,我會更加放鬆——畢竟,如果優化後的模型仍然不穩定,那麼毫無疑問需要更多的案例。此外,在許多情況下,您最終需要執行旨在正確測試性能的各個方面的研究(例如,對未來獲取的數據的概括)。儘管如此,我還是堅持需要報告完整的建模過程,並且需要仔細討論這些後期更改的影響。

此外,從已經可用的結果中,包括和袋外模擬 CV 性能估計在內的聚合是可能的——這是我願意在這裡考慮的模型的另一種類型的“後處理”。再一次,如果研究從一開始就設計為檢查聚合沒有提供優於個體預測的優勢(這是另一種說法,個體模型是穩定的),那就更好了。


更新(2019 年):我對這些情況的思考越多,我就越傾向於“顯然沒有嵌套的嵌套交叉驗證”方法

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

comments powered by Disqus