機器學習數據集(訓練集、測試集)劃分方法

  一個模型的好壞終歸還是需要一個客觀的評價標準,但是現有標準都比較難以適用於單次評估,畢竟單次評估過於具有偶然性,這個問題的解決方法就是多訓練幾次模型,綜合評估一下。
  但是訓練模型總不能,在相同的數據集上,一直運行,一直評估。一個比較好的解決方法就是對數據集進行不同的劃分,然後多訓練幾個模型,最後指標綜合一下。這篇文章整理一下機器學習中數據集劃分的方法,當然劃分的主要目的還是爲了多方面的評估模型。
  劃分數據集的過程中主要目的就是爲了把數據劃分爲不同的訓練集和測試集,一般文獻中也會將驗證集隱含在訓練集中,兩者都是在訓練過程中使用的。數據集選擇的過程中有幾點要求需要遵循。

  • 訓練集應儘可能的與測試集互斥
  • 一定程度上,要保持訓練和測試數據分佈的一致性,這樣有利於模型學習

   如果數據的採樣過程中,想要保留類別比例,也就是說把每一個類別的數據作爲採樣單元,這樣的採樣方式就稱爲分層採樣了。以下介紹幾種基礎的數據集選擇方式。

留出(Hold-out)法

  直接將數據集D劃分爲兩個互斥的集合,分別作爲訓練集和測試集。不同的劃分能夠導致不同的效果,因此單次使用留出法得到的估計結果往往不夠可靠穩定,一般採用若干次隨機劃分, 重複試驗之後取平均值作爲評估結果。
  因爲數據集被分成了數據集和測試集,這就導致了使用訓練集訓練的模型與整個數據集有差異。通常需要對S(訓練集)和T(測試集)的比例進行權衡,一般使用2345\frac{2}{3}到\frac{4}{5}比例的樣本用於訓練。但是隨着現在數據量越來越龐大,測試集的比例可以進一步的縮小,基本保證能夠覆蓋各種類型特徵即可。
  留出法無法避免的一個困境就是大小權衡,若訓練集S較大,則測試集T就會小,評估結果具有偶然性;若S較小,S訓練出的模型與T訓練出的模型差異過大,性能上不去。

交叉驗證(cross validation)法

  相比於留出法的隨機選擇,交叉驗證法更加確定了一點點。經常用於數據不充足的時候。
  通過重複的使用數據,對給定數據進行切分,將切分的數據集組合爲訓練集與測試集,以此來進行模型選擇。切分的份數k就是k折(k-fold)交叉驗證。
  具體做法是,先將數據集D劃分爲k個大小相似的互斥子集,每個子集DiD_i儘可能保持數據分佈的一 致性(即分層採樣),然後每次用k-1個子集的並集,作爲訓練集。剩下的一份用作測試集,這樣可以得到k個組合,然後訓練k個模型,最終返回k組測試結果的均值和方差。經常看到k=10,也就是10折交叉驗證。
  與留出法一樣,爲了減少因不同的劃分而帶來偏差,通常又要隨機使用不同的劃分,進行p次, 這就是p次k折交叉驗證。
   如果令k=樣本數m,最後留下一個分組,也就是一個樣本,選擇1個樣本作爲驗證,就是留一(leave-one-out)法,這樣使得S儘可能的接近了D,同時避免了劃分帶來的差別,但是就需要訓練m個分類器,工作量可能是極其巨大的,往往在數據缺乏的情況下使用。這樣能夠最大程度保證訓練集和原始數據集一致。
  這裏補充一點,留一驗證也是留k驗證的特例,但是留k法需要選擇其中k個樣本,這就是一個從m個樣本中選擇其中k個的佩列問題,排列組合數目過於龐大,所以使用留一更加簡單。

自助法(bootstrap)

  以自助採樣爲基礎,每次隨機有放回的從數據集D中抽取訓練數據,一共m個數據,我們抽取m次,會有相當多的數據一次都沒有被抽取到,我們用作測試集。
  自助法在數據集較小、難以有效劃分時很有用,此外自助法可以從初始數據中產生多個不同的訓練集,自助法改變了初始數據集的分佈,通常會引入估計偏差,不適用於數據量充足的情況。
  有返回採樣,每個樣本每次被選中的概率就是1m\frac1m,則不被選中的概率就是11m1-\frac1m,難麼採樣m次,仍然不被選中的概率就是(11m)m\left (1-\frac1m\right)^m,這個表達式很熟悉,沒錯就是重要極限裏的核心部分。這個表達式是一個關於m的增函數,也就是說樣本不會被採樣到的概率隨着m增大而增大。但是最終有上界,就是1e\frac1e,所以測試集的比例從下界趨向於這個值。
  從樣本中採樣了m次,顯然最終的訓練集中,有的樣本被重複採樣了。
  以上幾種數據集劃分是常用的幾種方式,但是合適的數據劃分方式是不明顯的,因爲我們很難保證獨立同分布。也很難知道多大的數據量適合訓練。但是多嘗試幾個方法可以給我們更多的視野。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章