<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                # 如何計算McNemar的比較兩種機器學習量詞的測試 > 原文: [https://machinelearningmastery.com/mcnemars-test-for-machine-learning/](https://machinelearningmastery.com/mcnemars-test-for-machine-learning/) 統計假設檢驗的選擇對于解釋機器學習結果是一個具有挑戰性的開放性問題。 在他1998年被廣泛引用的論文中,Thomas Dietterich在那些訓練多份分類器模型昂貴或不切實際的案例中推薦了McNemar的測試。 這描述了深度學習模型的當前情況,這些模型非常大并且在大型數據集上進行訓練和評估,通常需要數天或數周來訓練單個模型。 在本教程中,您將了解如何使用McNemar的統計假設檢驗來比較單個測試數據集上的機器學習分類器模型。 完成本教程后,您將了解: * McNemar測試對于訓練昂貴的模型的建議,適合大型深度學習模型。 * 如何將兩個分類器的預測結果轉換為列聯表,以及如何使用該表來計算McNemar測試中的統計量。 * 如何用Python計算McNemar的測試并解釋和報告結果。 讓我們開始吧。 ![How to Calculate McNemar's Test for Two Machine Learning Classifiers](img/d5401d2995454ada4c17b76798243936.jpg) 如何計算McNemar對兩臺機器學習量詞的測試 [Mark Kao](https://www.flickr.com/photos/67415843@N05/37883206606/) 的照片,保留一些權利。 ## 教程概述 本教程分為五個部分;他們是: 1. 深度學習的統計假設檢驗 2. 列聯表 3. 麥克尼瑪的測試統計 4. 解讀McNemar的分類器測試 5. McNemar的Python測試 ## 深度學習的統計假設檢驗 在他1998年重要且廣泛引用的關于使用統計假設檢驗來比較標題為“[近似統計檢驗比較監督分類學習算法](https://www.mitpressjournals.org/doi/abs/10.1162/089976698300017197)”的論文中,Thomas Dietterich建議使用McNemar檢驗。 具體而言,建議在那些被比較的算法只能評估一次的情況下進行測試,例如,在一個測試集上,而不是通過重采樣技術重復評估,例如k折交叉驗證。 > 對于只能執行一次的算法,McNemar的測試是唯一具有可接受的I類錯誤的測試。 - [用于比較監督分類學習算法的近似統計檢驗](https://www.mitpressjournals.org/doi/abs/10.1162/089976698300017197),1998。 具體而言,Dietterich的研究涉及不同統計假設檢驗的評估,其中一些檢驗采用重采樣方法的結果。該研究的關注點是 [I型錯誤](https://en.wikipedia.org/wiki/Type_I_and_type_II_errors),即統計檢驗報告實際上沒有效果時的效果(假陽性)。 可以比較基于單個測試集的模型的統計測試是現代機器學習的重要考慮因素,特別是在深度學習領域。 深度學習模型通常很大,可以在非常大的數據集上運行。總之,這些因素可能意味著在快速的現代硬件上對模型的訓練可能需要數天甚至數周。 這排除了重新采樣方法的實際應用以比較模型,并建議需要使用可以對在單個測試數據集上評估訓練模型的結果進行操作的測試。 McNemar的測試可能是評估這些大型和慢速訓練深度學習模型的合適測試。 ## 列聯表 McNemar的測試按照列聯表進行。 在我們深入測試之前,讓我們花一點時間來理解如何計算兩個分類器的列聯表。 [列聯表](https://en.wikipedia.org/wiki/Contingency_table)是兩個分類變量的列表或計數。在McNemar測試的情況下,我們感興趣的是二進制變量正確/不正確或是/否對于對照和治療或兩種情況。這被稱為2×2列聯表。 列表的列聯表乍一看可能不直觀。讓我們通過一個有效的例子來具體化。 考慮一下我們有兩個訓練有素的分類器。每個分類器對測試數據集中的10個示例中的每個示例進行二進制類預測。預測被評估并確定為正確或不正確。 然后我們可以在表格中總結這些結果,如下所示: ```py Instance, Classifier1 Correct, Classifier2 Correct 1 Yes No 2 No No 3 No Yes 4 No No 5 Yes Yes 6 Yes Yes 7 Yes Yes 8 No No 9 Yes No 10 Yes Yes ``` 我們可以看到Classifier1得到6個正確,或者精度為60%,Classifier2得到5個正確,或者在測試集上有50%的準確度。 該表現在可以簡化為列聯表。 列聯表依賴于兩個分類器都在完全相同的訓練數據上訓練并在完全相同的測試數據實例上進行評估的事實。 列聯表具有以下結構: ```py Classifier2 Correct, Classifier2 Incorrect Classifier1 Correct ?? ?? Classifier1 Incorrect ?? ?? ``` 對于表中第一個單元格,我們必須將Classifier1得到正確且Classifier2正確的測試實例總數相加。例如,兩個分類器正確預測的第一個實例是實例編號5.兩個分類器正確預測的實例總數為4。 考慮這一點的另一種更具編程性的方法是在上面的結果表中總結是/否的每個組合。 ```py Classifier2 Correct, Classifier2 Incorrect Classifier1 Correct Yes/Yes Yes/No Classifier1 Incorrect No/Yes No/No ``` 將結果組織成一個列聯表如下: ```py Classifier2 Correct, Classifier2 Incorrect Classifier1 Correct 4 2 Classifier1 Incorrect 1 3 ``` ## 麥克尼瑪的測試統計 [McNemar的測試](https://en.wikipedia.org/wiki/McNemar%27s_test)是一個配對的非參數或無分布的統計假設檢驗。 它也不像其他一些統計假設檢驗那么直觀。 McNemar的測試是檢查兩個案件之間的分歧是否匹配。從技術上講,這被稱為列聯表的同質性(特別是邊際同質性)。因此,McNemar的測試是一種應變表的同質性測試。 該試驗廣泛用于醫學中以比較治療對照的效果。 在比較兩個二元分類算法方面,測試是評論兩個模型是否以相同的方式不同意。它沒有評論一個模型是否比另一個模型更準確或更準確或更容易出錯。當我們查看統計數據的計算方式時,這一點很清楚。 McNemar的檢驗統計量計算如下: ```py statistic = (Yes/No - No/Yes)^2 / (Yes/No + No/Yes) ``` 其中Yes / No是Classifier1正確且Classifier2不正確的測試實例的數量,No / Yes是Classifier1不正確且Classifier2正確的測試實例的計數。 測試統計量的這種計算假定計算中使用的列聯表中的每個單元具有至少25的計數。檢驗統計量具有1自由度的Chi-Squared分布。 我們可以看到只使用列聯表的兩個元素,特別是在計算測試統計量時不使用是/是和否/否元素。因此,我們可以看到統計數據報告了兩個模型之間不同的正確或不正確的預測,而不是準確性或錯誤率。在了解統計數據的發現時,這一點非常重要。 測試的默認假設或零假設是兩個案例不同意相同的數量。如果零假設被拒絕,則表明有證據表明案例在不同方面存在分歧,即分歧存在偏差。 給定顯著性水平的選擇,通過測試計算的p值可以解釋如下: * **p&gt; α**:不能拒絕H0,在分歧上沒有差異(例如治療沒有效果)。 * **p &lt;=α**:排斥H0,不一致的顯著差異(例如治療有效)。 ## 解讀McNemar的分類器測試 重要的是花點時間清楚地理解如何在兩個機器學習分類器模型的上下文中解釋測試結果。 計算McNemar測試時使用的兩個術語捕獲了兩個模型的誤差。具體而言,列聯表中的No / Yes和Yes / No單元格。該測試檢查這兩個單元格中的計數之間是否存在顯著差異。就這些。 如果這些單元格具有相似的計數,則向我們顯示兩個模型在大小相同的比例中產生錯誤,僅在測試集的不同實例上。在這種情況下,測試結果不會很明顯,零假設也不會被拒絕。 > 在零假設下,兩種算法應該具有相同的錯誤率...... — [Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithm](https://www.mitpressjournals.org/doi/abs/10.1162/089976698300017197), 1998. 如果這些單元格具有不相似的計數,則表明兩個模型不僅產生不同的錯誤,而且實際上在測試集上具有不同的相對錯誤比例。在這種情況下,測試的結果將是顯著的,我們將拒絕零假設。 > 因此,我們可以拒絕零假設,以支持兩種算法在特定訓練中訓練時具有不同表現的假設 — [Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithm](https://www.mitpressjournals.org/doi/abs/10.1162/089976698300017197), 1998. 我們可以總結如下: * **無法拒絕空假設**:分類器在測試集上的錯誤比例相似。 * **拒絕空假設**:分類器在測試集上具有不同的錯誤比例。 在執行測試并找到顯著結果之后,報告效果統計測量以量化該發現可能是有用的。例如,一個自然的選擇是報告優勢比,或列聯表本身,盡管這兩者都假定一個復雜的讀者。 報告測試集上兩個分類器之間的差異可能很有用。在這種情況下,請小心您的聲明,因為重要測試不會報告模型之間的誤差差異,只會報告模型之間誤差比例的相對差異。 最后,在使用McNemar的測試時,Dietterich強調了必須考慮的兩個重要限制。他們是: ### 1.沒有訓練集或模型可變性的度量。 通常,模型行為根據用于擬合模型的特定訓練數據而變化。 這是由于模型與特定訓練實例的相互作用以及學習期間隨機性的使用。將模型擬合到多個不同的訓練數據集上并評估技能,就像重新采樣方法一樣,提供了一種測量模型方差的方法。 如果可變性的來源很小,則該測試是合適的。 > 因此,只有當我們認為這些可變性來源很小時,才應該應用McNemar的測試。 — [Approximate Statistical Tests for Comparing Supervised Classification Learning Algorithm](https://www.mitpressjournals.org/doi/abs/10.1162/089976698300017197), 1998. ### 2.較少的模型直接比較 在單個測試集上評估兩個分類器,并且預期測試集小于訓練集。 這與使用重采樣方法的假設檢驗不同,因為在評估過程中,如果不是全部數據集的更多(如果不是全部)可用作測試集(從統計角度介紹其自身的問題)。 這提供了較少的機會來比較模型的表現。它要求測試集合適當地代表域,通常意味著測試數據集很大。 ## McNemar的Python測試 可以使用 [mcnemar()Statsmodels函數](http://www.statsmodels.org/dev/generated/statsmodels.stats.contingency_tables.mcnemar.html)在Python中實現McNemar的測試。 該函數將列聯表作為參數,并返回計算的測試統計量和p值。 根據數據量,有兩種方法可以使用統計信息。 如果表中有一個單元用于計算計數小于25的測試統計量,則使用測試的修改版本,使用二項分布計算精確的p值。這是測試的默認用法: ```py stat, p = mcnemar(table, exact=True) ``` 或者,如果在列聯表中計算測試統計量時使用的所有單元具有25或更大的值,則可以使用測試的標準計算。 ```py stat, p = mcnemar(table, exact=False, correction=True) ``` 我們可以在上面描述的示例列聯表上計算McNemar。這個列聯表在兩個不同的單元中都有一個小的計數,因此必須使用確切的方法。 下面列出了完整的示例。 ```py # Example of calculating the mcnemar test from statsmodels.stats.contingency_tables import mcnemar # define contingency table table = [[4, 2], [1, 3]] # calculate mcnemar test result = mcnemar(table, exact=True) # summarize the finding print('statistic=%.3f, p-value=%.3f' % (result.statistic, result.pvalue)) # interpret the p-value alpha = 0.05 if result.pvalue > alpha: print('Same proportions of errors (fail to reject H0)') else: print('Different proportions of errors (reject H0)') ``` 運行該示例計算列聯表上的統計值和p值并打印結果。 我們可以看到,該測試強烈證實兩種情況之間的分歧差別很小。零假設沒有被拒絕。 當我們使用測試來比較分類器時,我們指出兩個模型之間的分歧沒有統計學上的顯著差異。 ```py statistic=1.000, p-value=1.000 Same proportions of errors (fail to reject H0) ``` ## 擴展 本節列出了一些擴展您可能希望探索的教程的想法。 * 在機器學習中找到一篇利用McNemar統計假設檢驗的研究論文。 * 更新代碼示例,以便列聯表顯示兩種情況之間不一致的顯著差異。 * 實現一個函數,該函數將根據提供的列聯表使用正確版本的McNemar測試。 如果你探索任何這些擴展,我很想知道。 ## 進一步閱讀 如果您希望深入了解,本節將提供有關該主題的更多資源。 ### 文件 * [關于相關比例或百分比之間差異的抽樣誤差的注釋](https://link.springer.com/article/10.1007/BF02295996),1947。 * [用于比較監督分類學習算法的近似統計檢驗](https://www.mitpressjournals.org/doi/abs/10.1162/089976698300017197),1998。 ### API * [statsmodels.stats.contingency_tables.mcnemar()API](http://www.statsmodels.org/dev/generated/statsmodels.stats.contingency_tables.mcnemar.html) ### 用品 * [McNemar對維基百科的測試](https://en.wikipedia.org/wiki/McNemar%27s_test) * [維基百科上的I型和II型錯誤](https://en.wikipedia.org/wiki/Type_I_and_type_II_errors) * [維基百科上的列聯表](https://en.wikipedia.org/wiki/Contingency_table) ## 摘要 在本教程中,您了解了如何使用McNemar的測試統計假設檢驗來比較單個測試數據集上的機器學習分類器模型。 具體來說,你學到了: * McNemar測試對于訓練昂貴的模型的建議,適合大型深度學習模型。 * 如何將兩個分類器的預測結果轉換為列聯表,以及如何使用該表來計算McNemar測試中的統計量。 * 如何用Python計算McNemar的測試并解釋和報告結果。 你有任何問題嗎? 在下面的評論中提出您的問題,我會盡力回答。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看