機器學習(西瓜書)學習筆記(一)---------模型評估與選擇

1、經驗誤差與過擬合

經驗誤差:一般的,我們把學習器的實際預測輸出與樣本的真實輸出之間的差異稱爲“誤差”,學習器在訓練集上的誤差稱爲“訓練誤差”或“經驗誤差”,在新樣本上的誤差稱爲“泛化誤差”;

        通常我們想要的一個學習器是能夠通過訓練樣本的學習後能較準確的去預測或分類新的未知的數據,但實際上往往不會如想象中那麼順利,學習器在學習的時候通常會出現兩中情況,一是學習得太好,將訓練數據的細微特徵都學習到進而導致對一般數據預測時出現偏差,這種情況稱爲“過擬合”;二是學習的不好,沒有掌握數據的一般規律,導致預測不準,這種情況稱爲“欠擬合”;

                                                             

2、評估方法

      將一個數據集D進行拆分,分出訓練集S和測試集T,學習器通過對訓練集S的學習後掌握規律,再對T中的數據進行預測,將預測的結果與T 進行比較可以判斷預測的正確性,從而評估學習器的好壞。

2.1  留出法

       留出法直接將數據集D劃分爲互斥的訓練集S和測試集T,爲了避免因數據劃分而引入額外的偏差,在劃分過程中應儘量保持數據分佈的一致性,比如數據中的正例、反例在S和T中應比例一致;另外,即使確定了“分層採樣”時的樣本比例,還是有很多方式對D進行分割,比如是隨機取還是排序後再取;因此,使用留出法時,一般要採用若干次隨機劃分、重複進行實驗評估後取平均值作爲評估結果。

        缺點:我們的目的是評估模型的好壞,留出法需要對D進行分割,但是這個比例往往不好確定,若訓練集S較大,則訓練結果更趨向於數據集D,但由於T比較小,評估結果就不夠穩定準確;若S比較小,則訓練結果不能很好的表示D的規律,評估結果就可能會失去真實性;這個沒有完美的解決方案,但經驗做法是將2/3~4/5的數據作爲訓練樣本。

2.2   交叉驗證法(k折交叉驗證)

        將數據集D劃分爲k個大小相似的互斥子集(劃分方式與留出法相似),然後用k-1個子集的並集作爲訓練集,餘下的那個子集作爲測試集,這樣就可以得到K組訓練結果,最終返回其平均值。該評估方法結果的穩定性和保真性很大程度上取決於k的取值;當k等於1時,基本上就成了留出法,而當k等於m時(m爲數據集D的樣本個數),爲留一法;

        缺點:k的取值比較重要,原理還是由於k的取值不同導致訓練集S與測試集T的大小不同造成的。

                                                   

2.3    自助法

         主要解決的是留出法、交叉驗證法等方法由於是對數據集D進行劃分導致訓練樣本S總是比數據集D小進而導致因數據樣本規模不同產生估計誤差。

        “自助法”直接以自助採樣法爲基礎,對包含m個樣本的數據集D進行隨機採樣m次,得到數據集D',那麼數據集D'也包含有m個樣本,但是有可能數據集D中某些樣本不會被採樣到,而某些樣本會被多次採集,簡單估計一下,m次採樣中某個樣本始終不被採集到的概率爲(1-1/m)^m,取極限爲\sum_{m\rightarrow \infty }\left (1 - \frac{1}{m} \right )^{m } = \frac{1}{e} \approx 0.368,這說明數據集D中約有1/3的樣本沒有出現在訓練集D'中,因此可以用D'作爲訓練集,D\D'作爲測試集,這樣就消除了訓練樣本比原始樣本小而引起的誤差。

       優點:自助法在數據集小、難以有效劃分訓練/測試集時很有用,同時,它也可以產生多個不同的訓練集;

       缺點:採樣產生的數據集改變了原始數據集的分佈,會引入估計偏差,在數據量足夠時,留出法交叉驗證法更常用一些。

2.4   調參與最終模型

        大多數學習算法都有一些參數需要設定,有時候參數設置的不合理會導致模型的誤差變大,因此在參數的選擇上往往會有一個調整到最佳參數的過程。

        注意:機器學習中涉及兩類參數:一類是算法的參數,數目常在10以內;另一類是模型的參數,數目可能會有很多;兩者的調參方式相近,均是產生多個模型之後基於某種評估方法進行選擇,不同之處在於前者是通過人工設定,後者是自身學習。

        對每種參數訓練一個模型出來,然後把最好模型的參數作爲結果來達到調參的目的,這種做法能找到最優參數,但是往往不可行,實際過程中訓練開銷太大;現實中常用的做法是對每一個參數選定一個範圍和變化步長,在這裏面找到最合適的參數;當然,這樣做不一定能找到最優的參數,但是權衡下來這樣確實是最合適的。

