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

本文是《機器學習寶典》第 5 篇,讀完本文你可以掌握機器學習中經常使用的離線階段模型評估方法(留一法、交叉驗證法、自助法)。算法

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

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

咱們知道,模型訓練的時候使用的數據集是訓練集,模型在測試集上的偏差近似爲泛化偏差,而咱們更關注的就是泛化偏差,因此在離線階段咱們須要解決一個問題,那就是如何將一個數據集 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 條負樣本組成,那麼評估結果將會由於樣本分佈差別而致使很大的誤差。測試

所以,考慮到單次留出法的結果每每不夠穩定可靠,咱們通常會進行屢次留出法實驗,每次隨機劃分,最終將屢次獲得的實驗結論進行平均。3d

可是在實際工做中,若是不分場景,任什麼時候候都是用隨機劃分數據集可能會致使一些其餘的問題,好比說數據泄露(穿越問題)等。orm

交叉驗證法

交叉驗證法(cross validation)先將數據集 D 劃分紅 k 分互斥的數據子集,即,通常每一個數據子集的個數基本相近、數據分佈基本一致。而後每次用一份數據子集做爲測試集,其他的 k-1 份數據子集做爲訓練集,迭代 k 輪獲得 k 個模型,最後將將 k 次的評估結果彙總求平均值獲得最終的評估結果。上面說的有點抽象,來看一個 k 爲 10 的時候的交叉驗證示意圖。cdn

很明顯,交叉驗證評估結果的穩定性和保真性在很大程度上取決於 k 值的大小,因此交叉驗證也叫作k 折交叉驗證(k-fold cross validation)。k 經常使用的取值有 五、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% 的樣本從未被選擇過?

參考:

[1] 周志華.機器學習.第二章第二節(評估方法)[2] 美團算法團隊.美團機器學習實戰.第一章第三節(交叉驗證)

相關文章
相關標籤/搜索