如何計算McNemar檢驗,比較兩種機器學習分類器
編譯:yxy
出品:ATYUN訂閱號
統計假設檢驗的選擇是解釋機器學習結果的一個具有挑戰性的開放問題。
在1998年被廣泛引用的論文中,Thomas Dietterich在訓練多份分類器模型副本昂貴而且不切實際的情況下推薦了McNemar檢驗。
它描述了深度學習模型的現狀,模型非常大並且在大型數據集上進行訓練和評估,一個模型通常需要數天或數周來訓練。
在本教程中,你將了解如何使用McNemar統計假設檢驗來比較單個測試數據集上的機器學習分類模型。
完成本教程後,你將了解:
McNemar檢驗適合大型深度學習模型。
如何將兩個分類器的預測結果轉換為列聯表,以及如何使用它來計算McNemar檢驗中的統計量。
如何用Python計算McNemar檢驗並解釋和報告結果。
教程概述
本教程分為五個部分; 他們是:
為深度學習執行統計假設檢驗
列聯表
McNemar檢驗的統計
使用McNemar檢驗解釋分類器
Python中的McNemar檢驗
為深度學習執行統計假設檢驗
Thomas Dietterich在他1998年發表的一篇重要的、被廣泛引用的論文中,討論了如何利用統計假設檢驗來比較分類器,論文「Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithms」。鏈接:https://www.mitpressjournals.org/doi/abs/10.1162/089976698300017197
具體來說,當被比較的演算法只能進行一次評估時推薦使用該檢驗,例如在一個測試集上,而不是通過重採樣技術反覆評估,例如k折交叉驗證。
對於只能執行一次的演算法,McNemar檢驗是唯一具有可接受的第一類(Type I )錯誤的檢驗。
-Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithm,1998。
具體來說,Dietterich的研究涉及不同統計假設檢驗的評估,其中一些檢驗使用了重採樣方法的結果。研究的關注點是低的第一類錯誤,即統計檢驗報告了為有影響實際上沒有(假陽性)。
統計檢驗可以比較基於單一測試集的模型,這對現代機器學習來說十分重要,特別是在深度學習領域。
深度學習模型通常本身就很大,並且在非常大的數據集上運行。總之,這些因素可能意味著在現代硬體上對模型的訓練可能需要數天甚至數周時間。
這排除了用重新採樣方法比較模型的實際應用,並暗示了需要使用可以在單個測試數據集上評估訓練模型結果的檢驗。
McNemar檢驗適合評估這些大型的、訓練慢的深度學習模型。
列聯表
McNemar檢驗基於列聯表運行。在我們深入了解這種檢驗之前,讓我們花點時間來理解如何計算兩個分類器的列聯表。
列聯表是兩個分類變數的製表或者說計數。在McNemar檢驗的情況下,我們對二元變數的正確/不正確(或者是/否)的控制和處理感興趣(或者兩種都有)。這被稱為2×2列聯表。
列聯表乍一看可能並不直觀。讓我們做一個具體的例子。
我們有兩個訓練好的分類器。每個分類器對測試數據集中的10個實例中的每個實例進行二元分類預測。預測被評估並確定為正確的或不正確的(yes/no)。
然後我們可以在表格中匯總這些結果,如下所示:
我們可以看到Classifier1得到6個Yes,或者說準確率為60%,Classifier2得到5個Yes,或者在測試集上有50%的準確率。
該表現在可以簡化為列聯表。
列聯表依賴於這樣一個事實 — 兩個分類器都在完全相同的訓練數據上訓練並在完全相同的測試數據上進行評估。
列聯表具有以下結構:
對於表中第一個單元格的情況,我們必須總結Classifier1得到正確且Classifier2也得到正確的檢驗實例的總數。例如,兩個分類器正確預測的第一個實例是實例5.兩個分類器正確預測的實例總數為4。
考慮到這點,另一種更具編程性的方法是在上面的結果表中對「是/否」的每個組合求和。
結果如下:
McNemar檢驗的統計
McNemar檢驗是配對的非參數或無分布統計假設檢驗。
它也不像其他一些統計假設檢驗那麼直觀。
McNemar檢驗是檢查兩個案例之間的分歧是否匹配。從技術上講,這被稱為列聯表的同質性(homogeneity ,特別是邊際同質性)。因此,McNema檢驗是一種列聯表的同質性檢驗。
這個檢驗廣泛用於醫學領域,可以比較治療對照的效果。
在比較兩個二元分類演算法時,檢驗是這兩個模型是否存在相同的分歧的說明。它不會說明一個模型是否比另一個模型更準確或更容易出錯。當我們看統計數據是如何計算的時候,這一點是顯而易見的。
McNemar檢驗統計量的計算如下:
其中Yes / No是Classifier1正確且Classifier2不正確的檢驗實例的計數,No / Yes是Classifier1不正確且Classifier2正確的檢驗實例的計數。
檢驗統計量的這種計算假定計算中使用的列聯表中的每個單元具有至少25個計數。檢驗統計量具有1自由度的卡方分布。
我們可以看到,只使用列聯表的兩個元素,即Yes/Yes和No/No元素沒有用於檢驗統計數據的計算。因此,我們可以看到統計數據是報告兩個模型之間的正確或錯誤的預測,而不是準確性或錯誤率。當對統計數據的發現提出要求時,這一點非常重要。
檢驗的默認假設或零假設是兩個案例不同一致的總計。如果零假設被拒絕,有證據表明,這些案例在不同的方面存在分歧,這些分歧是有傾向性的。
給定顯著性水平的選擇,通過檢驗計算的p值可以解釋如下:
p> alpha:未能拒絕H0,在分歧上沒有差異(例如,治療沒有效果)。
p
使用McNemar檢驗解釋分類器
花點時間去理解,如何在兩個機器學習分類器模型的上下文中解釋檢驗結果是很重要的。
計算McNemar檢驗時使用的兩個項去捕捉了兩個模型的誤差。具體而言,列聯表中的No / Yes和Yes / No。該檢驗檢查它們兩個計數之間是否存在顯著的差異。
如果它們具有相似的計數,則表明兩個模型犯錯誤的比例大致相同,僅在測試集的不同實例上。在這種情況下,零假設也不會被拒絕。
在零假設下,兩種演算法應該具有相同的錯誤率……
– Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithm,1998。
反之,技術如果不相似,則表明兩個模型不僅產生不同的錯誤,而且實際上在測試集上相對的錯誤比例也不同。在這種情況下,我們將拒絕零假設。
因此,我們可以拒絕零假設,支持兩種演算法在特定訓練中訓練時具有不同性能的假設
– Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithm,1998。
我們可以總結如下:
不拒絕零假設:分類器在測試集上具有相似的錯誤比例。
拒絕零假設:分類器在測試集上具有不同的錯誤比例。
在執行檢測並找到顯著的結果之後,報告效果統計測量以量化該發現可能是有用的。例如,一個自然的選擇是報告優勢比,或列聯表本身,儘管這兩者都假設一個「sophisticated reader」。
報告在測試集上兩個分類器之間的差異可能很有用。在這種情況下,請小心你的聲明,因為顯著性的檢驗不會報告模型之間的錯誤差異,只會報告模型之間錯誤比例的相對偏差。
最後,在使用McNemar檢驗中,Dietterich強調了必須考慮的兩個重要限制。他們是:
1.沒有訓練集或模型可變性的度量。
通常,模型行為基於用來擬合模型的特定訓練數據而變化。
這是由於模型與特定訓練實例的交互作用以及在學習過程中使用的隨機性。將模型擬合到多個不同的訓練數據集並評估技能(如重採樣方法所做的那樣),提供了一種度量模型差異的方法。
如果可變性的來源很小,則該檢驗是合適的。
因此,只有當我們認為這些可變性來源很小時,才應該應用McNemar檢驗。
– Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithm,1998。
2.較少的模型直接比較
兩個分類器在一個測試集上進行評估,並且測試集應該小於訓練集。
這與更多的是使用重採樣方法的假設檢驗不同,因為在評估期間,數據集可用作測試集。
這提供了較少的機會來比較模型的性能。它要求測試集適當地代表域,這通常意味著測試數據集很大。
Python中的McNemar檢驗
在Python中可以使用mcnemar()Statsmodels函數實現McNemar檢驗。
該函數將列聯表作為參數,並返回計算出的檢驗統計量和p值。
根據數據量,有兩種方法可以使用統計信息。如果表中有一個單元用於計算計數小於25的測試統計量,則使用檢驗的修改版本,使用二項分布計算精確的p值。這是該檢驗的默認用法:
或者,如果在列聯表中計算檢驗統計量時使用的所有單元具有25或更大的值,則可以使用檢驗的標準計算:
我們可以在上面描述的示例列聯表上計算McNemar檢驗。這個列聯表在兩個不同的單元中都有一個小的計數,因此必須使用精確的方法。
完整的示例如下:
運行該示例計算列聯表上的統計值和p值並列印結果。
我們可以看到,該檢驗強有力地證實了兩種案例之間的分歧差別很小。零假設沒有被拒絕。當我們使用檢驗來比較分類器時,我們聲明兩種模型之間的分歧沒有統計學上的顯著差異。


※全面總結機器學習項目和面試中幾乎繞不開的決策樹
※研究團隊合作開發一種機器學習演算法,能夠使用AI預測智力
TAG:機器學習 |