4.8 Estimating Generalization
4.8 評估泛化能力
評估模型的泛化能力
- 如何合理評估模型的泛化能力
- 指導原則 (Guidelines)
- 存在的問題 (Issues)
- K-fold 交叉驗證(Cross-Validation)
- 留一交叉驗證(Leave One Out CV)(LOOCV)
- Stratification 分層
- 訓練-驗證-測試拆分(training validation test split)
- 引導策略(bootstrap)
如何合理評估模型的泛化能力
指導原則 (Guidelines)
訓練集要有 足夠多的樣本 留下,不要全部拿去訓練。
測試集的標簽 在訓練過程中絕對不能使用(不能直接用,也不能間接泄漏)。但是,測試數據本身(不帶標簽)可以用,比如做無監督的分布分析。
要明確模型的 應用場景和目的(intended use & application)。
要清楚性能評估的 目標(objective of evaluation),比如是比較算法還是用于實際部署。
存在的問題 (Issues)
測試集變小 → 估計的方差變大(因為樣本少,評估結果波動更大)
訓練集變小 → 偏差(bias)增加(數據不足,模型性能評估更悲觀)
K-fold 交叉驗證(Cross-Validation)
測量泛化性能 (Measurement of Generalization Performance),用于估計性能的方差 (For estimation of variation),將數據劃分為 K 折 (Divide the data into K folds)
- 對于每個 k = 1…K
- 在 K-1 個子集上訓練,留出第 k 個子集作為驗證集
- 在第 k 個子集上驗證,并計算性能指標
- 匯總所有 K 次實驗的 平均值 和 方差
不同的K值會如何影響結果,如何影響平均準確率或平均性能指標?
當訓練數據很小的時候,使用較大的K值; 當訓練數據很大的時候,使用較小的K值。
留一交叉驗證(Leave One Out CV)(LOOCV)
如果 K=樣本數K=樣本數K=樣本數,這種極端情況稱為留一交叉驗證(LOOCV)。適用于數據量很小的情況。
Stratification 分層
分層(分層交叉驗證)– 確保每一折包含的樣本數量與整體數據相同。
如果某個類別在整個數據集中占 20% 的樣本,那么在從數據集中抽取的所有樣本中,它也應該占大約 20% 的樣本。
舉例
一個數據集合,1000個數據,800個負例,200個正例。5-fold 交叉驗證。每個樣本fold,都要有80%的負例,20%的正例。
如果我們保證這一點,我們本質上所做的就說分層。與非分層交叉驗證相比,分層交叉驗證是一種更好的評估交叉驗證性能的方法。
訓練-驗證-測試拆分(training validation test split)
(10-fold cross-validation)10倍交叉驗證是很好常用的。如果有10,000個或5,000樣本,我們可以使用10倍交叉驗證,將會提供可靠的估計值。
但如果有大量或者少數樣本作為訓練,這是比較棘手的,需要使用其他方法。如果樣本數量非常大,我們繼續使用10倍交叉驗證,將花費很長時間。因此,這種情況,我們通常會將數據集拆分成為 訓練數據集(training dataset)、驗證數據集(validation dataset)、測試數據集(testing dataset)。常用占比是60%、20%、20%。
我們使用一個模型,比如
SVM ,C=100, RBF r=0.1 ,將這個模型在Training dataset中進行訓練,在Valid dataset中進行驗證,得出AUCROC=0.8;
SVM ,C=1000, RBF r=0.2 ,將這個模型在Training dataset中進行訓練,在Valid dataset中進行驗證,得出AUCROC=0.9;
…
這些模型都在同一個數據集合中進行訓練和測試,最終我們根據測試結果,選出性能最好的模型,比如SVM ,C=1000, RBF r=0.2 。
引導策略(bootstrap)
當樣本數量非常少時,事情就會變得復雜。比如只有100個樣本可以用于訓練。通常情況下,訓練樣本數量很少,標記就很困難。例如,如果是生物或者生物醫學信息學領域,樣本數量可能非常少。因為標記成本很高。比如蛋白質結構測定實驗的成本很容易達到10萬美元。所以這會成為一個問題,如果樣本數量非常少,那準確率的估計就會更加困難。
如果樣本少,可以使用Lemon-outcross validation檸檬雜交實驗,還有別的策略,這些策略稱為 引導策略(bootstrap or bootstrapping),可以實現。
(這里不細說)