當我們運用訓練好了的模型來預測未知數據的時候發現有較大的誤差,我們下一步可以做什麼?
1.獲得更多的訓練實例——通常是有效的,但代價較大,下面的方法也可能有效,可考慮先採用下面的幾種方法。
2.嘗試減少特徵的數量
3.嘗試獲得更多的特徵
4.嘗試增加多項式特徵
5.嘗試減少歸一化程度λ
6.嘗試增加歸一化程度λ
我們不應該隨機選擇上面的某種方法來改進我們的算法,而是運用一些機器學習診斷法來幫助我們知道上面哪些方法對我們的算法是有效的。通常會從以下幾個角度入手,差不一定是數據集越大效果越好。
一. 算法的性能評估:
a. 評估假設函數是否過按擬合?
對h(x)作圖是一種方法,通常特徵量多的時候,作圖基本不可能。
把數據分爲訓練集和測試集7/3分;
b. 模型選擇和交叉驗證集
假如要在多個不同的二項式模型之間選擇,需要引入交叉驗證集來輔助選擇模型。即訓練集/交叉驗證集/測試集爲6/2/2分。
模型選擇的方法爲:
1.使用訓練集訓練出10個模型
2.用10個模型分別對交叉驗證集計算得出交叉驗證誤差(代價函數的值)
3.選取代價函數值最小的模型
4.用步驟3中選出的模型對測試集計算得出推廣誤差(代價函數的值)
c. 診斷偏差和方差
對於訓練集,當d較小時,模型擬合程度更低,誤差較大;隨着d的增長,擬合程度提高,誤差減小。
對於交叉驗證集,當d較小時,模型擬合程度低,誤差較大;但是隨着d的增長,誤差呈現先減小後增大的趨勢,轉折點是我們的模型開始過擬合訓練數據集的時候。
如果我們的交叉驗證集誤差較大,我們如何判斷是方差還是偏差呢?
訓練集誤差和交叉驗證集誤差近似時:偏差/欠擬合
交叉驗證集誤差遠大於訓練集誤差時:方差/過擬合
d. 歸一化和偏差/方差
迴歸中爲了防止過擬合,引入了lambda。但它的值過大或過小,對結果也會有一定影響。
我們選擇一系列的想要測試的λ值,通常是0-10 之間的呈現2倍關係的值(如:0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10共12個)。
選擇λ的方法爲:
1.使用訓練集訓練出12個不同程度歸一化的模型
2.用12模型分別對交叉驗證集計算的出交叉驗證誤差
3.選擇得出交叉驗證誤差最小的模型
4.運用步驟3中選出模型對測試集計算得出推廣誤差,我們也可以同時將訓練集和交叉驗證集模型的代價函數誤差與λ的值繪製在一張圖表上:
l 當λ較小時,訓練集誤差較小(過擬合)而交叉驗證集誤差較大
l 隨着λ的增加,訓練集誤差不斷增加(欠擬合),而交叉驗證集誤差則是先減小後增加
e. 學習曲線
學習曲線是學習算法的一個很好的合理檢驗(sanity check)。學習曲線是將訓練集誤差和交叉驗證集誤差作爲訓練集實例數量(m)的函數繪製的圖表。
高偏差/欠擬合的情況下,增加數據到訓練集不一定能有幫助。
高方差/過擬合的情況下,增加更多數據到訓練集可能可以提高算法效果。
二. 總結:
針對本文開頭列的幾種方法,可以在分析確定發球高偏差不是高方差後再針對性地入手優化。本描述對神經網絡也同樣適用。
- 嘗試獲得更多的特徵——解決高偏差
- 嘗試增加多項式特徵——解決高偏差
- 嘗試減少歸一化程度λ——解決高偏差
- 獲得更多的訓練實例——解決高方差
- 嘗試減少特徵的數量——解決高方差
- 嘗試增加歸一化程度λ——解決高方差