第二章 模型評估與選擇

1. 誤差、欠擬合與過擬合

? ? ? ? 在訓練過程中,每一次訓練并測試時都會發(fā)現(xiàn)有部分樣本識別錯誤。我們把識別錯誤樣本占總數(shù)的比例稱為錯誤率,定義錯誤率E=a/m,其中a為錯誤樣本數(shù),m為樣本總數(shù)。與其對應的1-a/m則稱為精度。更一般情況,稱實際輸出與真實輸出的差異為誤差,在訓練集上的誤差稱為訓練誤差經(jīng)驗誤差,在測試時預測的誤差稱為泛化誤差。當然我們希望得到誤差最小,也即精度最大的模型。那么精度為100%的學習器是我們想要的模型嗎?其實這種模型大多泛化能力不強,因此不會選取。這里涉及到欠擬合與過擬合。

? ? ? ? 當學習器學習樣本準確率過高時,其極有可能把樣本獨有的特征學習到了,而相對的忽略大多樣本的一般特征。這種情況稱為過擬合,一般過擬合的模型泛化能力都相對較差。相對的,欠擬合就是模型訓練的精度太低,連樣本的一般特征也沒有學習到。這兩種情況在下圖中都有很好的詮釋。

圖1:過擬合與欠擬合的類比

? ? ? ? 欠擬合很好解決,就是加多數(shù)據(jù),加大訓練次數(shù)即可。過擬合較麻煩,機器學習算法中過擬合無法徹底避免,優(yōu)秀的算法會想辦法減輕過擬合的影響。當前有多種算法和參數(shù)調整方法可以建立機器學習模型,這里涉及到了模型選擇問題,我們應當有相應的評估和選擇方法可以找到泛化能力最強的模型。下面將介紹一些模型評估和選擇的方法。

2. 評估方法

? ? ? ? 現(xiàn)在已知有數(shù)據(jù)集D,我們的目標是將它劃分為訓練集S和測試集T,使得模型的學習和泛化能力盡可能的被開發(fā)出來。

方法一:留出法

? ? ? ? 留出法思想簡單,就是將數(shù)據(jù)集D直接劃分為兩個互斥的集合,一個作為訓練集,另一個作為測試集。數(shù)據(jù)集在劃分細節(jié)上也有要求,我們必須保證在劃分時整個數(shù)據(jù)集的標簽種類是程均勻分布的,即保證機器在訓練和測試時可以遇到所有情況。單次使用留出法結果不夠準確,因為不同的分法訓練和測試結果會不同,所以一般會多次隨機劃分訓練集和測試集并進行訓練測試,最終得到的多個精度取平均得到最后結果。訓練集占數(shù)據(jù)集的比例沒有完美的解決方案,一般經(jīng)驗值為2/3~4/5。

方法二:交叉驗證法

? ? ? ? 交叉驗證法首先將有m個樣本的數(shù)據(jù)集D劃分為k個大小相似的互斥子集,且均保持數(shù)據(jù)標簽的均勻分布。每次利用k-1個子集進行訓練,剩下的1個用于測試,如此嘗試有k種,我們最終返回k個結果的均值。算法驗證的好壞主要取決于k的取值,通常取k=10,所以算法又稱為“十折交叉驗證”,其示意圖如下。相比留出法,交叉驗證顯然更加穩(wěn)定與公平。

圖2:十折交叉驗證法示意圖

? ? ? ? 當k=m這種特殊情況時,每個樣本被視為一個自己,則可稱評估方法為留一法(LOO),該方法不受樣本順序隨機的影響,所以結果會更加準確。但若數(shù)據(jù)集過大,樣本過多,計算時間會大幅增加。

方法三:自助法

? ? ? ? 前兩種方法都需要從數(shù)據(jù)集中分訓練集和測試集進行學習預測,這種方式會導致分法不同得到的結果也不同,留一法不會有這種情況,但數(shù)據(jù)集過大會導致算法復雜度增加。為了可以綜合上述算法的兩種優(yōu)點,這里提出自助法。

自助法的特點是,訓練集和測試集均出自同一數(shù)據(jù)集。我們每次從數(shù)據(jù)集中抽取一個樣本并復制到訓練集中,重復m次,所以我們有m訓練集的樣本。當然這種做法會出現(xiàn)重復樣本,不過我們計算一個樣本永遠不會被采集到的概率如下:

? ? ? ? ? ? ? ? \mathop {lim}\limits_{m \to \infty } {(1 - \frac{1}{m})^m} \mapsto \frac{1}{e} \approx 0.368

所以當樣本足夠多的時,我們同樣可以抽出約2/3的部分當做訓練集,剩下的作為測試集。這種算法使得每個樣本都有被抽中的可能,這種測試又稱為“包外估計”。自助法產(chǎn)生的數(shù)據(jù)集會改變初始數(shù)據(jù)集的分布,所以需要引入估計偏差,所以再次強調,在數(shù)據(jù)足夠多的時,為了避免計算麻煩,建議使用前兩者,反之使用該算法。

? ? ? ? 除了以上評估方法,每個算法還需要調節(jié)參數(shù),因為參數(shù)的不同訓練結果會有顯著差異,所以調參也很重要,它影響著最終的評估結果。事實上,調參也是一種算法選擇,在現(xiàn)實中我們常采用“嘗試”的方法得到一個相對較優(yōu)的參數(shù)結果。首先設置該參數(shù)的范圍,進而設置步長,讓計算機遍歷每種情況并選擇最好的結果。一般步長選擇要慎重,因為大型的工程參數(shù)眾多,步長越短代表算法復雜度越高,消耗的計算資源越多。

? ? ? ? 當我們評估完畢并選取算法后,應當用數(shù)據(jù)集中所有的數(shù)據(jù)進行訓練,并交付最終的訓練模型。此外為了區(qū)分,又稱模型評估選擇的數(shù)據(jù)集為驗證集。例如在估計某訓練模型的泛化能力時,會將數(shù)據(jù)集劃分為訓練集和驗證集,其中驗證集的結果主要用于調參。

2.3 性能度量方法

? ? ? ? 性能度量主要用于對機器學習模型性能的量化評估。不同的模型,使用不同的度量方法結果會不同。所以說評判結果是相對的,模型好壞取決于算法、數(shù)據(jù)和任務需求。最常用的性能度量方法是均方根誤差,并結合概率密度定義表征,這里不多介紹,下面將介紹分類任務中常用的性能度量的方法。建立模型前,做如下符號說明:

樣例集:D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}

其中y_ix_i的正確標記。設學習器為f,則f(x)為預測結果。

2.3.1 錯誤率、精度

錯誤率定義:E(f;D) = \frac{1}{m}\sum\limits_{i = 1}^m {\parallel (f({x_i}) \ne {y_i})}

精度定義:acc(f;D) = \frac{1}{m}\sum\limits_{i = 1}^m {\parallel (f({x_i}) = {y_i}) = 1 - E(f;D)}

其中\parallel()是二值符號,括號內邏輯正確為1,錯誤為0。

這是分類任務常用的兩個方法,適應二分類任務和多分類任務。我們可以根據(jù)概率密度定義,利用數(shù)據(jù)分布D和概率分布P對其做更一般的定義:

錯誤率概率分布定義:E(f;D) = \int_{x \sim D} {\parallel (f({x_i}) \ne {y_i})p(x)dx}

精度概率分布定義:acc(f;D) = \int_{x \sim D} {\parallel (f({x_i}) = {y_i})p(x)dx}  = 1 - E(f;D)

2.3.2 查準率、查全率與F1

? ? ? ? 2.3.1中的方法雖然常用,但我們有時候會關心訓練集或數(shù)據(jù)集中具體訓練數(shù)據(jù)如何(好西瓜中我具體分正確多少等),此時該方法不滿足需求。所以這里又提出三種方法,以對模型進行更精確的度量。這里以二分類為分析對象,則我們可以把預測結果分為四種:真正例、假正例、真反例、假反例,分別用字母TP、FP、TN、FN,T表示true、F為false,P為positive,N為negative。則定義混淆矩陣如下圖:

圖3:分類結果混淆矩陣


根據(jù)以上符號假設,定義查準率P和查全率R如下:

? ? ? ??P{\text{ = }}\frac{TP}{{TP + FP}},R = \frac{{TP}}{{TP + FN}}

? ? ? ? 查準率與查全率是矛盾的,可以理解:算法查詢正確的“范圍”(比如西瓜的種類數(shù))擴大了,正確率肯定會下降,反之亦然。所以我們應當在兩者之間取得一平衡點,使得機器學習模型評估效果最佳,而我們可以通過“P-R曲線”找到平衡點。曲線橫坐標為查全率,縱坐標為查準率,在對機器學習結果樣例進行排序后,計算器查準率與查全率,一般性的可以得到類似下圖:

圖4:P-R曲線與尋找平衡點示意圖

? ? ? ? 根據(jù)圖4,我們知道曲線與直線y=x相交的點即為平衡點(BEP),這里有多個平衡點。我們一般認為曲線下方面積越大則性能越好,所以選最外層的一個。不過看到最外層與內一層的曲線有交叉點,這使得我們無法肉眼判斷優(yōu)良。此時我們可以計算平衡點的函數(shù)值,越大的代表性能越好。不過書中給出了更精確的量化比較方法,即F1度量法,公式如下:

? ? ? ??F1{\text{ = }}\frac{{2 \cdot P \cdot R}}{{P + R}} = \frac{{2 \cdot TP}}{{樣例總數(shù) + TP - TN}}

在現(xiàn)實中,我們有可能對查準率和查全率有不同重視程度,所以此時引出F1度量的一般形式,定義字母和公式如下:

? ? ? ??{F_\beta } = \frac{{(1 + {\beta ^2}) \cdot P \cdot R}}{{{\beta ^2} \cdot P + R}}

其中\beta>0,當\beta=1時退化為F1度量,當\beta>1時對查全率的權重更高,當\beta<1時對查準率的權重較高。

? ? ? ? 現(xiàn)在我們討論更一般的情況,之前的度量是針對一組混淆矩陣,現(xiàn)在我們將數(shù)量上升到n個。解決方案很簡單,第一種方案是:可以通過計算查準率與查全率的平均值,求得宏查準率宏查全率,帶入F1公式后可求得宏F1度量。第二種方案是:先求得真正例等四類數(shù)據(jù)的平均值,再將其們帶入求得幾個宏數(shù)值。

2.3.3 ROC與AUC

? ? ? ? 機器學習一般的二分類方法是:根據(jù)模型求得一個0~1的數(shù),假設閾值為0.5,則大于0.5為一類,小于為另一類。根據(jù)模型分類結果,我們以“最有可能”到“最不可能”方式排序,定義一截斷點,將樣本分為正例和反例。截斷點由認為規(guī)定,若給查準率更高的權重,則將截斷點前移,若給查全率更高權重,則后移。ROC就是利用據(jù)排序結果的好壞計算學習器泛化性能。

? ? ? ? ROC全稱為受試者工作特征(Receiver Operating Charactoristic),方法與P-R曲線類似,也是畫一條曲線稱“ROC圖”,以真正例率(TPR)和為縱坐標,以正例率(FPR)為橫坐標劃出。兩個新的維度定義如下:

? ? ? ??FPR = \frac{FP}{{TN + FP}},TPR = \frac{{TP}}{{TP + FN}}

這里給出一個樣例圖如下圖。我們希望畫出來的是a圖,但由于數(shù)據(jù)時離散且有限的,我們只能畫出b圖。

圖5:ROC曲線與AUC的示意圖

繪制過程如下:

給定m^+個正例和m^-個反例,根據(jù)模型預測結果排序。

將分類閾值設置為最大,設所有的結果為反例,沒有正例。當前點的坐標則為(0, 0)。

每次將序列中的一個提出并劃分到正例,設前一點坐標為(x, y)。當該點為真正例,則該點坐標記為(x,y+1/m^+),若為反正例,則記為(x+1/m^+,y)。

重復③,直至所有點都被劃分為正例,即最后一點坐標為(1, 1)。

? ? ? ? 從圖判斷好壞的標準和P-R圖極其類似,其判斷依據(jù)就是ROC曲線下面積(Area Under ROC Curve,AUC)。其越大表示性能越好。因為點都是離散的,所以我們利用求和的方式求得面積,公式如下:

? ? ? ??AUC = \frac{1}{2}\sum\limits_{i = 1}^{m - 1} {({x_{i + 1}} - {x_i})({y_i} + {y_{i + 1}})}

設D表示數(shù)據(jù)集,+表示正例的,-表示反例的,則定義排序損失(loss)如下:

{l_{rank}} = \frac{1}{{{m^ + }{m^ - }}}\sum\limits_{{x^ + } \in {D^ + }} {\sum\limits_{{x^ - } \in {D^ - }} {\left( {\parallel (f({x^ + }) < f({x^ - })) + \frac{1}{2}\parallel (f({x^ + }) = f({x^ - }))} \right)} }

它與AUC關系為:AUC=1-l_{rank}

2.3.4 代價敏感錯誤與代價曲線

? ? ? ? 我們之前幾小節(jié)衡量量化時,將正確的和錯誤的整體內部看做平等的,即他們內部權重相等,但在現(xiàn)實中并不然。一次西瓜識別錯誤導致農民損失100元與金庫錯把小偷放入損失幾個億對比,可以看到錯誤是有區(qū)別的,因為造成后果的代價(cost)不同。為了衡量不同的錯誤,我們可以給錯誤賦值不同的代價,稱“非均等代價”。

? ? ? ? 拿二分類舉例,根據(jù)代價思想,可以設計代價矩陣,如下圖:

圖6:二分類代價矩陣樣例

其中cost代表代價,角標表示矩陣行與列的位置,一般矩陣主對角線為0(自己對自己完全相同,不會付出代價)。在考慮非均等代價前提下,我們的目標是使得整體的錯誤代價最小化。若將圖6中0類作為正例,1為反例,則可定義敏感代價錯誤率公式如下:

E(f;D;cost) = \frac{1}{m}\left( {\sum\limits_{{x_i}^ +  \in {D^ + }} {\parallel (f({x_i}) \ne {y_i})cos{t_{01}} + \sum\limits_{{x_i}^ -  \in {D^ - }} {\parallel (f({x_i}) \ne {y_i})cos{t_{10}}} } } \right)

我們可以看到公式的變化,在原來判斷的基礎上,針對不同的情況給出不同的cost權重,這樣代價會影響到最終的代價大小。

在非均等代價下,ROC曲線也要改變,以反映真正的總體期望代價,所以這里提出代價曲線。其橫軸為[0, 1]的正例率代價,縱軸是在[0, 1]的歸一化代價。它們的公式分別表示如下:

? ? ? ??\eqalign{  & P{( + )_{cost}} = \frac{{p \cdot cos{t_{01}}}}{{p \cdot cos{t_{01}} + (1 - p) \cdot cos{t_{10}}}}  \cr   & cos{t_{norm}} = \frac{{FNR \cdot p \cdot cos{t_{01}} + FPR \cdot (1 - p) \cdot cos{t_{10}}}}{{p \cdot cos{t_{01}} + (1 - p) \cdot cos{t_{10}}}} \cr}

其中p表示樣例為正例率的概率。我們來理解一下這兩個式子。首先根據(jù)圖6,只會出現(xiàn)假反例假正例兩種可能會付出錯誤代價,那么分母就表示代價的總量。其次,在正例中,我們會有p的概率出現(xiàn)假正例的可能,而有p-1的概率在反例中出現(xiàn)假反例可能,所以根據(jù)正例率代價的意思,第一個公式分子就代表假反例的總量。最后理解一下歸一化總代價,分子中在定義同正例率代價一樣的代價總量外,還加上了不同錯誤概率的區(qū)分,所以該式分子包含錯誤細分種類、錯誤細分代價兩個細節(jié)。這兩個也即總代價的兩個特點。根據(jù)公式,參考ROC中曲線的作圖方法,可得到下圖:

圖7:代價曲線與期望總體代價

? ? ? ? 高中時應該做過線性規(guī)劃吧,當時畫圖利用曲線方程不等式表示陰影部分以限制二維區(qū)域的范圍,代價曲線也是如此。ROC曲線的沒一點對應代價平面一條直線,因為這些直線是當前代價下的最大值(最糟糕情況),所以每個直線的下方即為總體代價,也即所有直線下方面積的并集即為期望總體代價,通過計算比較面積大小,來間接比較模型性能的好壞。

2.4 比較檢驗

? ? ? ? 有了之前的評估方法和性能度量方法,我們就可以開始對模型的比較了,一般的順序是:首先使用評估方法,選擇合適的學習器,利用性能度量方法對不同學習結果測試,然后就進行比較了。比較不是簡單的比較大小,主要有以下幾個原因: 如何更精確的比較“泛化”性能,而不是單單“測試集”上的性能。? 測試集是隨機的,不同測試集結果不同。? 機器學習算法具有隨機性,相同的模型參數(shù)得到的結果也會不同。那么應該如何比較?這節(jié)著重講這個,我們主要采用概率論中的假設檢驗法。本節(jié)將介紹兩個常用假設檢驗方法和結果常用機器學習性能比較方法。其中設公式符號\varepsilon 表示錯誤率,表示性能度量結果。

2.4.1 比較檢驗

統(tǒng)計中只能計算測試的錯誤率,該方法思路是通過測試錯誤率\hat \varepsilon 間接的表示泛化錯誤率\varepsilon。假設是獨立采樣,若測試中有m個樣本,則整體測試錯誤概率可由二項分布表示如下:

? ? ? ??P(\hat \varepsilon ,\varepsilon ) = C_{\hat \varepsilon  \times m}^m{\varepsilon ^{\hat \varepsilon  \times m}}{(1 - \varepsilon )^{m - \hat \varepsilon  \times m}}

給定\hat \varepsilon ,則可解P(\hat \varepsilon ,\varepsilon )\varepsilon的一階偏導方程可知,P(\hat \varepsilon ,\varepsilon )\varepsilon=\hat \varepsilon時最大,當\varepsilon=0.3時,對10個樣本求解到下圖:

圖8:P(10,0.3)二項分布示意圖

通過二項檢驗,假設“\varepsilon  \leqslant {\varepsilon _0}”,在1-\alpha的概率內,計算其置信區(qū)間

? ? ? ??\hat \varepsilon  = \max\space\varepsilon\space\space\space\space s.t.\sum\limits_{i = {\varepsilon _0} \times m + 1}^m {C_i^m{\varepsilon ^i}{{(1 - \varepsilon )}^{m - i}} < \alpha }

以上假設檢驗是針對一個模型的一個結果,但有時我們會產(chǎn)生多個結果,比如采用多次留出法或交叉驗證法,此時可采用t檢驗。設已測試k個錯誤率,設其均值為\mu ,方差為\sigma ,定義如下:

? ? ? ??\mu  = \frac{1}{k}\sum\limits_{i = 1}^k {{{\hat \varepsilon }_i}} , \space\space\space{\sigma ^2} = \frac{1}{{k - 1}}\sum\limits_{i = 1}^k {{{({{\hat \varepsilon }_i} - \mu )}^2}}

k個測試錯誤率可看做泛化錯誤率\varepsilon_0的獨立采樣,T變量:{\tau _t} = \frac{{\sqrt k (\mu  - {\varepsilon _0})}}{\sigma }

服從自由度為k-1的t分布,如下圖所示:

圖9:k=10的t分布示意圖

使用雙邊假設,圖中陰影部分在[ - \infty ,{t_{ - \alpha /2}}][{t_{\alpha /2}}, + \infty ]兩個區(qū)間,若\left| {\mu  - {\varepsilon _0}} \right|[{t_{ - \alpha /2}},{t_{\alpha /2}}]內,則接受假設,否則拒絕假設。

2.4.2 交叉驗證t檢驗

? ? ? ? 設有學習器A和B,均使用k折交叉驗證法,得到的錯誤率為\varepsilon_i^A\varepsilon_i^B,i取值為1到k,其一對采用的是相同的折數(shù)位置訓練的。則可以使用“成對t檢驗”,這里認為若兩個學習器相同,相同折數(shù)的錯誤率也相同。算法的具體做法如下:

\Delta i = \varepsilon _i^A - \varepsilon _i^B, 計算均值和方差。

求變量{\tau _t} = \left| {\frac{{\sqrt k \mu }}{\sigma }} \right|,若小于t(\alpha/2,k-1),則接受假設,否則拒絕假設,且錯誤率小的模型較優(yōu)。

