一、前戲
在將數據集劃分爲訓練集和測試集時,測試樣本應從真實分佈中獨立同分布採樣獲得;同時測試集應該儘可能與訓練集互斥,也就是測試樣本儘量不要在訓練集中出現、未在訓練過程中使用過。
多數情況下采用留出法(hold-out),即從數據集中分層採樣(stratified sampling)出約30%的數據作爲測試集。分層採樣的目的是要保持數據分佈的一致性,避免劃分過程引入額外的偏差。
在留出法中因爲保留一部分樣本用於測試了,導致訓練的樣本就少了。數據集的規模大點還好,當數據集比較少時,這樣劃分的方法就會浪費寶貴的數據資源。所以有什麼方法能避免訓練樣本減少的影響,同時還能比較高效測試模型訓練的好壞呢?
二、正題
“自助法”(bootstrapping)以自助採樣(可重複採樣、有放回採樣)爲基礎。
假如一個數據集D有m個樣本,看看訓練集和測試集怎麼選擇:
- 訓練集D':每次從數據集D中隨機選擇一個樣本,將這個樣本複製一個放到D'中,然後再把原樣本放回去(可放回)。重複操作m次。這樣D'中就有m個樣本了。這種採樣方法有可能一個樣本會被選擇好多次,也有可能有的樣本一次也不會被選擇到。
- 測試集D-D':測試集就是那些剩下的,沒被選擇的樣本。
那麼訓練集D和測試集D'中共有多少數據呢?
可以看出數據集中樣本在m次始終不被採樣到的概率是,取極限得:
所以數據集D中有36.8%的樣本未出現在訓練集中。
優缺點:
- 數據集小、難以劃分訓練\測試集
- 自助法能從初始數據集中產生多個不同的訓練集,可以用於集成學習
- 自助法產生的訓練集改變了初始數據集的分佈,會引入估計偏差