1. 經驗誤差與過擬合
錯誤率:分類錯誤的樣本數占樣本總數的比例
例如:m個樣本中有a個樣本分類錯誤,則錯誤率為 E=a/m
精度:分類正確的樣本數占樣本總數的比例。即:精度=1-錯誤率
例如:m個樣本中有m-a個樣本分類正確,則精度 A=(m-a)/m=1-E
誤差:學習器的實際預測輸出與樣本的真實輸出之間的差異
例如:10000個西瓜中,好瓜有6000個,但學習器預測有6500個,這之間的差異就是誤差
訓練誤差、經驗誤差:學習器在訓練集上的誤差
測試誤差:學習器在測試集上的誤差
泛化誤差:學習器在新樣本上的誤差
我們希望得到泛化誤差最小的學習器,然而實際能做的是努力使經驗誤差最小化。
在很多情況下,我們可以學的一個經誤差很小、在訓練集上表現很好的學習器,但是在新樣本中很有可能表現卻并不好。
例如:甚至對所有訓練樣本都分類正確,即分類錯誤率為0,分類精度為100%,但是在新樣本中的分類全錯誤。
過擬合:學習器把訓練樣本學得太好,將訓練樣本自身的一些特點當成了所有潛在樣本都會具有的一般性質,從而導致泛化性能下降。
最常見的情況是由于學習能力過于強大,以至于把訓練樣本所包含的不太一般的特性都學到了
過擬合是機器學習面臨的關鍵障礙,各類學習算法都必然帶有一些針對過擬合的措施,但過擬合是無法徹底避免的,我們所能做的只是“緩解”,或者減小其風險。
例如:過擬合導致誤以為樹葉必須有鋸齒,如下圖。
欠擬合:相對于“過擬合”,對訓練樣本的一般性質尚未學好。
最常見的情況是由于學習能力低下造成的。
欠擬合比較容易克服,例如在決策樹學習中擴展分支、在神經網路學習中增加訓練輪數等
例如:欠擬合誤以為綠色的都是樹葉,如下圖。
2. 評估方法
使用測試集來測試學習器對新樣本的判別能力,然后以測試誤差作為泛化誤差的近似。
通常我們假設測試樣本也是從樣本真實分布中獨立同分布采樣得到,需要注意的是測試集應該盡可能與訓練集互斥。
例如:老師出了10道練習題供同學們練習,考試又用這10道題作為考題,可能有的同學只會做這10道題卻能得高分,并不能體現同學們對所學知識舉一反三的能力,也就是泛化能力。
2.1 留出法
留出法(hold-out):通過分層采樣直接將數據集D劃分為兩個互斥的集合,其中一個集合作為訓練集S,另一個作為測試集T,即D=S∪T,S ∩T=?,在S上訓練處模型后,用T來評估其測試誤差,作為泛化誤差的估計。
例如:假定D包含1000個樣本,將其劃分為S包含700個樣本,T包含300個樣本,用S進行訓練后,如果模型在T上有90個樣本錯誤,則錯誤率為 (90/300) * 100% = 30%,精度為 1 - 30% = 70%。
注意:訓練集/測試集的劃分要盡可能的保持數據分布的一致性,要避免因數據劃分過程引入額外的偏差而對最終結果產生影響
分層采樣:保留類別比例的采樣方式
例如:通過對D進行分層采樣而獲得含70%樣本的訓練集S和含30%樣本的測試集T,若D含500個正例、500個反例,則分層采樣得到的S應該包含350個正例、350個反例,而T則包含150個正例和150個反例。
注意:單次使用留出法得到的估計結果往往不夠穩定可靠,在使用留出法時,一般要采用若干次隨機劃分,重復進行實驗評估后取平均值作為留出法的評估結果。
例如:進行100次隨機劃分,每次產生一個訓練/測試集用于式樣評估,100次后就得到100個結果,留出法使用的是這100個結果的平均
存在的問題:訓練集/測試集大小的選擇對評估結果的影響,常見的做法是將大約2/3~4/5的樣本用于訓練,剩下樣本用于測試。
1. 若訓練集S包含絕大多數樣本,則訓練集S與D比較接近,訓練出的模型可能更加接近于用D訓練出的模型,但由于T比較小,評估結果可能不夠穩定準確
2. 若令測試集T多包含一些樣本,則訓練集S與D的差別較大,訓練出的模型與用D訓練出的模型可能有較大的差別,從而降低了評估結果的保真性。
2.2 交叉驗證法(k折交叉驗證)
交叉驗證法:通過分層采樣先將數據集D劃分為k個大小相似的互斥子集,每次用k-1個子集的并集作為訓練集,剩下的那個子集做測試集。可以獲得k組訓練/測試集,從而進行k次訓練和測試,最終返回的是這k個測試結果的均值。
k常用的值為5、10、20等
例如:10折交叉驗證
注意:與留出法類似,為減少因樣本劃分不同引入的差別,k折交叉驗證通常需要隨機使用不同的劃分重復p次,最終的評估結果是這p次k折交叉驗證結果的均值。
例如:10次10折交叉驗證
留一法:假定數據集中包含m個樣本,若令k=m,則得到交叉驗證的一個特例
留一法不受隨機樣本劃分方式的影響,因為m個樣本只有唯一的方式劃分m個子集。
優點:由于訓練集比初始數據集只少了一個樣本,所以在絕大多數情況下,留一法中被實際評估的模型與期望評估的用D訓練出的模型很相似,因此留一法的評估結果往往被認為比較準確。
缺點:在數據集比較大時,訓練m個模型的計算開銷可能是難以忍受的,而且這還是在未考慮算法調參的情況下
例如:數據集包含1百萬個樣本,則需要訓練1百萬個模型。
2.3 自助法
留出法和交叉驗證法存在的問題:在留出法和交叉驗證法中,由于保留了一部分樣本用于測試,實際評估的模型使用的訓練集比D小,會引入一些因為訓練樣本規模不同而導致的估計誤差。留一法受樣本規模變化的影響比較小,但是計算復雜度太高了。
自助法:給定包含m個樣本的數據集D,按如下方式采樣產生包含m個樣本的數據集D':每次隨機從D中挑選一個樣本將其拷貝放入D',然后再將該樣本放回D中,重復執行m次。D'我們用作訓練集,未出現的樣本D-D'我們用作測試集。
D中有一部分樣本會在D'中重復出現,而另一部分樣本不會出現。樣本在m次采樣中始終不會被采到的概率是:(1-1/m)^m,取極限得到
優點:自助法在數據集較小、難以有效劃分訓練集和測試集時效果顯著;能從初始數據集中產生多個不同的訓練集
缺點:自助法產生的數據集改變了初始數據集的分布,引入了估計偏差,因此在初始數據量足夠時,留出法和交叉驗證法更常用一些。
2.4 調參與最終模型
參數調節、調參:對算法參數進行設定
調參和算法選擇本質上是一致的,對每種參數配置都訓練出模型,然后把對應最好的模型的參數作為結果。
學習算法的很多參數是在實數范圍內取值的,因此對每種參數配置都訓練出模型是不可行的。通常的做法是對每個參數選定一個范圍和變化步長,顯然這樣選定的參數值往往不是最佳值,但這是在計算開銷和性能估計之間做的折中,只有這樣學習過程才變得可行。
例如:在[0,0.2]范圍內以0.05為步長,則實際要評估的候選參數值有5個,最終從這5個候選值中產生選定值。
即便在進行這樣的折中后,調參往往仍然很困難。很多強大的學習算法有大量的參數需要設定,這將導致極大的調參工程量,以至于在不少應用任務中,參數調得好不好往往對最終模型性能有關鍵性影響。
例如:算法有3個參數,每個參數僅考慮5個候選值,這樣對每一組訓練/測試集就有5^3=125個模型需要考察。
在模型選擇完成后,學習算法和參數配置已選定,此時應該用數據集D重新訓練模型。
通常把學得模型在實際使用中遇到的數據稱為測試數據,模型評估與選擇中用于評估測試的數據集通常稱為驗證集
3. 性能度量
性能度量:衡量泛化能力的評價標準
性能度量反映了任務需求,在對比不同模型的能力時,使用不同的性能度量往往會導致不同的評判結果。模型的“好壞”是相對的,什么樣的模型是好的,不僅取決于算法和數據,還決定于任務需求。
在預測任務中,給定樣例集D = {(x1, y1), (x2, y2),......, (xm, ym)}, 其中 yi是示例xi的真實標記,要評估學習器?f?的性能,需要將學習器的預測結果?f(x)?同真實標記y進行比較
回歸任務的性能度量
均方誤差:
更一般的,對于數據分布?和概率密度p(·),均方誤差的可描述為:
3.1 錯誤率與精度
錯誤率:分類錯誤的樣本數占樣本總數的比例
例如:m個樣本中有a個樣本分類錯誤,則錯誤率為 E=a/m
精度:分類正確的樣本數占樣本總數的比例。即:精度=1-錯誤率
例如:m個樣本中有m-a個樣本分類正確,則精度 A=(m-a)/m=1-E
對樣例集D,錯誤率定義為
精度定義為
更一般的,對于數據分布?和概率密度p(·),錯誤率與精度可分別描述為:
3.2 查準率、查全率與F1
對于二分類問題,可將樣例根據其真實類別與學習器預測類別的組合劃分為真正例(TP)、假正例(FP)、真反例(TN)、假反例(FN)四種情形。
TP + FP +TN + FN = 樣例總數
查準率P:真正例樣本數/預測結果是正例的樣本數
例如:瓜農拉來一車西瓜,挑出來的西瓜有多少比例是好瓜
查全率:真正例樣本數/真實情況是正例的樣本數
例如:瓜農拉來一車西瓜,所有好瓜中有多少比例被挑了出來
查準率和查全率是一對矛盾的度量。一般來說,查準率高時,查全率往往偏低;而查全率高時,查準率往往偏低。通常只有在一些簡單的任務中,才有可能是查全率和查準率都很高。
例如:若希望將好瓜盡可能多的選出來,則可通過增加選瓜的數量,如果將所有西瓜都選上,那么所有的好瓜也必然選上,但是這時查準率就會比較低。若希望選出的瓜中好瓜比例盡可能高,則可只挑選最有把握的瓜,但是這樣就會漏掉不少好瓜,使得查全率較低。
我們可以根據學習器的預測結果對樣例進行排序,排在前面的是學習器認為“最可能”是正例的樣本,排在最后的是學習器認為“最不可能”是正例的樣本。按此順序逐個把樣本作為正例進行預測,則每次可以計算出當前的查全率、查準率。以查準率做縱軸、查全率做橫軸作圖,就得到了查準率-查全率曲線,簡稱“P-R曲線”。
基于P-R曲線的學習器性能評價規則
1. 當曲線沒有交叉的時候:外側曲線的學習器性能優于內側;
例如:學習器A的性能優于學習器C
2. 當曲線有交叉的時候:
1)、比較P-R曲線下面積,它在一定程度上表征了查全率和查準率取得相對“雙高”的比例,但這個值不太容易估算;
2)、比較兩條曲線的平衡點(Break-Event Point, 簡稱BEP),平衡點是“查準率=查全率”時的取值,BEP越大,性能越優。
例如:基于BEP的比較,可以認為學習器A優于學習器B
3)、BEP過于簡化,更常用的F1度量和Fβ度量。
F1是基于查準率與查全率的調和平均定義的,Fβ則是加權調和平均
F1度量的一般形式Fβ
β > 0 度量了查全率對查準率的相對重要性。
β = 1 時退化為標準的F1;β > 1 時查全率有更大影響;β < 1 時查準率有更大影響。
很多時候我們有多個二分類混淆矩陣,我們希望在n個二分類混淆矩陣上綜合考慮查準率和查全率。
例如:進行多次訓練/測試,每次得到一個混淆矩陣;或是在多個數據集上進行訓練/測試,需希望估計算法的“全局性能”;甚或是執行多分類任務,每兩兩類別的組合都對應一個混合矩陣。
1)、先在各個混淆矩陣中分別計算出查準率查全率,再計算平均值,這樣就得到“宏查準率”(macro-P)、“宏查全率”(macro-R)以及“宏F1”(macro-F1)。
2)、先將各個混淆矩陣的對應元素進行平均,得到TP、FP、TN、FN 的平均值,再基于這些平均值計算“微查準率”(micro-P)、“微查全率”(micro-R)和“微F1”(micro-F1)。
3.3 ROC與AUC
根據實值或概率預測結果,我們可以將測試樣本進行排序,“最可能”是正例的排在前面,“最不可能”是正例的排在最后面。分類過程相當于在這個排序中以某個“截斷點”將樣本分為兩個部分,前一部分判做正例,后一部分則判作反例。
在不同的應用任務中,我們可根據任務需求來采用不同的截斷點。
例如:若我們更重視查準率。則可選擇排序靠前的位置進行截斷;若更重視查全率,則可選擇靠后的位置進行截斷。
排序本身質量的好壞,體現了綜合考慮學習器在不同任務下的“期望泛化性能”的好壞,或者說“一般情況下”泛化性能的好壞。ROC曲線則是從排序本身質量的好壞的角度來研究學習器泛化性能。
ROC全名“受試者工作特征”曲線,以“真正例率”為縱軸,以“假正例率”為橫軸。
真正例率TPR:真正例樣本數/真實情況是正例的樣本數(查全率)
假正例率FPR:假正例樣本數/真實情況是是反例的樣本數
ROC曲線的繪制過程:給定m+個正例和m-個反例,根據學習器預測結果對樣例進行排序,然后把分類閾值設為最大,即把所有樣例均預測為反例,此時真正例率和反正例率均為0,在坐標(0,0)處標記一個點。然后將分類閾值依次設為每個樣例的預測值,即依次將每個樣例劃分為正例。設前一個標記點坐標為(x,y),當前若為真正例,則對應標記點的坐標為(x,y+1/m+);當前若為假正例,則對應標記的坐標為(x+1/m-,y),然后用線段連接相鄰點即得。
現實任務中通常利用有限個測試樣例來繪制ROC圖,此時僅能獲得有限個坐標,無法產生(a)中的ROC曲線,只能產生(b)中的ROC曲線。
基于ROC曲線的學習器性能評價規則
1. 當曲線沒有交叉的時候:外側曲線的學習器性能優于內側;
2. 當曲線有交叉的時候:比較ROC曲線下的面積即 AUC (Area Under ROC Curve)
AUC可估算為
形式化的看,AUC考慮的是樣本預測的排序質量,因此它與排序誤差有緊密聯系。
給定m+個正例和m-個反例,令D+和D-分別表示正、反例集合,則排序的損失定義為
即考慮每一對正、反例,若正例的預測值小于反例,則記一個“罰分”,若相等,則記0.5個“罰分”。容易看出,對應的是ROC曲線之上的面積:若一個正例在ROC曲線上對應標記點的坐標為(x,y),則x恰是排序在其之前的反例所占的比例,即假正例率。因此有
3.4 代價敏感錯誤率與代價曲線
前面介紹的性能度量,大都隱式地假設了不同類型的錯誤造成的后果相同,但是在現實任務中經常遇到不同類型的錯誤造成的后果不同的情況。
例如:在醫療診斷中,錯誤地把患者診斷為健康人與錯誤的把健康人診斷為患者,前者的后果可能是錯失醫治的最佳時機,而后者只是增加了進一步檢查的麻煩。
為權衡不同類型的錯誤所造成的不同損失,可為錯誤賦予“非均等代價”。
以二分類代價矩陣為例,我們可根據任務領域知識設定一個“代價矩陣”。
“代價敏感錯誤率”為
類似的,可給出基于分布定義的代價敏感錯誤率,以及其他一些性能度量,如精度代價敏感版本。對于多分類任務同樣也可以定義出代價敏感性能度量。
在非均等代價下,ROC曲線不能直接反映出學習器的期望總體代價,而“代價曲線”則可以達到目的。代價曲線的橫軸是正例概率代價P(+)cost,縱軸是歸一化代價cost_norm
其中,p是樣例為正例的概率
其中,FPR是假正例率,FNR = 1 - TPR
代價曲線的繪制過程:ROC曲線上的每一個點對應了代價平面上的一條線段,設ROC曲線上點的坐標為(TPR,FPR),則可相應計算出FNR,然后在代價平面上繪制一條從(0,FPR)到(1,FNR)的線段,線段下的面積即表示了該條件下的期望總體代價。如此將ROC上的每個點轉化為代價平面上的一個線段,然后取所有線段的下界,圍成的面積即為在所有條件下學習器的期望總體代價。
4. 比較檢驗
性能比較的復雜的原因:
1)、通過實驗評估方法獲得的是測試集上的性能與泛化性能可能存在差異
2)、測試集上的性能與測試集本身的選擇有很大關系
3)、很多學習算法本身有一定的隨機性,即便使用相同的參數設置在同一個測試集上多次運行,其結果也會不同。
4.1 假設檢驗
4.2 交叉驗證t檢驗
4.3 McNemar 檢驗
4.4 Friedman 檢驗與 Nemenyi 后續檢驗
5. 偏差與方差
“偏差-方差分解”用來解釋學習算法泛化性能的一種重要工具
“偏差-方差分解”試圖對學習算法的期望泛化錯誤率進行拆解。
以回歸任務為例,學習算法的期望預測為
其中,f?(x;D)為訓練集D上學得的模型?f?在x上的預測輸出
使用樣本數相同的不同訓練集產生的方差為
噪聲為
期望輸出與真實標記的差別稱為偏差,即
為了討論方便,假定噪聲期望為0,通過簡單的多項式展開合并,可對算法的期望泛化誤差進行分解。
于是得到,
泛化誤差可分解為偏差、方差與噪聲之和
偏差度量了學習算法的期望預測與真實結果的偏離程度,即刻畫了學習算法本身的擬合能力;方差度量了同樣大小的訓練集的變動所導致的學習性能的變化,即刻畫了數據擾動所造成的影響;噪聲度量了在當前任務上任何學習算法所能達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度。
泛化性能時由學習算法的能力、數據的充分性以及學習任務本身的難度共同決定。
一般來說,偏差與方差是有沖突的,稱為偏差-方差窘境。
給定學習任務,假定我們能夠控制學習算法的訓練程度。
1)、在訓練不足時,學習器的擬合能力不夠強,訓練數據的擾動不足以是數據集產生顯著變化,此時偏差主導了泛化錯誤率;
2)、隨著訓練程度的加深,學習器的擬合能力逐漸增強,訓練數據發生的擾動逐漸能被學習器學到,此時方差主導了泛化錯誤率;
3)、在訓練程度充足后,學習器的擬合能力非常強,數據的輕微擾動都會導致學習器發生顯著的變化,若訓練數據自身的、非全局的特性被學習器學到,則會發生過擬合。