交叉驗證、模型評估

以下內容來自劉建平Pinard-博客園的學習筆記,總結如下:

1 交叉驗證法

交叉驗證是在機器學習建立模型和驗證模型參數時常用的辦法。交叉驗證,顧名思義,就是重複的使用數據,把得到的樣本數據進行切分,組合為不同的訓練集和測試集,用訓練集來訓練模型,用測試集來評估模型預測的好壞。在此基礎上可以得到多組不同的訓練集和測試集,某次訓練集中的某樣本在下次可能成為測試集中的樣本,即所謂「交叉」。

那麼什麼時候才需要交叉驗證呢?

交叉驗證用在數據不是很充足的時候。

比如在我日常項目裡面,對於普通適中問題,如果數據樣本量小於一萬條,我們就會採用交叉驗證來訓練優化選擇模型。如果樣本大於一萬條的話,我們一般隨機的把數據分成三份,一份為訓練集(Training Set),一份為驗證集(Validation Set),最後一份為測試集(Test Set)。

用訓練集來訓練模型,

用驗證集來評估模型預測的好壞和選擇模型及其對應的參數,

把最終得到的模型再用於測試集,最終決定使用哪個模型以及對應參數。

根據切分的方法不同,交叉驗證分為下面三種:   

第一種是簡單交叉驗證,所謂的簡單,是和其他交叉驗證方法相對而言的。首先,我們隨機的將樣本數據分為兩部分(比如: 70%的訓練集,30%的測試集),然後用訓練集來訓練模型,在測試集上驗證模型及參數。接著,我們再把樣本打亂,重新選擇訓練集和測試集,繼續訓練數據和檢驗模型。最後我們選擇損失函數評估最優的模型和參數。 

第二種是S折交叉驗證(S-Folder Cross Validation)。和第一種方法不同,S折交叉驗證會把樣本數據隨機的分成S份,每次隨機的選擇S-1份作為訓練集,剩下的1份做測試集。當這一輪完成後,重新隨機選擇S-1份來訓練數據。若干輪(小於S)之後,選擇損失函數評估最優的模型和參數。

第三種是留一交叉驗證(Leave-one-out Cross Validation),它是第二種情況的特例,此時S等於樣本數N,這樣對於N個樣本,每次選擇N-1個樣本來訓練數據,留一個樣本來驗證模型預測的好壞。此方法主要用於樣本量非常少的情況,比如對於普通適中問題,N小於50時,我一般採用留一交叉驗證。

通過反覆的交叉驗證,用損失函數來度量得到的模型的好壞,最終我們可以得到一個較好的模型。那這三種情況,到底我們應該選擇哪一種方法呢?

如果只是對數據做一個初步的模型建立,不是要做深入分析的話,簡單交叉驗證就可以了。

否則就用S折交叉驗證。

在樣本量少的時候,使用S折交叉驗證的特例留一交叉驗證。

此外還有一種比較特殊的交叉驗證方式,也是用於樣本量少的時候。叫做自助法(bootstrapping)。比如我們有m個樣本(m較小),每次在這m個樣本中隨機採集一個樣本,放入訓練集,採樣完後把樣本放回。這樣重複採集m次,我們得到m個樣本組成的訓練集。當然,這m個樣本中很有可能有重複的樣本數據。同時,用原始的m個樣本做測試集。這樣接著進行交叉驗證。由於我們的訓練集有重複數據,這會改變數據的分布,因而訓練結果會有估計偏差,因此,此種方法不是很常用,除非數據量真的很少,比如小於20個。

2 TP,FP,TN,FN

  True Positives,TP:預測為正樣本,實際也為正樣本的特徵數

  False Positives,FP:預測為正樣本,實際為負樣本的特徵數

  True Negatives,TN:預測為負樣本,實際也為負樣本的特徵數

  False Negatives,FN:預測為負樣本,實際為正樣本的特徵數

圖如下所示,裡面綠色的半圓就是TP(True Positives), 紅色的半圓就是FP(False Positives), 左邊的灰色長方形(不包括綠色半圓),就是FN(False Negatives)。右邊的 淺灰色長方形(不包括紅色半圓),就是TN(True Negatives)。這個綠色和紅色組成的圓內代表我們分類得到模型結果認為是正值的樣本。

3 精確率,召回率與特異性

精確率(Precision)的定義在上圖可以看出,是綠色半圓除以紅色綠色組成的圓。嚴格的數學定義如下:

P = frac{TP}{TP+FP}

召回率(Recall)的定義也在圖上能看出,是綠色半圓除以左邊的長方形。嚴格的數學定義如下:

R = frac{TP}{TP+FN}

特異性(specificity)的定義圖上沒有直接寫明,這裡給出,是紅色半圓除以右邊的長方形。嚴格的數學定義如下:

S = frac{FP}{FP+TN}

有時也用 F_{1} 值來綜合評價精確率和召回率,它是精確率和召回率的調和均值。當精確率和召回率都高時, F_{1} 值也會高。嚴格的數學定義如下:

frac{2}{F_{1}} = frac{1}{P}+frac{1}{R}

有時,對精確率和召回率並不是一視同仁,比如有時候更加重視精確率。用一個參數 eta 來度量兩者之間的關係。如果 eta>1 召回率有更大影響,如果 eta<1 ,精確率有更大影響。當 eta=1 時,精確率和召回率影響力相同,和 F_{1} 形式一樣。含有度量參數 etaF_{1} 記為 F_{eta} ,嚴格的數學定義如下:

F_{eta}=frac{(1+eta^{2})*P*R}{eta^{2}*P+R}

4 ROC曲線和PR曲線

以召回率為y軸,以特異性為x軸,我們就直接得到了RoC曲線

從召回率和特異性的定義可以理解,召回率越高,特異性越小,我們的模型和演算法就越高效。也就是畫出來的RoC曲線越靠近左上越好。如下圖左圖所示。

從幾何的角度講,RoC曲線下方的面積越大越大,則模型越優。

所以有時候我們用RoC曲線下的面積,即AUC(Area Under Curve)值來作為演算法和模型好壞的標準。

以精確率為y軸,以召回率為x軸,我們就得到了PR曲線

仍然從精確率和召回率的定義可以理解,精確率越高,召回率越高,我們的模型和演算法就越高效。也就是畫出來的PR曲線越靠近右上越好。如上圖右圖所示。

使用RoC曲線和PR曲線,我們就能很方便的評估我們的模型的分類能力的優劣了。

推薦閱讀:

初學者如何學好數控編程呢?
高德地圖的城市三維模型,是怎樣建模的?
工業設計師應該如何使用 SolidWorks?
使用midas civil未知荷載係數功能求斜拉橋初索力係數 ?
假如人的壽命可以買賣的話,經過市場的磨合,最終價格將會是怎樣?

TAG:機器學習 | 建模 |