為什麼做stacking ensemble的時候需要固定k-fold?

在做stacking ensemble的時候發現如果不固定k-fold會出現過擬合現象。在kaggle的discussion上,他們的做法也是需要團隊之間共享一份k-fold的id。如果不固定k-fold會出現哪些問題,請舉一些直觀的例子。


首先謝謝各位的回答!

也謝謝 @Nutastray 給的啟發,看了他的回答以後,我按照他的思路繼續思考下去,然後與 @劉思聰 @一壺酒兮真狂士 討論了以後終於得到一些結論,所以來自問自答一波。

答案:

舉個例子,假設訓練數據一共有x1, x2, x3, x4, x5, x6這6個,並且使用3-fold,在Stage1的時候使用兩個Model。

1. 使用固定的k-fold的情況如下圖:

先看Stage1:可以看到m1-m6和n1-n2是相同的k-fold預測出來的結果,m1,m2由x3,x4,x5,x6預測所得,所以m1,m2包含了x3,x4,x5,x6的信息,以此類推。

Stage2:假設我要用如圖中所示的Train Set來預測Valid Set,那麼Train Set包含了x1-x6的信息,而Valid Set包含了x3-x6的信息。

看到這裡你會疑惑,這有什麼用呢?別急,再來看看Stage1的兩個Model各自用不同的k-fold:

請仔細觀察Model2的k-fold,現在n1,n6包含了x2-x5的信息,以此類推。

關鍵在於Stage2,現在Train Set也是包含了x1-x6的信息,而Valid Set也包含了x1-x6的信息,這就是不固定kfold與固定kfold的區別。儘管從固定kfold的圖看來,它也有可能出現一定程度的過擬合,但不固定kfold它對Valid Set的過擬合情況會更加嚴重,所以按照Nutastray說的,通過kfold可以避免人為造成的過擬合。

可能你會問,那如果我們同一層的Stage固定k-fold,而不同層之間不固定,會發生什麼?答案是,情況也會比固定k-fold要糟糕,具體的話可以按照上圖畫一下。所以最終給出的建議是,做Stacking最好還是固定k-fold,如果是團隊合作完成項目,那就組員之間共享一份k-fold。


瀉藥…不固定有過擬合風險。考慮x1-x6,6個數據點做stacking跑兩個模型,生成u1-u6,v1-v6兩組level 1的預測,u模型的情況是x1-x4的這一塊fold負責u5和u6的預測,v模型的情況是x2-x5的這一塊fold負責v1和v6的預測。當我做level 2模型的時候我的input變成了u和v變數,假設output為y,如果我需要做cv調參假設按照u的fold分割,u1-u4,v1-v4需要負責level 2的y5和y6,由於v6包含了x5的信息,也就是實際上cv1234預測56變成了12345預測56,這樣就過擬合了5的特徵,最終使level 2性能的評價產生偏倚。


訓練的時候不能見到測試數據。


一句話說就是,數據不要用兩遍,回顧一下stacking的過程你就能了解啦,兩層模型(假設只有兩層)不建議共享數據。


謝邀

但我根本看不懂


推薦閱讀:

TAG:機器學習 | 深度學習DeepLearning | Kaggle | 集成學習 | ensemble |