3、性能度量

          在預測任務中,給定樣例集D = {(x1,y1),(x2,y2),....,({x_{m}}^{},y_{m})},其中y_{i}是示例x_{i}的真實對應值,要評估學習器 f 的性能,就要把學習器的預測結果 f(x) 與真實值 y 進行比較。

         對於迴歸任務:最常見的度量性能是“均方誤差”   E(f;D) = \frac{1}{m}\sum_{i=1}^{m}(f(x_{i}) - y_{i})^{2}。 更一般地,對於數據分佈D和概率密度函數p(.),均方誤差可以描述爲E(f;D) = \int_{x\sim D}^{ } (f(x) - y)^{2} p(x) dx .

          對於分類任務  主要有以下幾種度量方法:

3.1   錯誤率與精度

           對樣例集D,分類錯誤率定義爲:

                                                      E(f;D) = \frac{1}{m}\sum_{i=1}^{m} \mathbb{I}( f(x_{i}) \neq y_{i}) .

          精度則定義爲:

                                                     acc(f;D)= \frac{1}{m}\sum_{i=1}^{m} \mathbb{I}( f(x_{i}) = y_{i}) = 1 - E(f;D).

            其中,\mathbb{I}(bool)函數裏面爲布爾值,爲真時該函數的結果爲1,爲假時該函數的結果爲0.

            更一般地,對於數據分佈D(注意這裏的D與上面的樣例集D不是一樣的,只是沒法打印出差別,注意不要弄混)和概率密度函數p(.),錯誤率與精度可分別描述爲:

                                                     E(f;D) = \int_{x\sim D}^{ } \mathbb{I}(f(x) \neq y) p(x) dx .

                                                     acc(f;D)= \int_{x\sim D}^{ } \mathbb{I}(f(x) = y) p(x) dx = 1- E(f;D) .

              只能衡量有多少比例的樣本數據被判別錯了,不能知道其他的一些具體信息。

3.2    查準率、查全率與F_{1}

            查準率與查全率主要用於度量樣本數據中我們關心的特性值的預測或分類結果的準確性與覆蓋程度;

           比如對於二分類問題,分類結果的“混淆矩陣”如下所示:

                                                        

              那麼,查準率P與查全率R 可以分別定義爲:

                                        P = \frac{TP}{TP + FP}                                         R = \frac{TP}{TP + FN}

             P 與 R 是一對矛盾的度量,一般來說,P 較高時,R 往往偏低,使用P、R作圖得到P-R圖:

                                                      

        對該圖來說,曲線所包含的面積越大,那麼它的性能就越優,所以對於學習器B來說,它的性能比C要好;但當曲線有交叉,面積不好比較時,我們採用“平衡點”(BEP)的方法來比較;平衡點上查準率P 與查全率R 相等,對於上圖,學習器A的BEP較大,從而說明學習器A較好。

         但對於現實情況來說,P-R曲線不會這麼單調平滑,在局部上會有很多的波動,所以用“平衡點”法來度量還是有點理想化,更常用的是F_{1}度量:

                                       F_{1} = \frac{2 * P *R}{P + R } = \frac{2 * TP}{ m +TP -TN} .                 m是樣例總數。

         有時候,我們對查全率與查準率的重視程度不同,此時引入變量\beta來控制偏好,F1度量的一般形式就變爲:

                                             F_{\beta } = \frac{(1 + \beta ^{2}) * P *R}{(\beta ^{2} * P) + R } .

          其中\beta>0度量了查全率對查準率的相對重要性。\beta = 1時即標準的F1,\beta > 1時查全率有更大的影響,\beta < 1 時查準率有更大的影響。

         當我們希望在n個二分類混淆矩陣上綜合考察查準率和查全率時,可以先計算出各自的P、R,再求出平均的P、R即可,其他的操作方式類似。

3.3    ROC 與 AUC

        ROC曲線是研究“一般情況下”學習器泛化性能的工具,它通過將預測值與分類閾值進行比較,若大於閾值則爲正類,反之則爲反類。AUC指的就是ROC曲線下的面積,通過AUC的大小來判斷不同學習器的好壞。

       ROC曲線的縱軸是“真正例率”(TPR),橫軸是“假正例率”(FPR):

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

      示意圖如下:

                                               

        假設實際ROC曲線由m個座標點連接而成,那麼AUC可估算爲:

                                          AUC = \frac{1}{2}\sum_{i=1}^{m-1}(x_{i+1} - x_{i}) * (y_{i} + y_{i+1})

3.4   代價敏感錯誤率與代價曲線

         爲了衡量因爲不同類型的錯誤造成的不同後果,權衡其導致的損失,可爲錯誤賦予“非均等代價”。

         以二分類爲例,其代價矩陣如下所示:

                                                      

          若將第0類判別爲第1類所造成的損失更大,那麼就有cost_{01} > cost_{10},不過一般比較損失代價的比值而不是單均絕對值的大小更有意義。

         若將上表中第0類作爲正類,第1類作爲反類,令D^{+}D^{-}分別代表樣例集D的正例子集和反例子集,則“代價敏感”錯誤率爲:

                            E(f;D;cost) = \frac{1}{m}(\sum_{x_{i}\in D^{+}}^{ } \mathbb{I}(f(x_{i}) \neq y_{i} ) \times cost_{01} + \sum_{x_{i}\in D^{-}}^{ } \mathbb{I}(f(x_{i}) \neq y_{i} ) \times cost_{10} ) .

          在非均等代價下,ROC曲線不能直接反映出學習器的期望總體代價,而“代價曲線”則可以;代價曲線圖的橫軸是取值爲[0, 1]的正例概率代價:

                                    P(+)cost = \frac{p \times cost_{01}}{p\times cost_{01} + (1-p)\times cost_{10}} .        其中p是樣例爲正的概率。

         縱軸是取值爲[0, 1]的歸一化代價:

                                     cost_{norm} = \frac{FNR\times p \times cost_{01} + FPR\times (1-p)\times cost_{10}}{p\times cost_{01} + (1-p)\times cost_{10}} .  其中FPR是假正例率,FNR=1-FPR

         代價曲線的繪製:設ROC曲線上點的座標爲(FPR, TPR),可以計算出FNR,由此可以將ROC曲線上的每一個點在代價平面上繪製一條從(0,FPR)到(1,FNR)的直線,取所有直線的下界組成代價曲線,所圍成的面積即在所有條件下學習器的期望總體代價。           

                                                            

4、比較檢驗

         通過統計假設性檢驗我們可以推斷出,若在測試集上觀察到學習器A比B好,則A的泛化性能是否在統計意義上優於B,以及這個結論有多大的把握。爲便於討論,後面的測試均以錯誤率爲性能度量,用\epsilon表示。

4.1    假設檢驗

          由於這一節比較難懂,沒怎麼看明白,所以暫時略過,後面再回來研究。

4.2    交叉驗證t檢驗

 

4.3    McNemar檢驗

 

4.4   Friedman檢驗與 Nemenyi檢驗

5、偏差與方差

           “偏差--方差分解” 是解釋學習算法泛化性能的一種重要工具,下面就通過它來了解學習算法“爲什麼”有這樣的性能。

           對測試樣本x,令yD爲x在數據集中的標記,y爲x的真實標記(有可能出現噪聲是得yD 不等於y),f(x;D)爲訓練集D上學得模型f在x上的預測輸出,以迴歸任務爲例:

學習算法的期望預測爲:

                                        \bar{f}(x) = E_{D}\left [ f(x;D) \right ] ,

使用樣本數相同的不同訓練集產生的方差爲:

                                       var(x) = E_{D} \left [ (f(x;D) - \bar{f}(x))^{2}\right ] ,

               它度量了同樣大小訓練集的變動所導致的學習性能的變化,即刻畫了數據擾動所造成的影響;

噪聲爲

                                       \xi ^{2} = E_{D} \left [ (y_{D} - y)^{2} \right ] .

            它表達了在當前任務上任何學習算法所能達到的期望泛化誤差的下界,即刻畫了學習問題本身的難度;

期望輸出與真實標記的差別稱爲偏差:

                                       bias^{2}(x) = (\bar{f}(x) - y)^{2} .   

             它度量了學習算法的期望預測與真實結果的偏離程度,即刻畫了學習算法本身的擬合能力;

假定噪聲期望爲0,即E_{D}\left [ y_{D} - y\right ] = 0,對算法的期望泛化誤差進行分解:(具體的推導過程此處略過)

                                       E(f;D) = E_{D}\left [ (f(x;D) - y_{D}) ^{2}\right ] = bias^{2}(x) + var(x) +\xi ^{2}

這說明泛化誤差是偏差、方差與噪聲之和,由此可見,要想泛化誤差越小,那偏差與方差應儘可能小,至於噪聲是由任務難度決定,暫不討論。

         但實際情況中,偏差與方差是有衝突的,即所謂的偏差-方差窘境,如下圖:   

                                                      

        當訓練不足時,學習器的擬合能力不強,數據的擾動(方差)不足以顯著影響學習器,但偏差的影響卻較大,因此泛化誤差主要由偏差決定;而當訓練充足後,學習器的擬合能力非常強,甚至過擬合,此時一點點的數據擾動都會造成較大的變化,而數據的偏差卻影響不大,此時方差佔據主導地位,學習器的泛化誤差主要由他決定。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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