? ? ? ? 之前我們提到,計算泛化誤差的一個假設前提是測試錯誤率是泛化錯誤率的獨立采樣,但k折交叉驗證顯然在多次測試時數(shù)據(jù)選用重疊,使得最終的計算結果比正常值偏高。為解決問題,可采用5 \times 2交叉驗證。以下是該方法的實現(xiàn)過程:

做2折交叉檢驗,做5次。

每次2折交叉檢驗前將數(shù)據(jù)隨機打亂,使得五次檢驗數(shù)據(jù)分布不同。

設第n折得到的插值為\Delta_i^n,每做兩次2折交叉檢驗求一次均值\mu=0.5(\Delta_i^k+\Delta_i^{k+1})和方差\sigma _i^2 = {(\Delta _i^k + \frac{{\Delta _i^k + \Delta _i^{k + 1}}}{2})^2} + {(\Delta _i^{k + 1} + \frac{{\Delta _i^k + \Delta _i^{k + 1}}}{2})^2}

利用三步求得的已知,可求變量T:{\tau _t} = \frac{\mu }{{\sqrt {0.2\sum\limits_{i = 1}^n {\sigma _i^2} } }},其服從自由度為n的t分布,可以通過查表得到結果。

2.4.3 McNemar檢驗

? ? ? ? 該檢驗方法最適合二分類問題,使用留出法可估計學習器AB的測試錯誤率,還可以得到學習器分類結果差別,可以通過列聯(lián)表展示,示例如下圖:

圖10:學習器AB的分類差別列聯(lián)表

? ? ? ? 若兩學習器性能形同,則e_{01}=e_{10},均值為1,方差為e_{01}+e_{10},所以變量T:

? ? ? ??{\tau _{{\chi ^2}}} = \frac{{{{(\left| {{e_{01}} - {e_{10}}} \right| - 1)}^2}}}{{{e_{01}} + {e_{10}}}}

服從自由度為1的卡方分布,設顯著度為\alpha,則當變量結果小于臨界值\chi_\alpha^2,接受假設,否則拒絕假設。

2.4.5 Friedman檢驗與Memenyi后續(xù)檢驗

? ? ? ? 前面的幾種檢驗方法主要同于比較兩個學習器對于同一數(shù)據(jù)集的學習性能,雖然比較更多算法時可以兩兩比較,但不如Friedman檢驗直接,它是基于算法排序的,可以直接進行多算法比較。現(xiàn)在假設有四個數(shù)據(jù)集D_i和三個算法ABC,則它的算法過程如下:

使用留出法或交叉檢驗法得到每個算法在每個數(shù)據(jù)集的測試結果,并填入算法比較序值表中。

在每個數(shù)據(jù)集中對每個算法的性能好壞排序,賦值1,2,3等,如果兩算法性能相同,則取平均值。表格示例如下圖:

圖11:比較序值表

從表中判算法性能是否相同,若相同則平均序值相同,否則取平均,示例可見圖11。

設存在N個數(shù)據(jù)集,比較k個算法,設r_i表示第i個算法的平均序值,設其服從正態(tài)分布,均值為(k+1)/2,方差為(k^2-1)/12,則變量T:

{\tau _{{\chi ^2}}} = \frac{{k - 1}}{k} \cdot \frac{{12N}}{{{k^2} - 1}}\sum\limits_{i = 1}^k {{{({r_i} - \frac{{k + 1}}{2})}^2} = } \frac{{12N}}{{k(k + 1)}}\left( {\sum\limits_{i = 1}^k {({r_i} - \frac{{k{{(k + 1)}^2}}}{4})} } \right)

在k和N較大時,變量服從自由度為k-1的卡方分布。上式有些保守,改進的公式將分布變?yōu)镕分布,使得結果更精確,改變后如下:

? ? ? ??{\tau _F} = \frac{{(N - 1){\tau _{{\chi ^2}}}}}{{N(k - 1){\tau _{{\chi ^2}}}}}

該變量服從自由度為k-1和(k-1)(N-1)的F分布,下圖給出常用臨界值:

圖13:F分布數(shù)值查找表

? ? ? ? 若通過上述檢驗比較發(fā)現(xiàn)“所有算法性能相同”的假設被拒絕,則說明算法性能顯著不同,此時要使用Memenyi后續(xù)檢驗做進一步分析。其通過下面公式計算平均序值差別的臨界值域。

