演算法工程師修仙之路:吳恩達機器學習(十一)
吳恩達機器學習筆記及作業程式碼實現中文版
第八章 應用機器學習的建議
決定下一步做什麼
-
獲得更多的訓練例項——通常是有效的, 但代價較大, 下面的方法也可能有效, 可考慮先採用下面的幾種方法:
- 嘗試減少特徵的數量;
- 嘗試獲得更多的特徵;
- 嘗試增加多項式特徵;
- 嘗試減少正則化程度 ;
- 嘗試增加正則化程度 。
-
我們不應該隨機選擇上面的某種方法來改進我們的演算法,而是運用一些機器學習診斷法來幫助我們知道上面哪些方法對我們的演算法是有效的。“診斷法”的意思是:這是一種測試法,你通過執行這種測試,能夠深入瞭解某種演算法到底是否有用。這通常也能夠告訴你,要想改進一種演算法的效果,什麼樣的嘗試,才是有意義的。
評估假設
-
當我們確定學習演算法的引數的時候,我們考慮的是選擇參量來使訓練誤差最小化,但是僅僅是因為這個假設具有很小的訓練誤差,並不能說明它就一定是一個好的假設函式,所以這推廣到新的訓練集上是不適用的。
-
假設函式過擬合檢驗
- 為了檢驗演算法是否過擬合,我們將資料分成訓練集和測試集,通常用70%的資料作為訓練集,用剩下30%的資料作為測試集。
- 很重要的一點是訓練集和測試集均要含有各種型別的資料, 通常我們要對資料進行“洗牌”,然後再分成訓練集和測試集。
- 測試集評估在通過訓練集讓我們的模型學習得出其引數後,對測試集運用該模型,我們有兩種方式計算誤差:
- 對於線性迴歸模型,我們利用測試集資料計算代價函式 ;
- 對於邏輯迴歸模型,我們除了可以利用測試資料集來計算代價函式外,對於每一個測試集例項可計算誤分類的比率,然後對計算結果求平均。
模型選擇和交叉驗證集
-
假設我們要在10個不同次數的二項式模型之間進行選擇,顯然越高次數的多項式模型越能夠適應我們的訓練資料集,但是適應訓練資料集並不代表著能推廣至一般情況,我們應該選擇一個更能適應一般情況的模型。
-
我們需要使用交叉驗證集來幫助選擇模型。即使用 60%的資料作為訓練集,使用 20%的資料作為交叉驗證集,使用 20%的資料作為測試集。
-
模型選擇的方法為:
- 使用訓練集訓練出10個模型;
- 用 10 個模型分別對交叉驗證集計算得出交叉驗證誤差(代價函式的值);
- 選取代價函式值最小的模型;
- 用步驟 3 中選出的模型對測試集計算得出推廣誤差(代價函式的值)。
診斷偏差與方差
-
當你執行一個學習演算法時,如果這個演算法的表現不理想,那麼多半是出現兩種情況:要麼是偏差比較大,要麼是方差比較大。換句話說,出現的情況要麼是欠擬合,要麼是過擬合問題。
-
高偏差和高方差的問題基本上來說是欠擬合和過擬合的問題。
-
我們通常會通過將訓練集和交叉驗證集的代價函式誤差與多項式的次數繪製在同一張圖表上來幫助分析:
- 對於訓練集,當 較小時,模型擬合程度更低,誤差較大;隨著 的增長,擬合程度提高,誤差減小。
- 對於交叉驗證集,當 較小時,模型擬合程度低,誤差較大;但是隨著 的增長,誤差呈現先減小後增大的趨勢,轉折點是我們的模型開始過擬合訓練資料集的時候。
- 如果我們的交叉驗證集誤差較大:
- 訓練集誤差和交叉驗證集誤差近似時則偏差(欠擬合);
- 交叉驗證集誤差遠大於訓練集誤差時則方差(過擬合);
正則化和偏差/方差
-
在我們在訓練模型的過程中,一般會使用一些正則化方法來防止過擬合。但是我們可能會正則化的程度太高或太小了,即我們在選擇 λ 的值時也需要思考與剛才選擇多項式模型次數類似的問題。
-
我們選擇一系列的想要測試的 值,通常是 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 個)。我們同樣把資料分為訓練集、交叉驗證集和測試集。
-
選擇 的方法為:
- 使用訓練集訓練出 12 個不同程度正則化的模型;
- 用 12 個模型分別對交叉驗證集計算的出交叉驗證誤差;
- 選擇得出交叉驗證誤差最小的模型;
- 運用步驟 3 中選出模型對測試集計算得出推廣誤差,我們也可以同時將訓練集和交叉驗證集模型的代價函式誤差與 λ 的值繪製在一張圖表上:
- 當 較小時,訓練集誤差較小(過擬合)而交叉驗證集誤差較大;
- 隨著 的增加,訓練集誤差不斷增加(欠擬合),而交叉驗證集誤差則是先減小後增加。
學習曲線
-
學習曲線是學習演算法的一個很好的合理檢驗(sanity check)。學習曲線是將訓練集誤差和交叉驗證集誤差作為訓練集例項數量(m)的函式繪製的圖表。
-
當訓練較少行資料的時候,訓練的模型將能夠非常完美地適應較少的訓練資料,但是訓練出來的模型卻不能很好地適應交叉驗證集資料或測試集資料。
-
在高偏差/欠擬合的情況下,增加資料到訓練集不一定能有幫助。
-
假設我們使用一個非常高次的多項式模型,並且正則化非常小,當交叉驗證集誤差遠大於訓練集誤差時,往訓練集增加更多資料可以提高模型的效果。
-
在高方差/過擬合的情況下,增加更多資料到訓練集可能可以提高演算法效果。
決定接下來做什麼
-
各種嘗試的結果:
- 獲得更多的訓練例項:解決高方差;
- 嘗試減少特徵的數量:解決高方差;
- 嘗試獲得更多的特徵:解決高偏差;
- 嘗試增加多項式特徵:解決高偏差;
- 嘗試減少正則化程度 λ:解決高偏差;
- 嘗試增加正則化程度 λ:解決高方差。
-
神經網路的方差和偏差:
- 使用較小的神經網路,類似於引數較少的情況,容易導致高偏差和欠擬合,但計算代價較小;
- 使用較大的神經網路,類似於引數較多的情況,容易導致高方差和過擬合,雖然計算代價比較大,但是可以通過正則化手段來調整而更加適應資料;
- 通常選擇較大的神經網路並採用正則化處理會比採用較小的神經網路效果要好。
- 對於神經網路中的隱藏層的層數的選擇,通常從一層開始逐漸增加層數,為了更好地作選擇,可以把資料分為訓練集、交叉驗證集和測試集,針對不同隱藏層層數的神經網路訓練神經網路, 然後選擇交叉驗證集代價最小的神經網路。