當前位置: 華文問答 > 科學

常用的機器學習演算法比較?

2014-12-29科學

授人以魚不如授人以漁,這篇文章會介紹 如何透過「統計學檢驗」來對比機器學習演算法效能 。掌握了這個方法後,我們就不需要再人雲亦雲,而可以自己分析演算法效能。

首先結論如下,在對比 兩個演算法 多個數據集 上的表現時:

  • 如果樣本配對(paired)且符合正態分布,優先使用配對t檢測(paired t test)。
  • 如果樣本不符合正態分布,但符合配對,使用Wilcoxon Signed Ranks test。
  • 如果樣本既不符合正態分布,也不符合配對,甚至樣本量都不一樣大,可以嘗試Mann Whitney U test。值得註意的是,MW是用來處理獨立測量(independent measures)數據,要分情況討論,後文會深入分析。
  • 在對比 多個演算法 多個數據集 上的表現時:

  • 如果樣本符合ANOVA(repeated measure)的假設(如正態、等變異數),優先使用ANOVA。
  • 如果樣本不符合ANOVA的假設,使用Friedman test配合Nemenyi test做post-hoc。
  • 如果樣本量不一樣,或因為特定原因不能使用Friedman-Nemenyi,可以嘗試Kruskal Wallis配合Dunn's test。值得註意的是,這種方法是用來處理獨立測量數據,要分情況討論。
  • 文章結構如下:(1-2) 演算法對比的原因及陷阱 (3-4) 如何對比兩個演算法 (5-6)如何對比多個演算法 (7)如何根據數據特性選擇對比方法 (8)工具庫介紹。

    1. 為什麽需要對比演算法效能?

    統計學家George Box說過:「All models are wrong, but some are useful」(所有模型都是錯誤,只不過其中一部份是有價值的)。通俗來說, 任何演算法都有局限性,所以不存在「通用最優演算法」,只有在特定情境下某種演算法可能是漸進最優的

    因此,評估演算法效能並選擇最優演算法是非常重要的。不幸的是,統計學評估還沒有在機器學習領域普及,很多評估往往是在一個數據上的簡單分析,因此證明效果有限。

    2. 評估演算法中的陷阱

    首先我們常說的是要選擇一個 正確的評估標準 ,常見的有:準確率(accuracy)、召回率(recall)、精準率(precision)、ROC、Precision-Recall Curve、F1等。

    選擇評估標準取決於目的和數據集特性。在較為平衡的數據集上(各類數據近似相等的情況下),這些評估標準效能差別不大。而在數據嚴重傾斜的情況下,選擇不適合的評估標準,如準確率,就會導致看起來很好,但實際無意義的結果。舉個例子,假設某稀有血型的比例(2%),模型只需要預測全部樣本為「非稀有血型」,那麽準確率就高達98%,但毫無意義。在這種情況下,選擇ROC或者精準率可能就更加適當。這方面的知識比較容易理解,很多科普書都有介紹,我們就不贅述了。

    其次我們要正確理解 測量方法 ,常見的有

  • 獨立測量(independent measures):不同樣本的觀測物件是獨立的,不存在關聯
  • 重復測量(repeated measures):樣本中使用的觀測物件是相同的,僅僅是獨立變量在上面的作用結果不同
  • 以及成對測量(matched pair):不同樣本中采用不同的觀測物件,但盡量使得樣本間的觀測物件成對相似
  • 舉個例子,我們想要分析刷知乎時間(每天3小時 vs. 每天10小時)對於大學生成績的影響。如果我們使用相同的20個學生,觀察他們每天3小時和10小時的區別,那就是重復測量。如果我們選擇40個學生,分成兩組每組20人,再分別觀察那就是獨立測量。如果我們先找20個學生,再找20個和他們非常相似的大學生,並配對觀察,就是成對相似。

    我們發現,當錯誤的理解測量方式時,就無法使用正確的統計學手段進行分析

    在這篇文章中我們預設:評估不同演算法在多個 相同數據集 上的表現屬於 重復測量 ,而特例將會在第七部份討論。同時,本文介紹的方法 可以用於對比任何評估標準 ,如準確度、精準度等,本文中預設討論準確度。

    3. 兩種演算法間的比較:不恰當方法

    圖1. 兩種演算法在14個數據集上的準確率 [1]

    圖1展示了兩種決策樹方法(C4.5,C4.5+m)在14個數據集上的準確率。那麽該如何對比兩種演算法呢?先說幾種錯誤(不恰當)的方法:

    不恰當方法1:求每個演算法在所有數據集上的均值,並比較大小 。錯誤原因:我們對於演算法在不同數據集上錯誤的期望不是相同的,因此求平均沒有意義。換句話說,數據不符合相稱性(commensurate)。

    不恰當方法2 進行配對樣本t檢測(Paired t test) 。顯然,t test是統計學方法,可以用來檢視兩種方法在每個數據上的平均差值是否不等於0。但這個方法不合適原因有幾點:

  • 和平均一樣,不同數據集上的錯誤不符合相稱性
  • t-test要求樣本符合正態分布,顯然我們無法保證不同數據集上的準確率符合正態分布
  • t-test對樣本的大小有一定的要求,一般最低需要>30個樣本。在這個例子中我們只有14個,且大部份情況下我們沒有30個數據來做實驗。
  • 因為缺乏相稱性,統計結果易受到異常值影響(outliers)
  • 不恰當方法3:符號檢驗(sign test) 是一種無參數(non-parametric)的檢驗,優點是對於樣本分布沒有要求,不要求正態性。比較方法很簡單,就是在每個數據集上看哪個演算法更好,之後統計每個演算法占優的數據集總數。以這個例子為例,C4.5在2個數據集上最優,2個平手,10個最差。如果我們對這個結果計算置信區間,發現p<0.05需要至少在11個數據集上表現最優。因此這個方法的缺點有:

  • 符號檢驗是一種非常弱的檢驗方法,僅對比優劣損失了大量資訊,失去了定量資訊(quantitative),比如 0.1<0.9 和 0.1<0.11 的意義是一樣的。正因為如此,臨界值(critical value)一般都需要很大,比如這個例子中的 \alpha=0.05 的臨界值是11(圖2)。
  • 另一個問題是,因為缺乏定量資訊,很多時候很難確定「優勝」是否來自隨機性。舉個例子,0.99<0.991是否真的代表演算法A更好?一種看法是需要定義一個閾值,僅當差別大於閾值才能說明更好。然而這種看法的問題在於,假設演算法A在1000個數據集上都以「微弱優勢」勝過了B,那麽我們是否需要懷疑顯著性?因此, 根本問題還是,符號檢驗需要大樣本量才能得出顯著性
  • 圖2. 符號檢驗的臨界值表

    4. 兩種演算法間的比較:推薦方法

    考慮到通用性,我們需要使用非參數檢驗。換句話說,我們需要保證對樣本的分布不做任何假設,這樣更加通用。

    方法1:Wilcoxon Signed Ranks Test(WS ) 配對t檢驗的無參數版本 ,同樣是分析成對數據的差值是否等於0,只不過是透過排名(rank)而已。換個角度看,我們也可以理解為 符號檢驗的定量版本 。優點如下:

  • 無參數,不要求樣本符合正態分布
  • 符合數據相稱性,雖然是定性的(與配對t檢驗相比)
  • 有一定的定量特性,即較大的差別對於最終結果影響更大(與符號檢驗相比)
  • 圖3. 兩種演算法在14個數據集上的準確率與排序[1]

    方法2(詳見第七部份):Mann Whitney U test (MW)和WS一樣,都是無參數的且研究排名的檢驗方法。MW有以下特性:

  • 可以用來檢測不同的大小的樣本,舉例A演算法在8個數據集上的表現 vs B演算法在10個數據集上的表現。
  • 不存在配對性要求,參看上一點
  • 對比的是兩個樣本的分布,因此不同數據集的錯誤應該符合特定分布,可能不滿足相稱性
  • 對於測量方法的假設是: 獨立測量 ,這與我們的實際情況不符
  • 換句話說,MW是當樣本量不同時才建議勉強一試,因為不符合獨立測量的假設。不同數據集的錯誤(準確率)不一定符合特定分布,很可能不符合相稱性,但在特定情況下有用,詳見第七部份。

    總結:如果樣本配對且符合正態分布,優先使用配對t檢測。如果樣本不符合正態分布,但符合配對,使用WS。如果樣本既不符合正態分布,也不符合配對,可以嘗試MW。

    5. 多種演算法間的比較:不恰當的方法

    圖4. 四種演算法在14個數據集上的準確率與排序[1]

    圖4提供了四種演算法(C4.5,C4.5+m,C4.5+cf,C4.5+m+cf)在14個數據集上的準確率。

    不恰當方法1 :一種看法是,我們是否可以把兩個演算法的對比推廣到多個演算法上。假設有k個演算法,我們是否可以對它們進行兩兩比較,經過 \frac{(1+(k-1))\times (k-1)}{2}=\frac{k^2-k}{2} 次計算得到一個矩陣。這個是經典的多元假設檢驗問題,這種窮舉法一般都假設了不同對比之間的獨立性,一般都不符合現實,需要進行校正,因此就不贅述了。

    不恰當方法2 Repeated measures ANOVA 是經典的統計學方法,用來進行多樣本間的比較是,可以看做是t檢驗的多元推廣。ANOVA不適合對比演算法表現的原因如下:

  • 對樣本分布有正態假設,然而不同數據集上的準確度往往不符合這個假設
  • 不同的樣本有相同的總體變異數(population variance)
  • 不幸的是,我們想要對比的演算法表現不符合這個情況,因此ANOVA不適合。

    6. 多種演算法間的比較:推薦的方法

    我們需要找到一種方法同時解決第5部份中提到的問題,這個方法需要:

  • 非參數,不對數據的分布做出假設
  • 不需要,或者盡量不依賴,或者可以自動修正兩兩對比所帶來的誤差
  • Demšar [1]推薦了非參數的多元假設檢驗 Friedman test 。Friedman也是一種建立在排名(rank)上的檢驗,它假設所有樣本的排序均值相等。具體來講,我們首先給不同演算法在每個數據集上排序,並最終計算演算法A在所有數據集上排名的均值。如果所有演算法都沒有效能差別,那麽它們的效能的平均排名應該是相等的,這樣我們就可以選擇特定的置信區間來判斷差異是否顯著了。

    假設我們透過Friedman test發現有統計學顯著( p <0.05),那麽我們還需要繼續做事後分析(post-hoc)。 換句話說,Friedman test只能告訴我們演算法間是否有顯著差異,而不能告訴我們到底是哪些演算法間有效能差異。想要定位具體的差異演算法,還需要進行post-hoc分析。

    Friedman test一般配套的post-hoc是Nemenyi test,Nemenyi test可以指出兩兩之間是否存在顯著差異。我們一般還會對Nemenyi的結果視覺化,比如下圖。

    圖5. Nemenyi對10種演算法的對比結果,NS代表不顯著

    另一個值得提的是,即使Friedman證明演算法效能有顯著不同,Nemenyi不一定會說明到底是哪些演算法間不同,原因是Nemenyi比Friedman要弱(weak),實在不行可以對必須分析的演算法成對分析。

    方法2(詳見第七部份):和兩兩對比一樣,在多個樣本對比時也有一些特定情況導致我們不能使用Friedman-Nemenyi。另一個或特許以值得一試的無參數方法是Kruskal Wallis test搭配Dunn's test(作為post-hoc)。 這種方法的特點是:

  • 可以用來檢驗不同的大小的樣本,舉例A演算法在8個數據集上的表現 vs B演算法在10個數據集上的表現 vs C演算法在20個數據集上的表現。
  • 對於測量方法的假設是: 獨立測量 ,這與我們的實際情況不符。
  • 7. 再看重復測量和獨立測量

    我們在第二部份分析了重復測量與獨立測量,而且假設機器學習效能的對比 應該是建立在「重復測量」上的,也就是說所有的演算法都在相同的數據集上進行評估

    在這種假設下,我們推薦了無參數的:Wilcoxon對兩個演算法進行比較, Friedman-Nemenyi對多個演算法進行對比。

    然而,「 重復測量」的假設不一定為真 。舉個例子,如果我們只有一個數據,並從數據中采樣(sample)得到了很多相關的測試集1, 2,3...n,並用於測試不同的演算法。

  • 演算法A:測試集1,2
  • 演算法B:測試集3, 4,5,6
  • 演算法N...
  • 在這種情況下,我們就可以用Mann Whitney U test對比兩種演算法,Kruskal-Dunn對比多種演算法。 而且值得註意的是,這種情況常見於人工合成的數據,比如從高斯分布中采樣得到數據 。因此,要特別分析數據的測量方式,再決定如何評估。

    8. 工具庫與實作

    我們知道R上面有所有這些檢驗,著重談談Python上的工具庫。幸運的是,上文提到所有檢驗方法在Python上都有工具庫

    Scipy Statistical functions :Wilcoxon,Friedman,Mann Whitney

    scikit-posthocs:Nemenyi,Dunn's test

    文章的配圖來自於[1] 以及我的一篇paper [2],接收後會補上reference。 文章的思路和脈絡基於[1], 建議閱讀。[2]主要著力於特定情況,當重復測量失效時的檢驗。

    [1] Demšar, J., 2006. Statistical comparisons of classifiers over multiple data sets. Journal of Machine learning research , 7 (Jan), pp.1-30.

    [2] To complete.