天天看點

機器學習入門筆記(一):模型性能評價與選擇

作者:AI小李

一.訓練誤差與測試誤差

1.1 基本概念

在分類任務中,通常把錯分的樣本數占樣本總數的比例稱為錯誤率(error rate)。比如m個樣本有a個預測錯了,錯誤率就是 E = a/m;與錯誤率相對的 1 - a/m 稱為精度(accuracy),或者說正确率,數值上 精度 = 1 - 錯誤率。

更一般地,我們通常會把學習器的實際預測輸出與樣本的真實輸出之間的差異稱為誤差(error)。學習器在訓練集上的誤差稱為訓練誤差(training error)或者經驗誤差(empirical error)。而在新樣本上的誤差則稱為泛化誤差(generalization error)或者測試誤差(test error;)。顯然,我們希望得到泛化誤差小的學習器。是以我們希望模型的泛化誤差盡可能小,但現實是,我們無法知道新樣本是怎樣的,是以隻能盡可能地利用訓練資料來最小化經驗誤差。

1.2 訓練誤差

機器學習入門筆記(一):模型性能評價與選擇

1.3 泛化誤差(測試誤差)

機器學習入門筆記(一):模型性能評價與選擇
機器學習入門筆記(一):模型性能評價與選擇

1.4 過拟合

是否經驗誤差小,泛化誤差就一定小呢?這不是一定的,如果模型相比訓練資料來說過于複雜,那就很有可能把訓練樣本自身的一些特點當作整個樣本空間的特點,這樣就會導緻泛化性能下降,進而使得在訓練資料上有很小的經驗誤差,但一旦面對新樣本就會有很大誤差,這種情況叫做過拟合(overfitting),亦稱過配。相對的是欠拟合(underfitting),亦稱欠配。

機器學習入門筆記(一):模型性能評價與選擇

有多種因素可能導緻過拟合,其中最常見的情況是由于學習能力過于強大,以至于把訓練樣本所包含的不太一般的特性都學到了,而欠拟合則通常是由于學習能力低下而造成的。

下圖展示了訓練誤差、測試誤差與模型複雜程度之間的關系:

機器學習入門筆記(一):模型性能評價與選擇

随着模型複雜程度的增加:

  • 訓練誤差逐漸減小,甚至為0;
  • 測試誤差先減小,達到最小值後,又增大。
  • 當模型過于複雜時,将産生過拟合。

欠拟合比較容易克服,隻要适當地增加模型複雜度(比方說增加神經網絡的層數或者訓練輪數,擴充決策樹學習中的分支)就好。但過拟合是無法徹底避免的,我們所能做的隻是緩解,或者說減小其風險(比如減少模型複雜度/增加訓練資料),這也是機器學習發展中的一個關鍵阻礙。

這樣,在學習時就要防止過拟合,進行最優的模型選擇,即選擇複雜度相當的模型,以達到使測試誤差最小的學習目的。下面介紹幾種常用的模型選擇方法。

二.模型評估方法

2.1 留出法(hold-out)

“留出法” (hold-out) 直接将資料集 D 劃分為兩個互斥的集合,其中一個集合作為訓練集 S,另一個作為測試集 T, 即 D = S∪ T, S ∩ T = ∅ 。在 S 上訓練出模型後,用 T 來評估其測試誤差,作為對泛化誤差的估計。需注意的是,訓練/測試集的劃分要盡可能保持資料分布的一緻性,避免因資料劃分過程引入額外的偏差而對最終結果産生影響,例如在分類任務中至少要保持樣本的類别比例相似。

如果從采樣(sampling)的角度來看待資料集的劃分過程,則保留類别比例的采樣方式通常稱為分層采樣(stratified sampling)。例如通過對 D 進行分層采樣而獲得含70%樣本的訓練集 S 和含30%樣本的測試集 T ,若 D 包含500 個正例、500 個反例,則分層采樣得到的 S 應包含350 個正例、350 個反例,而 T 則包含150 個正例和150 個反例;若 S 、T 中樣本類别比例差别很大,則誤差估計将由于訓練/測試資料分布的差異而産生偏差。

另一個需注意的問題是,即使在給定訓練/測試集的樣本比例後,仍存在多種劃分方式對初始資料集 D 進行分割。例如在上面的例子中,可以把 D 中的樣本排序,然後把前350 個正例放到訓練集中,也可以把最後350 個正例放到訓練集中,……這些不同的劃分将導緻不同的訓練/測試集,相應的,模型評估的結果也會有差别。是以單次使用留出法得到的估計結果往往不夠穩定可靠,在使用留出法時,一般要采用若幹次随機劃分、重複進行實驗評估後取平均值作為留出法的評估結果。 例如進行100 次随機劃分,每次産生一個訓練/測試集用于實驗評估, 100 次後就得到100 個結果,而留出法傳回的則是這100 個結果的平均。

此外,我們希望評估的是用 D 訓練出的模型的性能,但留出法需劃分訓練/測試集,這就會導緻一個窘境:若令訓練集 S 包含絕大多數樣本,則訓練出的模型可能更接近于用 D 訓練出的模型, 但由于 T 比較小,評估結果可能不夠穩定準确;若令測試集 T 多包含一些樣本, 則訓練集 S 與 D 差别更大了,被評估的模型與用 D 訓練出的模型相比可能有較大差别,進而降低了評估結果的保真性(fidelity),這個問題沒有完美的解決方案,常見做法是将大約2/3∼4/5 的樣本用于訓練,剩餘樣本用于測試。

2.2 正則化

模型選擇的典型方法是正則化(regularization). 正則化是 結構風險最小化政策的實作,是在經驗風險上加一個正則化項(eglrizer)或罰項(penalty term). 正則化項一般是模型複雜度的單調遞增函數,模型越複雜,正則化值就越大.比如,正則化項可以是模型參數向量的範數.

正則化一般具有如 下形式:

機器學習入門筆記(一):模型性能評價與選擇

其中,第1項是經驗風險,第2項是正則化項,λ ≥ 0為調整兩者之間關系的系數.

正則化項可以取不同的形式,例如,回歸問題中,損失函數是平方損失,正則化項可以是參數向量的L2範數: .

機器學習入門筆記(一):模型性能評價與選擇

正則化符合奧卡姆剃刀(Occam’s razor)原理, 奧卡姆剃刀原理應用于模型選擇時變為以下想法:在所有可能選擇的模型中,能夠很好地解釋已知資料并且十分簡單才是最好的模型,也就是應該選擇的模型.從貝葉斯估計的角度來看,正則化項對應于模型的先驗機率.可以假設複雜的模型有較大的先驗機率,簡單的模型有較小的先驗機率.

2.3 交叉驗證

“交叉驗證法” (cross validation)先将資料集DDD劃分為kkk個大小相似的互斥子集, 即 D = D1∪ D2∪…∪ Dk, Di ∩ Dj = ∅ (i ≠ j) 每個子集 Di 都盡可能保持資料分布的一緻性,即從 D 中通過分層采樣得到。然後,每次用 k−1 個子集的并集作為訓練集,餘下的那個子集作為測試集;這樣就可獲得k組訓練/測試集,進而可進行k次訓練和測試,最終傳回的是這k個測試結果的均值。

顯然,交叉驗證法評估結果的穩定性和保真性在很大程度上取決于k的取值,為強調這一點,通常把交叉驗證法稱為"k折交叉驗證" (k-fold crossvalidation)。k最常用的取值是10 ,此時稱為10折交叉驗證; 其他常用的k值有5、20 等。

機器學習入門筆記(一):模型性能評價與選擇

特别地,假定資料集D中包m個樣本,若令k=m,則得到了交叉驗證法的一個特例:留一法(Leave-One-Out,簡稱LOO)。這樣做的好處是不受随機樣本劃分方式的影響,因為m個樣本隻有唯一的方式劃分為m個子集一一每個子集包含一個樣本;留一法使用的訓練集與初始資料集相比隻少了一個樣本,這就使得在絕大多數情況下,留一法中被實際評估的模型與期望評估的用DDD訓練出的模型很相似。是以一般來說,留一法的評估結果往往被認為是比較準确的。但是!!! 留一法也有其缺陷:在資料集比較大時,訓練m個模型的計算開銷可能是難以忍受的(例如資料集包含1 百萬個樣本,則需訓練1 百萬個模型),而這還是在未考慮算法調參的情況下。另外,留一法的估計結果也未必永遠比其他評估方法準确;"沒有免費的午餐"定理對實驗評估方法同樣适用。

2.4 自助法

我們希望評估的是用 D 訓練出的模型。但在留出法和交叉驗證法中,我們都需要對資料集進行劃分,保留了一部分樣本用于測試,進而使得實際評估的模型所用的資料集比 D 小,引入了一些因訓練樣本規模不同而導緻的估計偏差。留一法受訓練樣本規模變化的影響較小,但計算複雜度又太高了。有沒有什麼辦法可以減少訓練樣本規模不同造成的影響,同時還能比較高效地進行實驗估計呢?