? ? ? ??CD = {q_\alpha }\sqrt {\frac{{k(k + 1)}}{{6N}}}

下圖給出幾個q_\alpha的常用取值:

圖14:常用取值表

? ? ? ? 上述兩個檢驗方法結合算出結果后,可在Friedman檢驗圖中直觀的展示。上述算法ABC的例子得到的結果展示圖如下:

圖15:Friedman檢驗圖示例

圖中橫軸是平均序值,用圓點表示,橫線是表示臨界值域。若算法間橫線有交疊,則兩算法無先出差別,否則說明有顯著差別。圖15中A與B有交疊,所以沒有顯著差別,A與C沒有交疊,且A序值更高,說明算法A優(yōu)于算法C。(這里其實有個疑問,圖中算法B與算法C交疊,說明B與C無顯著差別,那么根據(jù)傳遞關系,是不是三者都沒有顯著差別呢?)<1>

2.5 偏差與方差

? ? ? ? 除了評估泛化性能外,我們往往還需要知道模型為什么會呈現(xiàn)這樣的性能,這是我們就需要使用“偏差-方差分解”(bias-variance decomposition)方法進行解釋。它的基本思想是,將學習算法評估得到的期望泛化錯誤率進行分解。本節(jié)主要講解其實現(xiàn)。

2.5.1 符號說明

? ? ? ? 對測試樣本x,令y_Dx在數(shù)據(jù)集中的真實標記,f(x;D)表示訓練集D上學習模型fx的預測輸出。這里推導以回歸任務為例。

2.5.2 模型建立與推導

定義期望預期:\bar f(x) = {{\text{E}}_D}\left[ {f(x;D)} \right]

定義方差:\operatorname{var} (x) = {{\text{E}}_D}\left[ {{{(f(x;D) - f(x))}^2}} \right]

定義噪聲:{\varepsilon ^2} = {{\text{E}}_D}\left[ {{{({y_D} - y)}^2}} \right]

則期望輸出與真實標記的差別稱為偏差,定義為:bia{s^2} = {(\bar f(x) - y)^2}

為便于推導,設bias^2=0,推導過程書上寫的很詳細,也比較重要,截圖如下:

圖16:推導過程

所以帶入之前定義變量有:E(f;D) = bia{s^2}(x) - \operatorname{var} (x) + {\varepsilon ^2}

也即泛化誤差可分解為偏差、方差和噪聲之和。

2.5.3 理解

? ? ? ? 公式中,偏差表示預期與真實結果的誤差,也即機器學習算法的擬合能力;方差度量同樣的訓練集變動,其學習性能的變化,也即數(shù)據(jù)擾動造成的影響;噪聲表示泛化誤差的下界,也即學習問題本身的難度。推導結果說明,泛化誤差是由這三者組成的。

? ? ? ? 一般情況,偏差與誤差是矛盾的,如下圖所示,(下方的黑線表示偏差,上方黑線表示泛化誤差)這代表我們無法保證每個指標都達到自身的最佳。當訓練程度小時,由于欠擬合,數(shù)據(jù)預測的偏差較大,此時影響泛化誤差變大主要因素是偏差。當訓練程度逐漸變大時,模型越來越完善,偏差會變小,方差會變大。當訓練程度過大時,模型過擬合,雖然偏差非常小,但方差非常大,此時影響泛化誤差變大的主要因素是方差。根據(jù)理論,我們應當給出的訓練程度恰好使得泛化誤差最小。


圖17:泛化誤差、偏差與方差的關系

2.6 總結

? ? ? ? 本章學習如何評估與選擇模型,首先我們知道學習模型學習程度不同,會導致欠擬合與過擬合。然后我們學習了模型選擇方法:留出法、k折交叉驗證法、自助法。選擇好模型后就要進行性能度量,本文采取計算誤差來表征,提到了錯誤率、精度、查準率、查全率、F1、ROC、AUC、代價敏感錯誤、代價曲線這幾種方法。計算完性能,我們要對幾個模型進行比較,本文講了Friedman檢驗、Memenyi后續(xù)檢驗、?McNemar檢驗、?交叉驗證t檢驗、?比較檢驗這幾種方法。最后我們講了利用偏差與方差,理解該模型產(chǎn)生性能結果的原因。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容