Cross-Validation

對訓練集或整個數據集執行交叉驗證

  • April 10, 2018

我對如何執行交叉驗證來評估統計學習模型感到有些困惑。

如果我有一個包含 500 個觀察值的數據集,我是否應該將它分成一個訓練集和測試集,例如 375 個(75%)訓練觀察和 125 個(25%)測試觀察,並對訓練集執行交叉驗證?還是應該對整個數據集進行交叉驗證?

只要執行交叉驗證的目的是獲得對測試 MSE 的更穩健估計,而不是優化某些調整參數,我的理解是您應該使用整個數據集。這樣做的原因是您不會獲得可用於預測看不見的測試觀察的模型,而只是對執行交叉驗證的訓練集的 MSE 的度量。

如果我弄錯了,我該如何使用交叉驗證結果來預測樣本外的觀察結果?

有人可以為我澄清一下嗎?

如果相關,我正在解決的問題是執行交叉驗證以評估 R 中隨機森林模型的模型性能。提前致謝!

我應該將它分成一個訓練集和測試集,例如 375 (75%) 個訓練觀察和 125 個 (25%) 測試觀察,並對訓練集執行交叉驗證?

是的

還是應該對整個數據集進行交叉驗證?

測試集應該獨立於訓練集來處理,所以如果你真的願意,你可以為測試集做一個單獨的 CV 塊,並且可以提供一些有用的見解,但不是普遍的做法。如果您計劃將模型應用於一組全新的“真實世界”數據,CV 可能會很有用。鑑於測試集是從與訓練集相同的人群中抽取的,如果拆分正確且沒有偏差,那麼它可能不會像您期望的那樣有用,因為它與訓練集具有相似的特徵。請注意,可能值得檢查這個假設。

簡歷的目的是什麼?

只要執行交叉驗證的目的是獲得對測試 MSE 的更穩健估計

這不是 CV 的目的,而是估計性能指標的穩健性。正如@user86895 所說,它不測量 MSE,請參閱均方誤差與最小二乘誤差,哪個比較數據集?供進一步閱讀。CV 在數據子集上創建多個模型,並將它們應用於從該子集中保留的數據。它遍歷數據集,構建新模型,直到所有模型都包含在訓練子集中並且都包含在測試子集中。最終模型建立在所有訓練集上,而不是任何單個 CV 輪模型,CV 的目的不是建立模型,而是評估模型性能的穩定性,即模型的通用性。

在比較數據集上的不同數據處理或分析算法時,它提供了第一個過濾器來識別提供最穩定模型的工作路徑。它通過估計訓練集的子集之間的性能變化程度來做到這一點。這使您可以檢測過擬合風險非常高的模型並將其過濾掉。如果沒有交叉驗證,您將僅根據最大性能進行選擇,而不考慮其穩定性。但是,當您在已部署的情況下應用模型時,其穩定性(與現實世界人口的相關性)將比精選樣本子集(即您的原始實驗集)的原始性能的適度差異更重要。

實際上,交叉驗證對於選擇模型的最粗略參數至關重要,例如使用 Q2 統計量的 PCA 或 PLS 中的組件數量(這是 R2,但在保留的數據上,請參閱PCA 的每個組件的 Q² 值是多少) 來確定過擬合何時開始降低模型性能。

如果我弄錯了,我該如何使用交叉驗證結果來預測樣本外的觀察結果?

我的意思是“我如何使用 CV 結果來估計超出我的實驗集的性能?”,但如果有不同的澄清,我會更新我的答案的這一部分。

CV 用作模型穩定性的第一線估計,而不是估計現實世界設置中的性能。做到這一點的唯一方法是在真實情況下測試最終模型。CV 所做的是為您提供風險分析,如果它看起來穩定,那麼您可以決定是時候在實際測試中對模型進行風險分析了。如果它不穩定,那麼您可能需要大大擴展您的訓練集(確保重要子組和混雜因素的均勻表示,因為這些是除隨機噪聲之外的過度擬合的一個來源,因為所有相關的變化都需要給予相等的暴露於模型構建過程以適當加權)並構建一個新模型。

還有一個關於現實世界驗證的說明,如果它有效,它並不能證明你的模型是可推廣的,只能證明它在已部署在現實世界中的特定機制下有效。

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

comments powered by Disqus

相關問答