自助法(bootstrapping) 正是我們需要的答案,以自助采樣(bootstrap sampling) 為基礎,對包含 m 樣本的資料集 D 進行有放回的 m 次采樣以獲得同等規模的訓練集。在這 m 次采樣中都不被抽到的機率大約為0.368,也即資料集 D 中有大約1/3的樣本是訓練集中沒有的。是以,我們可以采用這部分樣本作為驗證集,所得的結果稱為包外估計(out-of-bag estimate)。

Note!!! 自助法适用于資料集小,難以劃分訓練/驗證集的情況。此外,自助法能從初始資料集中産生多個不同的訓練集,這對內建學習等方法有很大的好處。但是!!! 自助法産生的資料集改變了初始資料集的分布, 也是以引入了一些額外的誤差。是以,在初始資料量足夠時,留出法和交叉驗證法更常用一些。

三.模型性能評價

對學習器的泛化性能進行評估,不僅需要有效可行的實驗估計方法,還需要有衡量模型泛化能力的評價标準,這就是性能度量(performance measure)。性能度量反映了任務需求,在對比不同模型的能力時,使用不同的性能度量往往會導緻不同的評判結果。比方說搭建推薦系統,兩個模型中一個精度高,一個覆寫度高,如果我們想讓更多的商品得到推薦可以就會選後一個模型。是以說,模型的好壞是相對的,取決于我們采用什麼性能度量,而采用什麼性能度量則應取決于我們的任務需求。

3.1 錯誤率與精度

本章開頭提到了錯誤率和精度,這是分類任務中最常用的兩種性能度量,既适用于二分類任務,也适用于多分類任務. 錯誤率是分類錯誤的樣本數占樣本總數的比例,精度則是分類正确的樣本數占樣本總數的比例. 對樣例集D,分類錯誤率定義為

機器學習入門筆記(一):模型性能評價與選擇

精度則定義為:

機器學習入門筆記(一):模型性能評價與選擇

3.2 查準率,查全率,F1,P-R曲線

錯誤率和精度雖常用,但并不能滿足所有任務需求. 以西瓜問題為例,假定瓜農拉來一車西瓜, 我們用訓練好的模型對這些西瓜進行判别,顯然,錯誤率衡量了有多少比例的瓜被判别錯誤.但是 若我們關心的是“挑出的西瓜中有多少比例是好瓜”,或者“所有好瓜中有多少比例被挑了出來”, 那麼錯誤率顯然就不夠用了,這時需要使用其他的性能度量.

類似的需求在資訊檢索、Web搜尋等應用中經常出現,例如在資訊檢索中,我們經常會關心“檢索出的資訊中有多少比例是使用者感興趣的”“使用者感興趣的資訊中有多少被檢索出來了” . “ 查準率”(precision)與“查全率”(recall) 是更為适用于此類需求的性能度量.

假設我們正常處理一個二分類問題,按照模型預測值和真實值可以把測試樣本劃分為四種情形:真正例(true positive),假正例(false positive),真反例(true negative),假反例(false negative)。 可以把結果表示為下圖這個矩陣——混淆矩陣(confusion matrix)。

機器學習入門筆記(一):模型性能評價與選擇
顯然有TP+FP+TN+FN=樣例總數。

查準率,又稱準确率(precision), 用于衡量模型避免錯誤的能力,分母是模型預測的正例數目。

機器學習入門筆記(一):模型性能評價與選擇

查全率,又稱召回率(recall), 用于衡量模型避免缺漏的能力,分母是測試樣本真正包含的正例數目。

機器學習入門筆記(一):模型性能評價與選擇

一般來說,這兩者是沖突的,查準率高時,查全率往往偏低;而查全率高時,查準率往往偏低。

例如,若希望将好瓜盡可能多地選出來,則可通過增加選瓜的數量來實作,如果将所有西瓜都選上,那麼所有的好瓜也必然都被選.上了,但這樣查準率就會較低;若希望選出的瓜中好瓜比例盡可能高,則可隻挑選最有把握的瓜,但這樣就難免會漏掉不少好瓜,使得查全率較低.通常隻有在一些簡單任務中,才可能使查全率和查準率都很高.

在很多情形下,我們可根據學習器的預測結果對樣例進行排序,排在前面的是學習器認為"最可能"是正例的樣本,排在最後的則是學習器認為"最不可能"是正例的樣本。按此順序逐個把樣本作為正例進行預測,則每次可以計算出目前的查全率、查準率以查準率為縱軸、查全率為橫軸作圖,就得到了查準率-查全率曲線,簡稱" P-R 曲線"顯示該曲線的圖稱為" P-R圖"。

機器學習入門筆記(一):模型性能評價與選擇

