Machine-Learning

交叉驗證與訓練驗證測試

  • May 26, 2019

我對交叉驗證方法和訓練驗證測試方法有疑問。

有人告訴我,我可以將數據集分成 3 個部分:

  1. 訓練:我們訓練模型。
  2. 驗證:我們驗證和調整模型參數。
  3. 測試:從未見過的數據。我們得到一個無偏的最終估計。

到目前為止,我們已經分為三個子集。直到這裡一切都好。附上一張圖片:

在此處輸入圖像描述

然後我遇到了 K-fold 交叉驗證方法,我不明白的是如何將測試子集與上述方法聯繫起來。意思是,在 5 折交叉驗證中,我們將數據分成 5 份,在每次迭代中,非驗證子集用作訓練子集,驗證用作測試集。但是,就上述示例而言,k-fold 交叉驗證中的驗證部分在哪裡?我們要么有驗證,要么有測試子集。

當我提到自己訓練/驗證/測試時,“測試”就是得分:

模型開發通常是一個兩階段的過程。第一階段是訓練和驗證,在此期間,您將算法應用於您知道結果的數據,以揭示其特徵和目標變量之間的模式。第二階段是評分,在此階段您將訓練好的模型應用於新數據集。然後,它以分類問題的概率分數和回歸問題的估計平均值的形式返回結果。最後,您將經過訓練的模型部署到生產應用程序中,或使用它發現的見解來改進業務流程。

謝謝!

我想從https://towardsdatascience.com/train-validation-and-test-sets-72cb40cba9e7

訓練數據集 訓練數據集:用於擬合模型的數據樣本。我們用來訓練模型的實際數據集(神經網絡中的權重和偏差)。模型會看到這些數據並從中學習。驗證數據集驗證數據集:用於在調整模型超參數時對模型擬合在訓練數據集上的無偏評估的數據樣本。隨著驗證數據集的技能被納入模型配置,評估變得更加有偏見。驗證集用於評估給定模型,但這是用於頻繁評估。作為機器學習工程師,我們使用這些數據來微調模型超參數。因此,模型偶爾會看到這些數據,但從未從中“學習”。我們(主要是人類,至少截至 2017 年 😛 )使用驗證集結果並更新更高級別的超參數。因此,驗證集以某種方式影響模型,但間接影響。

測試數據集 測試數據集:用於對訓練數據集擬合的最終模型進行無偏評估的數據樣本。

測試數據集提供了用於評估模型的黃金標準。它僅在模型完全訓練後使用(使用訓練集和驗證集)。測試集通常是用來評估競爭模型的(例如在許多 Kaggle 比賽中,驗證集最初與訓練集一起發布,而實際測試集僅在比賽即將結束時發布,並且是決定獲勝者的測試集上的模型的結果)很多時候驗證集被用作測試集,但這不是一個好的做法。測試集通常是精心策劃的。它包含仔細採樣的數據,這些數據跨越了模型在現實世界中使用時將面臨的各種類。

我想說的是:考慮到這一點,我們仍然需要 TEST 拆分才能很好地評估我們的模型。否則我們只是在訓練和調整參數,而不是把模型帶到戰場

到目前為止,其他答案中缺少的是交叉驗證只是一個更複雜的替代品,它可以替代單個(也稱為保留)拆分以拆分數據集的一部分。

您可以描述訓練/驗證/測試拆分(圖表的前 3 行):

解釋內部和外部分裂的圖表

  1. 拆分原始集:將測試集從外部訓練集中拆分出來
  2. 拆分外部訓練 st:將驗證集從內部訓練集中拆分出來。

現在,知道我們想要拆分的內容(圖中的藍色),我們需要指定每個拆分是*如何完成的。*原則上,我們擁有各種方法來生產(或多或少)獨立的拆分,從

  • 各種重採樣技術(包括交叉驗證)
  • 進行一次隨機拆分(又名堅持)
  • 獲得真正新的獨立數據,即使根據測試設計的實驗(這甚至可能是@FransRodenberg 提到的外部驗證)

這些拆分方法(如何)具有不同的統計和“數據邏輯”屬性,允許在哪些條件下選擇什麼是好的。

  • 如果沒有其他說明,則默認為單個隨機拆分,即保留。
  • 例如,您可能決定最終測試不應該只在原始數據之外的隨機數據集上進行,而是應該根據允許解釋測試結果的實驗設計以各種方式測試最終模型。混雜因素和僅在模型最終確定(完全訓練)且不進行進一步參數調整後獲得的案例。

所以採用這樣的數據採集方案進行外拆分。

  • 您還可以決定,對於內部拆分,應該使用交叉驗證而不是單個隨機/保留拆分,以便您的超參數優化可以從性能估計中較低的方差不確定性和測量模型穩定性的可能性中受益。
  • 等等。

所以:

  • 鏈接的帖子描述的是對內部拆分使用交叉驗證並為外部拆分保留。

如果調整是手動/交互完成的,這通常使用:您可以在外部訓練集中做任何您認為合理的事情。完成後,您可以通過使用迄今為止完全未觸及的測試集進行測試來“結賬”。

  • 從統計學的角度來看,交叉驗證比單個隨機分割更好(在相同的偏差下更精確,可能的穩定性信息),但以計算時間為代價。

因此,您還可以通過第二個(外部)交叉驗證替換外部保留拆分。(如果超參數調整是自動的,這很好用,但如果調整是由一個人手動完成的,則不起作用:這將非常乏味,並且人類記憶會記住先前看到的數據,因此會破壞折疊之間的獨立性)

如果你看在生成的代碼中,您有 2 個嵌套的交叉驗證循環(外部拆分和內部拆分)。這就是為什麼這種技術被稱為嵌套交叉驗證的原因。有時也稱為雙交叉驗證

如果您因為嵌套循環而擔心計算時間 $ (k_{inner} + 1) \cdot k_{outer} (+ 1) $ 訓練步驟,還有其他重採樣技術可以讓您更自由地選擇獨立於分割的案例比例評估多少代理模型(它當然不再是嵌套交叉驗證,而是實際使用的重採樣技術的嵌套名稱) .

  • 為了完整起見,您還可以決定對內部拆分使用保留,對外部拆分使用交叉驗證。雖然這是有效的,但它不會有很好的屬性:

使用內部拆分完成的優化/調整需要高精度的性能估計才能穩定。這清楚地表明對內部拆分也使用重採樣技術(例如交叉驗證)=> 所以使用嵌套交叉驗證。

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

comments powered by Disqus