Classification

測試準確率高於訓練。如何解讀?

  • May 21, 2013

我有一個數據集,最多包含 150 個示例(分為訓練和測試),具有許多特徵(高於 1000)。我需要比較在數據上表現良好的分類器和特徵選擇方法。因此,我使用了三種分類方法(J48、NB、SVM)和兩種特徵選擇方法(CFS、WrapperSubset)和不同的搜索方法(Greedy、BestFirst)。

在比較時,我正在查看訓練準確度(5 倍交叉折疊)和測試準確度。

這是 J48 和 CFS-BestFirst 的結果之一:

{“準確性訓練”:95.83,“準確性測試”:98.21}

很多結果都是這樣的,在SVM上有很多結果表明測試準確率遠高於訓練(訓練:60%,測試:98%)

我怎樣才能有意義地解釋這些結果?如果它更低,我會說它過度擬合。通過查看所有結果,在這種情況下,關於偏差和方差有什麼要說的嗎?我可以做些什麼來使這種分類有意義,例如重新選擇訓練和測試集或僅對所有數據使用交叉驗證?

我有 73 個訓練實例和 58 個測試實例。有些答案在發佈時沒有此信息。

我認為第一步是檢查報告的訓練和測試性能是否真的正確。

  • 5 折交叉驗證期間的拆分是否以產生統計上獨立的 cv 訓練/測試集的方式完成?例如,如果數據中有重複測量,它們是否總是在同一個集合中結束?
  • 在 150 個樣本的 5 倍 cv 中,95.83% 的準確率與 5 個代理模型的 130 個訓練樣本中的 5 個錯誤或 5 * 130 個訓練樣本的 25 個錯誤案例一致。
  • 98.21% 的測試準確率更難解釋:在一次 cv 運行期間,每個案例都應該測試一次。因此,可能報告的數字應該以 100%/150 為單位。98.21% 對應 2.68 個錯誤用例(150 個測試用例中有 2 個和 3 個錯誤分別給出 98.67% 和 98.00% 的準確率)。
  • 如果您可以提取模型,請在外部計算報告的準確度。
  • 隨機輸入的報告精度是多少?
  • 進行外部交叉驗證:拆分數據,只將訓練部分交給程序。預測“外部”測試數據併計算準確度。這符合程序的輸出嗎?
  • 確保報告的“測試準確性”來自獨立數據(雙重/嵌套交叉驗證):如果您的程序進行數據驅動優化(例如通過比較多個模型來選擇“最佳”特徵),這更像是訓練錯誤(善良擬合)而不是泛化錯誤。

我同意@mbq 的觀點,即訓練錯誤在機器學習中幾乎沒有用處。但是您可能處於它實際上有用的少數情況之一:如果程序通過比較準確度來選擇“最佳”模型,但只有訓練錯誤可供選擇,您需要檢查訓練錯誤是否真的允許一個明智的選擇。

@mbq 概述了無法區分模型的最佳情況。然而,更糟糕的情況也會發生:就像測試準確度一樣,訓練準確度也受方差影響,但與通常感興趣的泛化準確度相比具有樂觀偏差。這可能導致模型無法區分的情況,儘管它們確實具有不同的性能。但是由於他們的樂觀偏見,他們的訓練(或內部 cv)準確性太接近而無法區分它們。例如,迭代特徵選擇方法可能會遇到這樣的問題,這些問題甚至可能會持續存在於內部交叉驗證的準確性(取決於交叉驗證的實現方式)。

因此,如果可能出現這樣的問題,我認為檢查程序用於決策的準確性是否可能導致明智的選擇是一個好主意。這意味著檢查內部 cv 準確性(據說用於選擇最佳模型)相對於具有統計獨立拆分的外部完成的 cv 沒有或沒有太大的樂觀偏差。同樣,合成和/或隨機數據可以幫助找出程序實際做了什麼。

第二步是看看觀察到的統計獨立分裂的差異是否有意義,正如@mbq 已經指出的那樣。

我建議您計算在給定樣本量下需要觀察的準確度差異,以便獲得具有統計學意義的差異。如果您觀察到的變化較小,則您無法確定哪種算法更適合您的給定數據集:進一步優化沒有意義。

引用自:https://stats.stackexchange.com/questions/59630

comments powered by Disqus