【2】模型評估與選擇

模型評估與選擇

在機器學習項目中,歸根結底是要建立一個模型,能很好的解決我們的問題。比如,圖像分類。但是,怎樣去衡量一個模型的好壞呢?又怎樣在多個模型中選擇最好的那一個呢。

一般情況下,這個問題也不難理解。比如做一個二分類問題,只要分類的結果正確的越多,當然模型的準確率就越高,有多個模型時,選擇正確的最多的那個就好了。(不考慮算法複雜度的情況下)

但是,如果問題比較複雜,可能單純的準確率就無法滿足我們的需求了。不同的問題關注的性能指標也是不同的。

1.過擬合與欠擬合

一般而言,我們在訓練一個模型時,有訓練集和驗證集,還有測試集。隨着訓練輪數的增加,一般,模型在訓練集上的效果會越來越好,在驗證集上的效果也會慢慢提高。
過擬合(overfit):模型在訓練集上效果非常好,在驗證集和測試集上效果比較差甚至很差。
欠擬合(underfit):模型在訓練集上效果就比較差,在驗證集和測試集上更差。

在這裏插入圖片描述
比如,我們建立一個模型分類樹葉。
過擬合時,模型可能認爲樹葉都帶有鋸齒(因爲我們的兩個訓練樣本剛好都有鋸齒),當模型遇到一個新的不帶鋸齒的樹葉,他會認爲這個不是樹葉。
欠擬合時,模型只學到了樹葉是綠色的,然後他遇到所有綠色的東西都認爲是樹葉。
這兩種情況,都會導致我們在判斷問題是,出現大量失誤。

下面是一張過擬合經典的圖像:
在這裏插入圖片描述
綠色就是過擬合的情況,黑色是比較好的情況。

2.評估方法

我們前面一直說模型的效果,那麼怎樣才能合理地評估模型的效果嗎?假設我們沒有驗證集,沒有測試集。只有訓練集,相對於老師讓你重複做100道題,最後還拿這100道題考你的學習水平,這樣肯定不是你真正的水平。如果老師讓你練習100道題,每次拿另外10道題(不變的十道)考你,貌似也不太合理。那要怎麼做?

答案其實很簡單,就是一邊訓練一邊測試(驗證),通過訓練集和驗證集上的效果(比如說準確率),判斷是否過擬合了或者欠擬合。不過具體的驗證方法有很多。

  • 留出法
  • 交叉驗證法
  • 自助法

2.1 留出法

思想:將原始數據劃分爲訓練集驗證集(測試集),拿訓練集訓練,拿驗證集驗證。
需要注意的是,訓練集和驗證集的分佈最好和原始數據是同分布的,比如,二分類任務中,共1000個樣本,其中正樣例500,負樣例500.按照4:1的比例劃分訓練集和驗證集,訓練集應該有400個正樣例,400個負樣例。驗證集應該有100個正樣例,100個負樣例。

可能會有這樣的疑惑:這樣不是每次都拿同樣的題來測試模型嗎,模型和人不一樣,人可能會記住測試的題,機器不會,在驗證集上,機器只是進行了一次正向運算,並沒有通過運算的結果反向修正模型。

優點:簡單,比較容易實現。
缺點:(1):即便按照同一比例劃分訓練集和驗證集,劃分方式也不一樣。比如可以使用前350個正樣例,也可以使用後350個負樣例,這樣劃分的結果會使模型的評估不穩定。
(2):如果訓練集/驗證集比例過大,相對於訓練集幾乎和原始數據集差不多大小。這樣和直接使用原始數據集就沒有多大區別了。所以,一般會按照將原始數據集的2/3~4/5作爲訓練集,其餘的做驗證集。

2.2 交叉驗證法

交叉驗證法是將原始數據集劃分爲k個大小相似的互斥子集。即
D = D1∪D2∪D3∪…∪Dk,Di∩Dj=空集(i≠j)
同時,每個子集保證分佈的一致性。
每次使用k-1個子集作爲訓練集,剩下一個作爲測試集。這樣,就避免了留出法結果不穩地的缺點。
在這裏插入圖片描述

與留出法相似,將數據集D劃分爲k個子集同樣有許多種劃分方式。爲減小因劃分不同而造成的差別,k折交叉驗證通常要隨機使用不同的劃分重複p次,最終地評估結果是這p次k折交叉驗證的均值。例如常見的”10次10折交叉驗證“。此時,要進行100次訓練/驗證。

特殊的情況:另k=樣本個數。則,每次只留下一個樣本作爲驗證。這就是留一法(Leave-One-Out,LOO)留一法就不受樣本劃分方式的影響了。留一法被認爲是評估結果比較準確的一種方法,但是,如果樣本數量較多,造成的訓練成本會很大。

2.3 自助法

前面提到的方法要麼受樣本劃分的影響(留出法),要麼受計算成本的影響(留一法),就沒有一種能兼顧的方法嗎?

自助法(Bootstrapping):通過自主採樣來進行樣本的劃分。

自處採樣:給定有m個樣本的數據集D,每次隨機從其中選擇一個樣本,將其拷貝放入樣本集D‘,再放回D,重複m次之後,樣本集D’也有m個樣本了。當然,D‘中會有一些樣本被重複出現,也會有一些樣本壓根沒出現過。樣本在m次採集中始終不被抽到的概率是:(1-1/m)^m,去極限得:

在這裏插入圖片描述
這樣一來,實際用來訓練的數據集和用來測試得數據集都是m個樣本,而用來評估的樣本中,仍然有1/3的樣本是沒有在訓練集中出現過的。這樣的測試結果,也被稱爲”包外估計“(out-of-bag estimate)

優點:在數據集很小,難以劃分訓練/測試集時很有用’自助法能從原始數據集中產生多個不同的訓練集,這對集成學習等方法有很大好處。
缺點:改變了原始數據集的分佈,會引入估計偏差,因此,在原始數據集樣本足夠多時,留出法和交叉驗證法更常用一些。

3.性能度量

前面提到各種事模型效果儘可能穩定可靠的方法,但是,什麼纔是模型的效果呢?

要知道機器學習的兩大任務是分類和迴歸,對於不同的問題,衡量其效果的方法也不一樣。比如,我們分類時希望分類結果和實際結果一樣,擬合一個函數是希望誤差越小越好。

下面是一些常用的性能指標:

3.1 錯誤率和精度

錯誤率是分類錯誤的樣本佔樣本總數的比例,精度是分類正確的樣本佔樣本總數的比例。對樣例集D,錯誤率爲:
在這裏插入圖片描述
在這裏插入圖片描述在這裏插入圖片描述

3.2 查準率,查全率,F1

錯誤率和精度是比較常用的,但並不總是好用的。比如,我們對一些疑似感染新型冠狀病毒的患者進行檢查,我們希望寧可把沒病的檢查爲有病,也不希望放過一個真正感染的病例。也就是說我們希望真的感染的人中被檢查出來的越多越好。

在其他的一些場景,我們可能希望考慮其他因素了。所以,單純的準確率和錯誤率是不夠的。

在這裏插入圖片描述
查準率 P
在這裏插入圖片描述

查全率 R
在這裏插入圖片描述
查準率越高代表檢查結果爲有病的人真的有病的比例越高。查全率越高代表真的有病的人被檢查出有病的比例越高。

在很多醫學檢查上,我們希望查全率越高越好。
注意的是,查準率和查全率往往是矛盾的,即二者不會都很高,往往是一個高另一個就低。這點也很好理解,查全率高的情況下,必然會把很多沒病的也檢查爲有病了(加入你把所有人都判有病,那麼查全率100%),這樣,查準率就會很低了。通常只有在簡單的任務中,纔會出現二者均很高的情況。

我們把查準率-查全率繪製成一條曲線,簡稱”P-R曲線“,如圖:
在這裏插入圖片描述
如果,一個模型的P-R曲線完全包住另一個模型的曲線,我們就說前者的性能優於後者。比如上圖的A完全包住C,則認爲A比C的性能更好。如果,兩個模型的曲線出現了交叉,那麼就不好判斷了,只能通過具體的查準率和查全率來比較。但是,有時候人們還是希望能比較一下,一個合理的方式是比較二者下面包圍的面積,面積越大者越好。但是,面積有時候不好算,所以,又出現了平衡點(Break-Event Point,簡稱BEP),他是查準率=查全率時的取值,例如上圖的C的BEP是0.64,而基於BEP的比較,可以認爲A優於B。

但是,BEP還是過於簡單,所以,又有了F1
在這裏插入圖片描述
在這裏插入圖片描述很多時候我們有多個混淆矩陣,例如進行多次訓練/測試,每次都會得到一個混淆矩陣。此時,爲了計算整體的效果,又出現了宏查準率(macro-P),宏查全率(macro-R),以及相應的宏F1(macro-F1)
在這裏插入圖片描述
宏查全率和宏查準率其實就是求均值。

此外,還有微查全率(micro-R),微查準率(micro-P),微F1(micro-F1)
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述

3.3 ROC與AUC

先定義
真正例率(TPR)(其實和查全率一樣)和假正例率(FPR)
在這裏插入圖片描述
ROC曲線就是TPR-FPR關係圖,曲線包圍的面積就是AUC:
在這裏插入圖片描述
一般而言,AUC越大,模型性能越好。

此外,還有很多其他評估的方法,具體涉及到的話再查就可以了,不需要一下子記住所有的評估方法。

4.模型優化

一般而言,模型不可能經過一次完整的訓練就是非常好的效果了。往往我們會根據模型在訓練集,驗證集上的表現來修正模型中的一些參數,再次訓練,以使模型達到更好的效果。

比如,之前我們訓練8次,現在我們訓練16次等等具體也有很多方法,尤其是在深度學習中,調整學習率,epoch,batch_size,等等,都會對模型產生不同的影響。

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