P-R圖直覺地顯示出學習器在樣本總體.上的查全率、查準率.在進行比較時, 若一個學習器的P-R曲線被另一個學習器的曲線完全“包住”,則可斷言後者的性能優于前者, 例如圖2.3中學習器A的性能優于學習器C;如果兩個學習器的P-R曲線發生了交叉,例如圖2.3中的A與B,則難以-一般性地斷言兩者孰優孰劣,隻能在具體的查準率或查全率條件下進行比較.然而,在很多情形下,人們往往仍希望把學習器A與B比出個高低.這時一個比較合理的判據.是比較P-R曲線下面積的大小,它在一定程度上表征了學習器在查準率和查全率.上取得相對“雙高”的比例.但這個值不太容易估算,是以,人們設計了一一些綜合考慮查準率、查全率的性能度量。

“平衡點”(Break-Event Point, 簡稱BEP) 就是這樣一個度量, 它是“查準率=查全率”時的取值,例如圖2.3中學習器C的BEP是0.64,而基于BEP的比較,可認為學習器A優于B.

但BEP 還是過于簡化了些,更常用的是 F1 度量:

機器學習入門筆記(一):模型性能評價與選擇

F1,是查準率和查全率的調和平均,用于綜合考慮這兩個性能度量。

在一些應用中,對查準率和查全率的重視程度有所不同.例如在商品推薦系統中,為了盡可能少打擾使用者,更希望推薦内容确是使用者感興趣的,此時查準率更重要; 而在逃犯資訊檢索系統中,更希望盡可能少漏掉逃犯, 此時查全率更重要. F1度量的一般形式一Fβ;, 能讓我們表達出對查準率/查全率的不同偏好,它定義為:

機器學習入門筆記(一):模型性能評價與選擇

其中β> 0度量了查全率對查準率的相對重要性. β = 1時退化為标準的F1; β>1時查全率有更大影響;β<1時查準率有更大影響.

3.3 ROC曲線

在不同的應用任務中,我們可根據任務需求來采用不同的截斷點,例如若我們更重視“查準率”,則可選擇排序中靠前的位置進行截斷;若更重視“查全率",則可選擇靠後的位置進行截斷.是以,排序本身的品質好壞,展現了綜合考慮學習器在不同任務下的“期望泛化性能”的好壞,或者說,“一般情況下”泛化性能的好壞. ROC曲線則是從這個角度出發來研究學習器泛化性能的有力工具.

ROC全稱是“受試者工作特征”(Receiver Operating Characteristic)曲線, 它源于“二戰”中用于敵機檢測的雷達信号分析技術,二十世紀六七十年代開始被用于一些心理學、醫學檢測應用中,此後被引入機器學習領域.與2.3.2節中介紹的P-R曲線相似,我們根據學習器的預測結果對樣例進行排序,按此順序逐個把樣本作為正例進行預測,每次計算出兩個重要量的值,分别以它們為橫、縱坐标作圖,就得到了“ROC曲線”.與P-R曲線使用查準率、查全率為縱、橫軸不同,ROC曲線的縱軸是“真正例率”(True Positive Rate,簡稱TPR),橫軸是“假正例率”(False PositiveRate,簡稱FPR), 基于表2.1中的符号,兩者分别定義為:

機器學習入門筆記(一):模型性能評價與選擇

TPR其實就等于召回率。ROC曲線如下圖:

機器學習入門筆記(一):模型性能評價與選擇

進行學習器的比較時,與P-R圖相似,若一個學習器的ROC曲線被另一個學習器的曲線完全“包住”,則可斷言後者的性能優于前者;若兩個學習器的ROC曲線發生交叉,則難以一般性地斷言兩者孰優孰劣.此時如果一定要進行比較,則較為合理的判據是比較ROC曲線下的面積,即AUC(AreaUnderROC Curve), 如圖2.4所示.

從定義可知,AUC可通過對ROC曲線下各部分的面積求和而得.假定ROC曲線是由坐标為{(x1,y1), (x2, y2)…(xm. ym)}的點按序連接配接而形成(x1=0, xm= 1),參見圖2.4(b),則AUC可估算為:

機器學習入門筆記(一):模型性能評價與選擇

3.4 混淆矩陣

3.4.1 多類别混淆矩陣

機器學習入門筆記(一):模型性能評價與選擇

例:基于混淆矩陣的手寫體數字識别分類模型評價混淆矩陣為10行*10列

機器學習入門筆記(一):模型性能評價與選擇
機器學習入門筆記(一):模型性能評價與選擇

3.4.2 基于多類别混淆矩陣的評價名額

機器學習入門筆記(一):模型性能評價與選擇
機器學習入門筆記(一):模型性能評價與選擇

繼續閱讀