一份機器學習模型離線評估方法的詳細手冊

PS:文末附有練習題

讀完分類與迴歸算法的評估指標以及排序算法的評估指標之後,你已經知道了機器學習中分類、迴歸以及排序算法相關的評估指標。在這篇給大家介紹一些機器學習中離線評估模型性能的一些方法。

首先需要知道的是,機器學習想要能夠解決業務中的問題,簡單可以分爲兩個階段:離線和線上(離線指的是模型未部署到生產環境之前,線上是指模型部署到生產環境之後)。在離線階段,首先需要先訓練一個模型,然後對訓練好的模型進行離線評估來了解下模型的性能情況。

我們知道,模型訓練的時候使用的數據集是訓練集,模型在測試集上的誤差近似爲泛化誤差,而我們更關注的就是泛化誤差,所以在離線階段我們需要解決一個問題,那就是如何將一個數據集 D 劃分成訓練集 S 和測試集 T ?實際上,離線評估的時候有多種方法可以實現上面的要求,這裏介紹一些常用的方法。

留出法

留出法(hold-out)是指將數據集 D 劃分成兩份互斥的數據集,一份作爲訓練集 S,一份作爲測試集 T,在 S 上訓練模型,在 T 上評估模型效果。

留出法的優點是簡單好實現,但是也會有一些明顯的缺點。比如說劃分後的訓練集和測試集的大小會嚴重影響模型最終的評估結果。如果說訓練集 S 比較大,測試集 T 比較小,那麼評估結果的不夠穩定準確,可信度較低;如果說訓練集 S 比較小,測試集 T 比較大,那麼得到的模型很可能與全量數據集 D 得到的模型有很大的差別,這就降低了評估結果的真實性。通常的做法是,將全量數據集的 2/3~4/5的樣本作爲訓練集,剩餘樣本作爲測試集。

除了劃分得到的訓練集 S 和測試集 T 的數據量會影響評估結果外,它們的數據分佈也會影響評估結果,儘量保證訓練集 S 和測試集 T 的數據分佈一致,避免由於數據劃分引入額外的偏差而對最終結果產生影響。舉個具體的例子來說明,有一個包含了 1500 條正樣本和 1500 條負樣本的數據集,現在使用二分類模型來進行自動分類,假設將 1/3 的數據作爲測試集,應該使得測試集正負樣本均在 500 條左右;如果測試集由 50 條正樣本和 950 條負樣本組成,那麼評估結果將會因爲樣本分佈差異而導致很大的偏差。

因此,考慮到單次留出法的結果往往不夠穩定可靠,我們一般會進行多次留出法實驗,每次隨機劃分,最終將多次得到的實驗結論進行平均。

但是在實際工作中,如果不分場景,任何時候都是用隨機劃分數據集可能會導致一些其他的問題,比如說數據泄露(穿越問題)等。

交叉驗證法

交叉驗證法(cross validation)先將數據集 D 劃分成 k 分互斥的數據子集,即

,一般每個數據子集的個數基本相近、數據分佈基本一致。然後每次用一份數據子集作爲測試集,其餘的 k-1 份數據子集作爲訓練集,迭代 k 輪得到 k 個模型,最後將將 k 次的評估結果彙總求平均值得到最終的評估結果。上面說的有點抽象,來看一個 k 爲 10 的時候的交叉驗證示意圖。

很明顯,交叉驗證評估結果的穩定性和保真性在很大程度上取決於 k 值的大小,所以交叉驗證也叫做k 折交叉驗證(k-fold cross validation)。k 常用的取值有 5、10 和 20。

假定數據集 D 中包含了 m 個樣本,若令 k=m,則得到了交叉驗證法中的一個特例:留一法(leave-one-out,簡稱 LOO)。留一法的優缺點都很明顯。訓練 m 個模型,每個模型基本上用到了全部的數據,得到的模型與全部數據集 D 得到的模型更接近,並且不再受隨機樣本劃分方式的影響。但是當樣本太多時,即 m 很大時,計算成本非常高。

知道了留一法之後,我們再來看下一個新的評估方法:留P法(leave-p-out,簡稱LPO)。留P法是每次留下 p 個樣本作爲測試集,而從 m 個元素中選擇 p 個元素有

中可能,因此它的計算開銷遠遠高於留一法。

由於存在不平衡分類問題(分類問題中樣本里包含的標籤的數量失衡,比如二分類中樣本量包含的正負樣本比例爲10:1),基於此,存在一種叫做分層 k 折交叉驗證法(stratified-k-fold)。這種方法對每個類別進行 k 折劃分,使得每份數據子集中各類別的數據分佈與完整數據集分佈相一致。比如二分類中進行分層5折交叉驗證,正樣本有 300 條,負樣本有 30 條,將數據劃分成 5 分,並且每份數據中有 60 條正樣本,6 條負樣本。

自助法

自助法(bootstrapping)以自主採樣(bootstrap sampling)爲基礎,使用有放回的重複採樣的方式進行訓練集、測試集的構建。比如爲了構建 m 條樣本的訓練集,每次從數據集 D 中採樣放入訓練集,然後有放回重新採樣,重複 m 次得到 m 條樣本的訓練集,然後將將沒有出現過的樣本作爲測試集。

很明顯,有一些樣本在會被重複採樣,多次出現在訓練集中,而另外一些樣本在訓練集從未出現。我們可以計算樣本從未在訓練集中出現的概率。在每次採樣時,每條樣本經過 m 次始終沒有被採到的概率是

,當 m 無窮大時,取極限可得到。

這也就意味着,當數據量很大時,大約有 36.8% 的樣本不會出現在訓練集中,也就是這些樣本都會作爲測試集。

留出法和交叉驗證法在訓練模型時用的數據都只是整個數據集 D 的一個自己,得到的模型會因爲訓練集大小不一致導致一定的偏差。而自助法能夠更好地解決這個問題。但自助法改變了初始數據集的分佈,會引入估計偏差,所以在數據量足夠時,一般採用留出法和交叉驗證法。

練習題

看完這篇文章,我們來做幾道練習題來檢驗下學習成果:

  1. 試證明自助法中對 m 個樣本進行 m 次自助採樣,當 m 趨於無窮大時,爲什麼有 36.8% 的樣本從未被選擇過?

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