Classification

集成學習的 k 折交叉驗證

  • June 9, 2014

我對如何劃分數據以進行集成學習的 k 折交叉驗證感到困惑。

假設我有一個用於分類的集成學習框架。我的第一層包含分類模型,例如 svm、決策樹。

我的第二層包含一個投票模型,它結合了第一層的預測並給出最終預測。

如果我們使用 5 折交叉驗證,我正在考慮使用 5 折,如下所示:

  • 3折訓練第一層
  • 1折用於訓練第二層
  • 1折用於測試

這是正確的方法嗎?第一層和第二層的訓練數據是否應該獨立?我認為它們應該是獨立的,這樣集成學習框架才會健壯。

我的朋友建議第一層和第二層的訓練數據應該相同,即

  • 4折訓練第一層和第二層
  • 1折用於測試

這樣,集成學習框架的誤差就會更準確,而且框架的迭代調優也會更準確,因為它是基於單個訓練數據的。此外,第二層可能偏向於獨立的訓練數據

非常感謝任何建議

集成學習指的是很多不同的方法。Boosting 和 bagging 可能是最常見的兩種。您似乎正在嘗試實現一種稱為stacking的集成學習方法。Stacking 旨在通過結合幾種學習算法的預測來提高準確性。有很多方法可以進行堆疊,而不是很多嚴格的理論。雖然它很直觀且很受歡迎。

考慮你朋友的方法。您在五折中的四折上擬合第一層模型,然後使用相同的四折擬合第二層(投票)模型。問題是第二層將偏愛具有最低訓練誤差的模型。您正在使用相同的數據來擬合模型並設計聚合這些模型的過程。第二層應該使用樣本外預測來組合模型。你的方法更好,但還有一種方法可以做得更好。

我們將繼續留出一層用於測試目的。取四折並使用 4 折 CV 來獲得所有四折上每個第一層模型的樣本外預測。也就是說,省略四個折疊之一,將模型擬合到其他三個,然後根據保留的數據進行預測。對所有四個折疊重複,這樣您就可以對所有四個折疊進行樣本外預測。然後在這些樣本外預測上擬合第二層模型。然後在所有四個折疊上再次擬合第一層模型。現在你可以去你還沒有觸及的第五折。使用適合所有四個折疊的第一層模型以及第二層模型來估計保留數據的誤差。您可以再次重複此過程,並將其他折疊保留在第一層和第二層模型擬合之外。

如果您對性能感到滿意,則在所有五個折疊上為第一層模型生成樣本外預測,然後在這些上擬合第二層模型。然後在所有數據上最後一次擬合第一層模型,並將它們與第二層模型一起用於任何新數據!

最後,一些一般性的建議。如果您的第一層模型彼此完全不同,您將獲得更多好處。使用 SVM 和決策樹,您走在正確的道路上,它們彼此完全不同。由於第二層模型會產生平均效應,因此您可能需要嘗試逐步過度擬合您的第一層模型,尤其是當您有很多模型時。第二層通常很簡單,並且諸如權重的非負性和單調性之類的約束很常見。最後,請記住堆疊依賴於交叉驗證,這只是對真實風險的估計。如果您在折疊中得到非常不同的錯誤率和非常不同的模型權重,則表明您的基於 cv 的風險估計具有很高的方差。在這種情況下,您可能需要考慮一個簡單的混合你的第一層模型。或者,您可以通過在每個第一層模型上放置最大/最小權重的約束來進行妥協。

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

comments powered by Disqus