綜述:機器學習中的模型評價、模型選擇與演算法選擇!

選自 Sebastian Raschka,來源:機器之心

本論文迴顧瞭用於解決模型評估、模型選擇和算法選擇三項任務的不同技術,並參考理論和實證研究討論瞭每一項技術的主要優勢和劣勢。進而,給齣建議以促進機器學習研究與應用方麵的最佳實踐。
論文鏈接:https://sebastianraschka.com/pdf/manuscripts/model-eval.pdf
摘要:模型評估、模型選擇和算法選擇技術的正確使用在學術性機器學習研究和諸多産業環境中異常關鍵。本文迴顧瞭用於解決以上三項任務中任何一個的不同技術,並參考理論和實證研究討論瞭每一項技術的主要優勢和劣勢。進而,給齣建議以促進機器學習研究與應用方麵的最佳實踐。本文涵蓋瞭用於模型評估和選擇的常見方法,比如留齣方法,但是不推薦用於小數據集。不同風格的 bootstrap 技術也被介紹,以評估性能的不確定性,以作為通過正態空間的置信區間的替代,如果 bootstrapping 在計算上是可行的。在討論偏差-方差權衡時,把 leave-one-out 交叉驗證和 k 摺交叉驗證進行對比,並基於實證證據給齣 k 的最優選擇的實際提示。論文展示瞭用於算法對比的不同統計測試,以及處理多種對比的策略(比如綜閤測試、多對比糾正)。最後,當數據集很小時,本文推薦替代方法(比如 5×2cv 交叉驗證和嵌套交叉驗證)以對比機器學習算法。 
01  簡介:基本的模型評估項和技術
機器學習已經成為我們生活的中心,無論是作為消費者、客戶、研究者還是從業人員。無論將預測建模技術應用到研究還是商業問題,我認為其共同點是:做齣足夠好的預測。用模型擬閤訓練數據是一迴事,但我們如何瞭解模型的泛化能力?我們如何確定模型是否隻是簡單地記憶訓練數據,無法對未見過的樣本做齣好的預測?還有,我們如何選擇好的模型呢?也許還有更好的算法可以處理眼前的問題呢?
模型評估當然不是機器學習工作流程的終點。在處理數據之前,我們希望事先計劃並使用閤適的技術。本文將概述這類技術和選擇方法,並介紹如何將其應用到更大的工程中,即典型的機器學習工作流。
1.1 性能評估:泛化性能 vs. 模型選擇
讓我們考慮這個問題:「如何評估機器學習模型的性能?」典型的迴答可能是:「首先,將訓練數據饋送給學習算法以學習一個模型。第二,預測測試集的標簽。第三,計算模型對測試集的預測準確率。」然而,評估模型性能並非那麼簡單。也許我們應該從不同的角度解決之前的問題:「為什麼我們要關心性能評估呢?」理論上,模型的性能評估能給齣模型的泛化能力,在未見過的數據上執行預測是應用機器學習或開發新算法的主要問題。通常,機器學習包含大量實驗,例如超參數調整。在訓練數據集上用不同的超參數設置運行學習算法最終會得到不同的模型。由於我們感興趣的是從該超參數設置中選擇最優性能的模型,因此我們需要找到評估每個模型性能的方法,以將它們進行排序。
我們需要在微調算法之外更進一步,即不僅僅是在給定的環境下實驗單個算法,而是對比不同的算法,通常從預測性能和計算性能方麵進行比較。我們總結一下評估模型的預測性能的主要作用:
  • 評估模型的泛化性能,即模型泛化到未見過數據的能力;

  • 通過調整學習算法和在給定的假設空間中選擇性能最優的模型,以提升預測性能;

  • 確定最適用於待解決問題的機器學習算法。因此,我們可以比較不同的算法,選擇其中性能最優的模型;或者選擇算法的假設空間中的性能最優模型。

