1. 程式人生 > >機器學習中,從樣本集合分得訓練集、測試集的三種方法

機器學習中,從樣本集合分得訓練集、測試集的三種方法

一、為什麼要分開訓練集與測試集

在機器學習中,我們是依靠對學習器的泛化誤差進行評估的方法來選擇學習器。具體方法如下:我們需要從訓練集資料中產出學習器,再用測試集來測試所得學習器對新樣本的判別能力,以測試集上的測試誤差作為泛化誤差的近似,來選取學習器。

通常我們假設訓練集、測試集都是從樣本集中獨立同分布取樣得到,且測試集、訓練集中的樣本應該儘可能互斥(測試集中的樣本儘量不在訓練集中有出現、儘量不在訓練過程中被使用)

測試樣本為什麼要儘可能不出現在訓練集中呢?好比老師出了10道練習題給大家做,考試時候又用這10道練習題考試,這個考試成績顯然“過於樂觀”,不能真實的反映同學的學習情況。我們是希望得到泛化效能強的模型,好比同學做完10道練習題能“舉一反三”。

二、從樣本集分得訓練集、測試集的具體方法

當我們只有一個包含m個樣例的樣本集D={(x1,y1),(x2,y2),…,(xm,ym)},既要訓練又要測試,我們就要對D進行適當處理,從中產出訓練集S、測試集T

第一種:留出法

  1. 劃分兩個互斥集合:直接將樣本集D劃分為兩個互斥的集合——訓練集S、測試集T(要求D = S or T、S and T = 0)。在訓練集S上訓練出模型後,用測試集T來評估其測試誤差,作為對泛化誤差的估計。
  2. 兩個集合要保持資料分佈的一致性:從“取樣”角度看待資料集的劃分過程,這種保留類別比例的取樣方式是“分層取樣”。例如D包含1000個樣本(500正例,500反例),訓練集S佔樣本集70%,那S中就包含350正例,350反例;測試集T佔樣本集30%,T中就包含150正例,150反例。是為了避免因資料劃分過程引入額外的偏差影響,才要保持資料分佈的一致性。
  3. 要多次使用,取用平均值:在給定訓練/測試集的樣本比例後,會有多種劃分方式可以對樣本集D進行分割。單次使用留出法得到的評估結果往往是不穩定可靠的。一般採用若干次隨機劃分、重複進行實驗評估後取平均值作為留出法的評估結果。

注:留出法中,若令訓練集S包含絕大多數的樣本,則訓練出來的模型更接近D訓練的模型,但此時測試集T比較小,評估結果可能不夠準確。若令測試集T中多包含樣本,被評估的模型與D訓練的模型相比可能具有較大差距,降低保真性。這個問題沒有完美的解決方案,常見做法是將大約2/3~4/5的樣本用於訓練,剩餘樣本留作測試。

第二種:k折交叉驗證法

  1. 將樣本集D劃分為k個大小相似的互斥子集(即D = D1 or D2 or…or Dk,Di and Dj = 0),每個子集Di都儘可能的保持資料分佈的一致性。
  2. 然後每次用k-1個子集的並集作為訓練集,餘下一個子集作為測試集,這樣就可以獲得k組訓練/測試集。
  3. 進行k次訓練和測試,返回k個測試結果的平均值。

注1:交叉驗證法評估結果的穩定性和保真性很大程度上取決於k的取值。為強調這一點,通常交叉驗證法也稱為“k折交叉驗證”。k常用取10,稱為10折交叉驗證;其他k值有5、20等。

注2:與留出法相似,將樣本集D劃分為k個子集同樣存在多種劃分方式,為減小因樣本劃分不同而引入的誤差,k折交叉驗證通常要隨機使用不同的劃分重複p次,最終評估結果是這p次k折交叉驗證結果的均值(例如10次10折交叉驗證)

注3:樣本集D包含m個樣本,令k=m,就可以得到交叉驗證法的特例——留一法:留一法不受隨機樣本劃分方式的影響,每個子集只包含一個樣本,而使用的訓練集與樣本集只差一個樣本,所以訓練出來的模型與D的模型很相似。缺點在於如果樣本集很大——100萬條樣本,就要訓練出100萬個學習器。

—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-
—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-
總結:我們理想中希望評估的是用樣本集D訓練出來的模型,但在留出法、交叉驗證法中,由於都需要保留一部分樣本用做測試,因此實際評估的模型所用的訓練集比D小,這就必然引入誤差。留一法受訓練樣本規模變化影響最小,但是計算複雜度高。下面介紹的方法既可減少訓練樣本規模不同造成的影響,又可比較高效的進行實驗評估。
—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-
—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-

第三種:自助法

樣本集D包含m個樣本,我們通過取樣產生訓練集d,具體方法如下:

  1. 每次隨機從樣本集D中選一個樣本,拷貝加入訓練集d中,再將該樣本放回原樣本集D,使得這個樣本下次還有可能被採集到。
  2. 重複上述過程m次,我們就得到一個包含m個樣本的訓練集d
  3. 剩下的樣本(D - d)作為測試集

注:顯然樣本集D中一部分樣本會在訓練集d裡多次出現,而另一部分樣本不出現,經計算,一個樣本在m次取樣始終不被採到的概率約為36.8%。這樣的測試結果,亦稱為“包外估計”

—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-
—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-

總結:

自助法在樣本集D較小、難以有效劃分訓練/測試集時很有用。此外,自助法從初始樣本集D中產生多個不同的訓練集,這對整合學習等方法很有用。

然而,自助法產生的訓練集改變了初始樣本集的分佈,這會引入估計誤差。因此,當初始樣本集足夠時,留出法和交叉驗證法更常用一些。

—-—-—-—-—-—-—-—-—-—-—-—–—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-—-

系列推薦: