1. 程式人生 > >機器學習(西瓜書)學習筆記(一)---------模型評估與選擇

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

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    假設檢驗

          未完待續。。。