机器学习笔记(二)模型评估与选择
2.模型評估與選擇
2.1經驗誤差和過擬合
不同學習算法及其不同參數產生的不同模型,涉及到模型選擇的問題,關系到兩個指標性,就是經驗誤差和過擬合。
1)經驗誤差
錯誤率(errorrate):分類錯誤的樣本數占樣本總數的比例。如果在m個樣本中有a個樣本分類錯誤,則錯誤率E=a/m,相應的,1-a/m稱為精度(accuracy),即精度=1-錯誤率。
誤差(error):學習器的實際預測輸出和樣本的真實輸出之間的差異。訓練誤差或經驗誤差:學習器在訓練集上的誤差;泛化誤差:學習器在新樣本上的誤差。
自然,理想情況下,泛化誤差越小的學習器越好,但現實中,新樣本是怎樣的并不知情,能做的就是針對訓練集的經驗誤差最小化。
那么,在訓練集上誤差最小、甚至精度可到100%的分類器,是否在新樣本預測是最優的嗎?
我們可以針對已知訓練集設計一個完美的分類器,但新樣本卻是未知,因此同樣的學習器(模型)在訓練集上表現很好,但卻未必在新樣本上同樣優秀。
2)過擬合
學習器首先是在訓練樣本中學出適用于所有潛在樣本的普遍規律,用于正確預測新樣本的類別。這會出現兩種情況,導致訓練集上表現很好的學習器未必在新樣本上表現很好。
過擬合(overfitting):學習器將訓練樣本的個體特點上升到所有樣本的一般特點,導致泛化性能下降。
欠擬合(underfitting):學習器未能從訓練樣本中學習到所有樣本的一般特點。
通俗地說,過擬合就是把訓練樣本中的個體一般化,而欠擬合則是沒學習到一般特點。一個是過猶不及;一個是差之毫厘。過擬合是學習能力太強,欠擬合是學習能力太弱。
欠擬合通過調整模型參數可以克服,但過擬合確實無法徹底避免。機器學習的問題是NP難,有效的學習算法可在多項式時間內完成,如能徹底避免過擬合,則通過經驗誤差最小化就能獲得最優解,這樣構造性證明P=NP,但實際P≠NP,過擬合不可避免。
總結,在模型選擇中,理想的是對候選模型的泛化誤差進行評估,選擇泛化誤差最小的模型,但實際上無法直接獲得泛化誤差,需要通過訓練誤差來評估,但訓練誤差存在過擬合現象也不適合作為評估標準,如此,如何進行模型評估和選擇呢?
2.2評估方法
評估模型既然不能選擇泛化誤差,也不能選擇訓練誤差,可以選擇測試誤差。所謂測試誤差,就是建立測試樣本集,用來測試學習器對新樣本的預測能力,作為泛化誤差的近似。
測試集,也是從真實樣本分布中獨立同分布采樣而得,和訓練集互斥。通過測試集的測試誤差來評估模型,作為泛化誤差的近似,是一個合理的方法。對數據集D={(x1,y1), (x2,y2),…, (xm,ym)}進行分隔,產生訓練集S和測試集T,通過訓練集生成模型,并應用測試集評估模型。文中有個很好的例子,就是訓練集相當于測試題、而測試集相當于考試題。
現在我們將問題集中在測試集的測試誤差上,用以評估模型。那重要的是,對數據集D如何劃分成訓練集和測試集從而獲得測試誤差?
1)留出法
留出法(hold-out)將數據集D劃分為兩個互斥的集合,其中一個集合用作訓練集S,另一個作為測試集T,即D=SUT,S∩T=?。在S上訓練出的模型,用T來評估其測試誤差,作為對泛化誤差的近似估計。
以二分類任務為例。假定D包含1000個樣本,將其劃分為700個樣本的訓練集S和300個樣本的測試集T。用S訓練后,模型在T上有90個樣本分類錯誤,那么測試誤差就是90/300=30%,相應地,精度為1-30%=70%。
留出法就是把數據集一分為不同比例的二,這里面就有兩個關鍵點,一個就是如何分?另一個就是分的比例是多少?
如何分呢?訓練集和測試集的劃分要保持數據分布的一致性。何意?分層采樣,保持樣本的類別比例相似,就是說樣本中的各類別在S和T上的分布要接近,比如A類別的樣本的比例是S:T=7:3,那么B類別也應該接近7:3這個分布。
在分層采樣之上,也存在不同的劃分策略,導致不同的訓練集和測試集。顯然,單次使用留出法所得到的估計結果不夠穩定可靠,一般情況下采用若干次隨機劃分、重復進行試驗評估后取平均值作為評估結果。
S和T各自分多少呢?若訓練集S過多而測試集T過小,S越大越接近D,則訓練出的模型更接近于D訓練出的模型,但T小,評估結果可能不夠穩定準確;若訓練集S偏小而測試集T偏多,S和D差距過大,S訓練的模型將用于評估,該模型和D訓練出的模型可能有較大差別,從而降低評估結果的保證性(fidelity)。S和T各自分多少,沒有完美解決方法,通常做法是二八開。
2)交叉驗證法
交叉驗證法(crossvalidation)將數據集D劃分為k個大小相似的互斥子集,即D=D1UD2U…UDk,Di∩Dj=?(i≠j);每個子集Di都盡可能保持數據分布的一致性,即從D中通過分層采樣所得。訓練時,每次用k-1個子集的并集作為訓練集,余下的一個子集作為測試集;如此,可獲得k組訓練集和測試集,從而進行k次訓練和測試,最終返回k次測試結果的均值。k值決定了交叉驗證法評估結果的穩定性和保真性,因此也稱為k折交叉驗證或k倍交叉驗證,k常取值10、5、20,10折交叉驗證示意圖如下:
和留出法一樣,將數據集D劃分為k個子集也是多樣劃分方式,為減小樣本劃分不同而發生的差別,k折交叉驗證通常隨機使用不同的劃分重復p次,最后評估結果是這p次k折交叉驗證結果的均值,如10次10折交叉驗證。
典型的劃分特例留一法(Leave-One-Out,LOO),假設數據集D中包含m個樣本,令k=m,就是每個子集只包含一個樣本。這個特例,不受隨機樣本劃分方式的影響,且訓練集S只比數據集D少一個樣本,其實際訓練出的模型和期望評估的用D訓練出的模型相似,其評估結果比較準備。當然,問題就是一個樣本一個子集,一旦樣本過大,訓練的模型所需開銷也是極其龐大,且其評估結果也未必比其他方法準確。
實際,所有算法都是如此,有其優點有其缺點,各有適用場合,符合性價比原則。比如留一法,為了提升理論上的準確性,而犧牲相對明確龐大的開銷,效益上是否可取,那要看場合了。
3)自助法
在留出法和交叉驗證法中,訓練集S的樣本數是小于數據集D,因樣本規模不同會導致所訓練的模型及評估結果偏差。留一法雖然S只少一個樣本,但計算規模龐大。那么有沒辦法避免樣本規模影響且能高效計算呢?
自助法,基于自助采樣獲取訓練集和測試集。給定包含m個樣本的數據集 ,如何通過自助采樣(可重復采樣或有放回采樣)產生數據集D’呢?自助采樣基本過程是:每次隨機從D中選一個樣本,放入D’,然后將該樣本放回初始數據集D中,使得該樣本在下次采樣時仍有可能被采到;這個過程重復執行m次后,就得到了包含m個樣本的數據集D’,規模和D一樣,不同的是,D’中部分樣本可能重復也有部分樣本可能不出現。一個樣本在m次自助采樣中都沒有被采到的概率是(1-1/m)m,取極限得到:
即通過自助采樣,初始數據集D中約有36.8%的樣本未出現在采樣數據集D’中。自助采樣后 ,將樣本規模和數據集D一樣的采樣數據集D’作為訓練集S=D’,將T=D-D’作為測試集(不在D’中的樣本作為測試集)。如此,實際評估的模型(訓練集S訓練出的)與期望評估的模型(數據集 D訓練出的)使用了同樣的樣本規模(m個樣本),同時又有大概36.8%的樣本(未在采樣數據集D’中)作為測試集T用于測試,產生的測試結果,稱為包外估計(out-of-bag estimate)。
每個算法都有自己的使用場合,并不是萬能性地好用高效。自助法自助采樣產生的數據集D’也是改變了初始數據集D的分布,也會引入估計偏差。自助法適用于數據集較小、難以有效劃分訓練集和測試。在初始數據量足夠時,留出法和交叉驗證法更常用一些。為更好地對模型(學習器)進行泛化性能評估,提出了近似的測試誤差來評估泛化誤差,也就衍生出了留出法、交叉驗證法、自助法的數據集劃分方法。實際上,算法還需要調參,不同的參數配置,模型的性能會有一定差別。在進行模型評估和選擇時,除了選擇算法還有數據集劃分方法外,還需要對算法參數進行設定或說是調節。每一個算法都有參數設定空間,假定算法有3個參數,每個參數有5個可選值,對每一組訓練集/測試集來說就有53=125個模型需要考察。
實際的學習過程中,對給定包含m個樣本的數據集D,先選定學習算法及其參數,然后劃分數據集訓練和測試,直至選定算法和參數,再應用數據集D來重新訓練模型。在研究對比不同算法的泛化性能時,用測試集上的判別效果來評估模型在實際使用中的泛化能力,而把訓練數據另外劃分為訓練集和驗證集,基于驗證集上的性能進行模型選擇和調參。
梳理下幾個要點:1)將數據集劃分為:訓練集、驗證集、測試集;2)訓練集用于訓練出模型,驗證集用于模型選擇和調參,測試集用于近似評估泛化誤差;3)模型評估方法有留出法、交叉驗證法、自助法,用于算法選擇及參數設定。2.3性能度量
通過在訓練過程中的評估方法來判定學習器的泛化性能,還需要通過性能度量來考察。換句話來說,選什么模型,通過訓練集、驗證集、測試集來實驗評估選定并輸出;而所輸出的模型,在測試集中實的泛化能力,需要通過性能度量工具來度量。這樣理解,基于測試誤差近似泛化誤差的認定,通過劃分數據集為訓練集、驗證集、測試集,并選擇不同的評估方法和調整算法參數來輸出的模型,需要通過性能度量的工具來量化評估。
不同的性能度量,在對比不同模型能力時,會導致不同評判結果,因為模型的好壞是相對的。實際模型的好壞,取決于算法和數據,取決于訓練中調參和實驗評估方法,也取決于當前任務的實際數據。
模型訓練出來后,進行預測時,給定樣例集D={(x1,y1), (x2,y2),…, (xm,ym)},其中yi是示例xi的真實標記,要評估學習器f的性能,把學習器預測結果f(x)與真實標記y進行比較。
預測回歸任務最常用的性能度量是均方誤差(mean squared error):
| 真實情況 | 預測結果 | |
| 正例 | 反例 | |
| 正例 | TP(真正例) | FN(假反例) |
| 反例 | FP(假正例) | TN(真反例) |
查準率P和查全率R分別定義為:
P=TP/(TP+FP)
R=TP/(TP+FN)
查準率和查全率是一對矛盾的度量,一般來說,查準率高時,查全率往往偏低;而查全率高時,查準率往往偏低。在信息檢索中,查準率就是檢索出的信息有多少比例是用戶感興趣的;查全率則是用戶感興趣的信息有多少被檢索出來。查準率分母中就包含了那些不是用戶感興趣的信息,但仍被預測為是用戶感興趣的而被檢索出來;查全率分母中則包含了那些是用戶感興趣的信息,但為被預測為用戶感興趣而被拋棄未檢索出來。
可根據學習器的預測結果對樣例進行排序,排在前面的是學習器認為最可能是正例的樣本,排在最后的則是學習器認為最不可能是正例的樣本。按此順序逐個把樣本作為正例進行預測,則每次可以計算出當前的查全率、查準率,并以查準率為縱軸、查全率為橫軸構造查準率-查全率曲線,簡稱P-R曲線。
P-R曲線是非單調、不平滑的。P-R曲線可用來評估學習器的優劣。若一個學習器的P-R曲線被另一個學習器的P-R曲線完全包住,則后者的性能優于前者。如果兩個學習器的曲線發生交叉,則通過二者面積的大小來比較,面積大的表示查全率和查準率雙高比較優秀,但不太容易計算曲線(不平滑)的面積,因此通過平衡點(Break-Even Point,簡稱BEP)來度量。BEP是坐標上查準率等于查全率時的點,平衡點值越大,學習器越優秀。
用了簡單的圖來說明,紅色的點就是三條P-R曲線的BEP點,學習器A的曲線被C包住,C比較優秀,而C和B交叉,用面積計算難以估算,但C的BEP值大于B,所以C比較優秀。
ERP過于簡化,定義F1常量來比較學習器P-R曲線的性能:
F1=2*P*R/P+R=2*TP/(樣例總數+TP-TN)
不同的應用場合,對查全率和查準率的側重不同,如在商品推薦中,為盡可能少打擾用戶,希望推薦的內容卻是用戶所感興趣的,查準率更重要;在逃犯信息檢索中,希望盡可能少漏掉逃犯,此時查全率更重要。對查準率和查全率的不同偏好,可用F1度量的一般形式Fβ,定義為:
Fβ=(1+β2)*P*R/((β2*P)+R)
其中β>0度量了查全率對查準率的相對重要性;β=1時就是標準的F1;β>1時偏好查全率;β<1時偏好查準率。
F1是基于查準率和查全率的調和平均(harmonic mean)定義:
1/F1=1/2*(1/P+1/R)
Fβ則是加權調和平均:
1/ Fβ=1/(1+β2)*(1/P+β2/R)
與算術平均(P+R)/2和幾何平均 相比,調和平均更重視較小值。
幾何平均數:N個數據的連乘積的開N次方根。
算術平均數:一組數據的代數和除以數據的項數所得的平均數.
調和平均數:一組數據的倒數和除數據的項數的倒數。
平方平均數:一組數據的平方和除以數據的項數的開方。
對同一數據,調和≤幾何≤算術≤平方。
進行多次訓練和測試、在多個數據集上進行訓練和測試、執行多分類任務時每兩兩類別組合對應的混淆矩陣,這些情況系下產生的多個混淆矩陣,需要估計算法的全局性能,即在n個二分類混淆矩陣上考察查準率和查全率,從而評估模型性能。這個有兩種做法,一個是求得P和R再平均;另一個是直接對TP、FP、TN、FN求取平均值后再得P和R值;分別為宏查全率和宏查準率、微查全率和微查準率。
3)ROC與AUC
很多學習期為測試樣本產生一個實值或概率預測,然后將這個預測值和分類閾值進行比較,若大于閾值則分類正類,否則為反類。對測試樣本的實值或概率預測結果進行排序,最可能是正例的排在最前面,最不可能是正例的排在最后面。分類過程就相當于在這個排序中以某個截斷點將樣本分為兩部分,前一部分判為正例,后一部分則判為反例。
在不同的應用任務中,可根據任務需求來采用不同的截斷點,選擇排序中靠前的位置進行截斷重視查準率;選擇靠后的位置進行截斷則重視查全率。排序本身的質量好壞,體現了學習器在不同任務下的期望泛化性能的好壞,或者說,一般情況下泛化性能的好壞。ROC曲線正是考量期望泛化性能的性能度量工具,適用于產生實值或概率預測結果的學習器評估。
ROC(ReceiverOperating Characteristic,受試者工作特征),根據學習器的預測結果對樣例進行排序,按此順序逐個把樣本作為正例進行預測,每次計算出兩個重要量的值,分別作為橫、縱坐標,即得到ROC曲線。
ROC曲線的縱軸是真正例率(The Positive Rate,TPR),橫軸是假正例率(FalsePositive Rate,FPR),分別定義為:真正例率:TPR=TP/(TP+FN),預測的真正例數和實際的正例數比值,有多少真正的正例預測準確;
假正例率:FPR=FP/(TN+FP),預測的假正例數和實際的反例數比值,有多少反例被預測為正例;
從圖中可以看出ROC曲線的對角線對應于隨機猜測模型,而點(0,1)則對應于將正例排在所有反例之前的理想模型,真正例率是100%。
在實際任務中,樣本是有限的,所以不能產生光滑的ROC曲線,而是帶有齒狀的近似ROC曲線。有限個測試樣例ROC圖繪制方法:給定m+個正例和m-個反例,根據學習器預測結果對樣例進行排序,開始把分類閾值設為最大(所有樣例均預測為反例),此時真正例率和假正例率均為0,在坐標(0,0)處標記一個點;然后,依次將分類閾值設為每個樣例的預測值(依次將每個樣例劃分為正例),并求解真正例率和假正例率,在相應的坐標處標記一個點。設前一個標記點坐標為(x,y),當前若為真正例,則對應比較點的坐標為(x,y+1/ m+);當前若為假正例,則對應標記的點的坐標為(x+1/ m-,y),最后用線段把相鄰的點連接起來即得近似ROC曲線。
接著,自然是要說到用ROC曲線怎么比較學習器的優劣呢?和P-R曲線相似,若一個學習器的ROC曲線被另一個學習器的曲線完成包住,則后者的性能優于前者。若兩個學習器的ROC曲線發生交叉,要進行比較的話,就需要比較ROC曲線下的面積,即AUC(AreaUnder ROC Curve)。
AUC可通過對ROC曲線下各部分的面積求和而得。假定ROC曲線是由坐標為{(x 1,y 1), (x 2,y 2),…, (x m,y m)}的點按序鏈接而形成(x 1=0,x m=1),則AUC估算為:
| 真實類別 | 預測類別 | |
| 第0類 | 第1類 | |
| 第0類 | 0 | cost01 |
| 第1類 | Cost10 | 0 |
如上表,整體學習器性能評估上,不是考慮最小化錯誤次數,而是最小化總體代價。假設上表的第0類為正類,第1類為反類,令D+和D-分別表示正、反例集合,則代價敏感(cost-sensitive)錯誤率為:
其中FPR是假正例率,FNR=1-TPR是假反例率。代價曲線的繪制:ROC曲線上的每一點對應了代價平面上的一條線段,設ROC曲線上點的坐標為(TPR,FPR),則可相應計算出FNR,然后在代價平面上繪制一條從(0,FPR)到(1,FNR)的線段,線段下的面積表示了該條件下的期望總體代價。如此,將ROC曲線上的每個點轉化為代價平面上的一條線段,然后去所有線段的下界,圍城的面積即為在所有條件下學習器的期望總體代價。
5)總結
對學習器的性能度量是選擇學習器的參考,下面對幾個性能度量指標進行分類:
| 類別 | 性能度量指標 | ||
| 均等代價 | 非均等代價 | ||
| 預測分類的學習器 | P-R曲線和F1 | 代價敏感錯誤率 | ? |
| 預測實值的學習器 | ROC曲線和AUC | 代價曲線 | |
對于常用的錯誤率和精度,也是用于預測分類的學習器性能度量。實際上,不同的任務需要采用不同的指標來度量,同時在指標上具體的側重也不同。
2.4比較檢驗
對學習器的性能評估,基于測試集已經給出了評估方法和衡量模型泛化能力的性能度量工具,那么是否就可以通過對性能度量的值比較來評估學習器優劣呢?顯然答案不是那么肯定,因為測試集上的性能評估方法和度量工具始終還是測試集上的,與測試集本身的選擇有關系,且機器學習算法本身存在一定隨機性。統計假設檢驗(hypothesis test)為學習器性能比較提供了重要依據。
基于假設檢驗結果可推斷出,在測試集上觀察到的學習器A優于B,則A的泛化性能是否在統計意義上好于B,以及這個判定的準確度。也就是說,在測試集上的評估和度量,放在統計意義上進一步檢驗。以錯誤率為性能度量工具,用e表示,介紹假設檢驗方法。
1)單個學習器的假設檢驗
假設檢驗中的假設是對學習器泛化錯誤率分布的某種判斷或猜想。在統計意義上,對泛化錯誤率的分布進行假設檢驗。現實任務中,只知測試錯誤率,而不知泛化錯誤率,二者有差異,但從直觀上,二者接近的可能性較大,而相差很遠的可能性很小,因此可基于測試錯誤率推出泛化錯誤率的分布。
實際上,評估方法和性能度量,正式基于上面這一統計分布直觀思維來開展,這里更是通過假設檢驗來進一步肯定測試錯誤率和泛化錯誤率二者接近。
| 數據集 | 算法A | 算法B | 算法C |
| D1 | 1 | 2 | 3 |
| D2 | 1 | 2.5 | 2.5 |
| D3 | 1 | 2 | 3 |
| D4 | 1 | 2 | 3 |
| 平均序值 | 1 | 2.125 | 2.875 |
2.5偏差與方差
通過實驗方法估計的泛化性能,還需要解釋其具有這樣性能的原因,回答為什么具有這樣的性能。偏差-方差分解是解釋學習算法泛化性能的一種重要工具。
梳理下模型評估與選擇的整個思路:首先模型評估面臨經驗誤差和過擬合現象,因此引入測試集,通過測試誤差率近似泛化誤差率來評估模型,提出了評估方法,并量化度量性能,在此基礎上通過假設檢驗為性能度量提供依據,最后解釋性能,即偏差-方差分解。
偏差-方差分解對學習算法的期望泛化錯誤率進行拆解。算法在不同訓練集上學得的結果很可能不同,即便這些訓練集是來自同一分布。對測試樣本x,令y D為x在數據集中的標記,y為x的真實標記,f(x;D)為訓練集D上學得模型f在x上的預測輸出。以為回歸任務為例,學習算法的期望預測為:
正好分解為:偏差、方差和噪聲之和。
偏差度量了學習算法的期望預測與真實結果的偏離程度,即刻畫了學習算法本身的擬合能力;方差度量了同樣大小的訓練集的電動所導致的學習性能的變化,即刻畫了數據擾動所造成的影響;噪聲則表達了當前任務上任何學習算法所能達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度。偏差-分差分解說明,泛化性能是由算法的能力、數據的充分性以及學習任務本身的難度所共同決定的。給定學習任務,為取得較好的泛化性能,需使偏差較小,即能否重復擬合數據,并使方差較小,即使數據擾動產生的影響小。
然而,偏差和方差是有沖突的,稱為偏差-方差窘境(bias-variance dilemma)。給定學習任務并假定學習算法的訓練程度,在訓練不足時,學習器的擬合能力不夠強,訓練數據的擾動不足以使學習器產生顯著變化,此時偏差主導泛化錯誤率;隨著訓練程度的加深,學習器的擬合能力逐漸增強,訓練數據所發生的擾動漸漸被學習器學到,方差逐漸主導了泛化錯誤率;在訓練程度充足后,學習器的擬合能力已非常強,訓練數據發生的輕微擾動都會導致學習器發生顯著變化,若訓練數據自身的、非全局的特性被學習器學到了,將發生過擬合。總結
以上是生活随笔為你收集整理的机器学习笔记(二)模型评估与选择的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机器学习知识点(二)各类型平均数Java
- 下一篇: 关于微信小程序的好奇和多事