雖然上麵列齣的三個子任務都是為瞭評估模型的性能,但是它們需要使用的方法是不同的。本文將概述解決這些子任務需要的不同方法。
我們當然希望盡可能精確地預測模型的泛化性能。然而,本文的一個要點就是,如果偏差對所有模型的影響是等價的,那麼偏差性能評估基本可以完美地進行模型選擇和算法選擇。如果要用排序選擇最優的模型或算法,我們隻需要知道它們的相對性能就可以瞭。例如,如果所有的性能評估都是有偏差的,並且低估瞭它們的性能(10%),這不會影響最終的排序。更具體地說,如果我們得到如下三個模型,這些模型的預測準確率如下:
M2: 75% > M1: 70% > M3: 65
如果我們添加瞭 10% 的性能偏差(低估),則三種模型的排序沒有發生改變:
M2: 65% > M1: 60% > M3: 55%. 
但是,注意如果最佳模型(M2)的泛化準確率是 65%,很明顯這個精度是非常低的。評估模型的絕對性能可能是機器學習中最難的任務之一。
圖 2:留齣驗證方法的圖示。
02  Bootstrapping 和不確定性
本章介紹一些用於模型評估的高級技術。我們首先討論用來評估模型性能不確定性和模型方差、穩定性的技術。之後我們將介紹交叉驗證方法用於模型選擇。如第一章所述,關於我們為什麼要關心模型評估,存在三個相關但不同的任務或原因。
  • 我們想評估泛化準確度,即模型在未見數據上的預測性能。

  • 我們想通過調整學習算法、從給定假設空間中選擇性能最好的模型,來改善預測性能。

  • 我們想確定手頭最適閤待解決問題的機器學習算法。因此,我們想對比不同的算法,選齣性能最好的一個;或從算法的假設空間中選齣性能最好的模型。

圖 3:偏差和方差的不同組閤的圖示。
圖 4:在 MNIST 數據集上 softmax 分類器的學習麯綫。
圖 5:二維高斯分布中的重復子采樣。
03  交叉驗證和超參數優化
幾乎所有機器學習算法都需要我們機器學習研究者和從業者指定大量設置。這些超參數幫助我們控製機器學習算法在優化性能、找齣偏差方差最佳平衡時的行為。用於性能優化的超參數調整本身就是一門藝術,沒有固定規則可以保證在給定數據集上的性能最優。前麵的章節提到瞭用於評估模型泛化性能的留齣技術和 bootstrap 技術。偏差-方差權衡和計算性能估計的不穩定性方法都得到瞭介紹。本章主要介紹用於模型評估和選擇的不同交叉驗證方法,包括對不同超參數配置的模型進行排序和評估其泛化至獨立數據集的性能。
本章生成圖像的代碼詳見:https://github.com/rasbt/model-eval-article-supplementary/blob/master/code/resampling-and-kfold.ipynb。
圖 11:logistic 迴歸的概念圖示。
我們可以把超參數調整(又稱超參數優化)和模型選擇的過程看作元優化任務。當學習算法在訓練集上優化目標函數時(懶惰學習器是例外),超參數優化是基於它的另一項任務。這裏,我們通常想優化性能指標,如分類準確度或接受者操作特徵麯綫(ROC 麯綫)下麵積。超參數調整階段之後,基於測試集性能選擇模型似乎是一種閤理的方法。但是,多次重復使用測試集可能會帶來偏差和最終性能估計,且可能導緻對泛化性能的預期過分樂觀,可以說是「測試集泄露信息」。為瞭避免這個問題,我們可以使用三次分割(three-way split),將數據集分割成訓練集、驗證集和測試集。對超參數調整和模型選擇進行訓練-驗證可以保證測試集「獨立」於模型選擇。這裏,我們再迴顧一下性能估計的「3 個目標」:
  • 我們想評估泛化準確度,即模型在未見數據上的預測性能。

  • 我們想通過調整學習算法、從給定假設空間中選擇性能最好的模型,來改善預測性能。

  • 我們想確定最適閤待解決問題的機器學習算法。因此,我們想對比不同的算法,選齣性能最好的一個,從算法的假設空間中選齣性能最好的模型。
圖 12:超參數調整中三路留齣方法(three-way holdout method)圖示。
圖 13:k 摺交叉驗證步驟圖示。
圖 16:模型選擇中 k 摺交叉驗證的圖示。