當我們運用訓練好了的模型來預測未知數據時候發現有較大誤差,那么我們下一步可以做什么呢?
一般來說可以選擇以下幾種方法:
-
- 增加訓練集(通常是有效的,但是代價太大)
- 減少特征的數量
- 獲取更多的特征
- 增加多項式特征
- 減小正則化參數lambda
- 增大正則化參數lambda
但是要選擇什么方法來改進我們的算法,我們需要運用一些機器學習診斷法來協助我們判斷。
一、評估h(x) ---- Evaluating a Hypothesis
一個好的Hypothesis:有小的訓練誤差同時沒有過擬合
我們的訓練是通過最小化訓練誤差來得到h(x), 但是有小的訓練誤差並不代表它一定就是一個好的Hypothesis,很可能會發生過擬合導致泛化能力差。
過擬合檢驗:
把數據集分成訓練集(70%)和測試集(30%)
用訓練集訓練出一個模型之后,我們通過測試集來評估這個模型
- 對於回歸模型:利用測試集計算代價函數J
- 對於分類模型:利用測試集計算代價函數J,並計算誤分類比率err(h(x), y) / mtest
二、模型選擇和交叉驗證集 ---- Model Selection and Train_Validation_Test set
當我們不確定多項式模型最高該幾次或者正則化參數應該取多大的時候,我們可以使用交叉驗證集來幫助選擇模型。(微調模型的超參數:多項式最高次,正則化參數)
交叉驗證(cross validation):
數據集:訓練集(60%),交叉驗證集(20%), 測試集(20%)
模型選擇過程(model selection):
- 使用訓練集訓練出多個模型
- 用這些模型分別對交叉驗證集計算交叉驗證誤差J
- 選取代價函數最小的模型
- 用選出的模型對測試集計算推廣誤差J
很多人僅僅把數據集分成了訓練集和交叉驗證集,使用交叉驗證集選擇模型同時測出誤差作為預測效果。當數據集很大時也許可以得到比較好的泛化誤差,但是一般來說這樣並不好。
三、診斷偏差和方差 ---- Diagnosing Bias and Variance
當一個模型表現不是很好時,一般來說是兩種情況:偏差比較大(欠擬合),方差比較大(過擬合)。
泛化性能用期望泛化誤差表示,而期望泛化誤差可以分解為偏差,方差和噪聲。
Bias:描述的是預測值與真實值之間的差距。
Variance:描述的是預測值的變化范圍,離散程度,也就是離其真實值的距離。
偏差度量了學習算法的期望預測與真實結果的偏離程度,即刻畫了學習算法本身的擬合能力;(准確性)
方差度量了同樣大小的訓練集的變動所導致的學習性能的變化,即刻畫了數據擾動所造成的影響;(穩定性)
判斷偏差和方差(多項式次數及λ的值):
我們通過將訓練集和交叉驗證集的代價函數誤差與多項式的次數繪制在同一張圖表上來分析
如表所示,當Jcv(Θ)和Jtrain(Θ)都比較大而且近似時,屬於高偏差問題。(欠擬合)
當Jtrain(Θ)比較小,而且Jcv(Θ)遠大於Jtrain(Θ)時,屬於高方差問題。(過擬合)
同樣的,我們將訓練集和交叉驗證集的代價函數誤差與λ的值繪制在同一張圖表上來分析(在選擇模型時,λ的值一般取兩倍步長)
注意:這里我們在計算訓練集誤差、驗證集誤差和測試集誤差時都不考慮正則化項(只包含數據的平方誤差)。
可以看出,當λ比較小時,可能出現過擬合問題(高方差),此時訓練集誤差比較小,驗證集誤差比較大。
當λ比較大時,對每個參數的懲罰因子都很大,可能出現欠擬合問題(高偏差),此時訓練集誤差和驗證集誤差都比較大。
四、學習曲線 ---- Learning Curves
訓練集大小的影響:
對於高偏差的情況,增加訓練集並沒有用
對於高方差的情況,增加訓練集也許是有用的;
六、針對高方差和高偏差的情況可以采取的措施
- 增加訓練集:高方差
- 減少特征的數量:高方差
- 獲取更多的特征:高偏差
- 增加多項式特征:高偏差
- 減小正則化參數lambda:高偏差
- 增大正則化參數lambda:高方差
對於神經網絡,越簡單的神經網絡計算量小但是容易欠擬合。相反的,越復雜的神經網絡容易過擬合,但我們可以使用正則化項來克服過擬合,一般來說用復雜的神經網絡比簡單的神經網絡效果好,當然計算量比較大。對於隱藏層數量的選擇,一般來說一層是比較合理的選擇,但是你想要從一層、兩層、三層...里面做最合理的選擇,可以用交叉驗證集做模型選擇。