【原】Coursera—Andrew Ng機器學習—課程筆記 Lecture 10—Advice for applying machine learning
Lecture 10—Advice for applying machine learning
10.1 如何除錯一個機器學習演算法?
有多種方案:
1、獲得更多訓練資料;2、嘗試更少特徵;3、嘗試更多特徵;4、嘗試新增多項式特徵;5、減小 λ;6、增大 λ
為了避免一個方案一個方案的嘗試,可以通過評估機器學習演算法的效能,來進行除錯。
機器學習診斷法 Machine learning diagnostic 的定義:
10.2 評估一個假設
想要評估一個演算法是否過擬合
(一)首先,劃分測試集和訓練集
如果資料已經隨機分佈了, 可以選擇前70%資料作為訓練集,剩下的30%作為測試集;
如果資料不是隨機分佈的,最好先打亂,或者隨機選擇70%資料作為訓練集,剩下的30%作為測試集
(二)然後,計算測試誤差
1、對於迴歸問題。例如線性迴歸。首先使用訓練集進行訓練,然後使用測試集計算測試誤差:
2、對於分類問題。例如邏輯迴歸,也是一樣的:
有一種更易理解的測試誤差定義方式,叫做 錯分率 Misclassification error (也叫0/1錯分率):
err(hθ(x),y) 的意思是:如果分類預測結果 hθ(x) 錯誤,則 err 值為1;如果 hθ(x) 預測正確,則 err 值為0。 整體的測試誤差就是所有 err 值的加和。
10.3 模型選擇 和 "訓練/驗證/測試"集
產生過擬合的一個原因是:僅僅在測試集合上除錯 θ 得到的訓練誤差,通常不能作為對實際泛化誤差的一個好的估測。
那麼究竟應該選擇幾次多項式來作為我們的模型呢?
假設針對 x 有10個模型:一次方程 直到 十次方程。對每個多項式,在訓練集上訓練出 θ 。然後分別使用 test 集合計算誤差,分別得到 Jtest(θ(1)),...Jtest(θ(10)),發現 Jtest(θ(5))的值最小,因此選擇 d=5 這個模型。
但這裡有個問題:我們選的這個模型,就是能夠最好地擬合測試集的引數d的值及多項式的度。因此,再使用同樣的測試集來評價假設,顯然很不公平,很可能導致過擬合。
所以,我們改為將資料集分為 6:2:2 三部分:training set、cross validation set(cv, 或者直接簡稱validation set)、test set
每個集合上的誤差計算公式:
現在我們是用 cv 集合計算誤差,分別得到 Jcv(θ(1)),...Jcv(θ(10)),發現 Jcv(θ(4)) 的值最小,因此選擇 d=4 這個模型,最後在 test 集合上進行預測,能得到一個更理想的泛化誤差。
10.4 檢驗誤差和方差 Diagnosing bias vs. variance
模型表現不好,通常有兩種情況:
(1) 誤差 bias 過大,導致欠擬合 underfitting;
(2) 方差 variance 過大,導致過擬合 overfitting
使用多項式的度 d 作為橫軸,在訓練集和cv集上分別計算 J(θ),得到曲線:
下面說如何根據兩條曲線判斷模型是高誤差(欠擬合)、還是高方差(過擬合)。
(1) 先看曲線左邊,當 d=1 ,訓練集和cv集的誤差都很大,說明欠擬合
(2) 再看曲線右邊,當 d=4 ,訓練集誤差很小、cv集誤差遠大於訓練誤差,說明在訓練集上過擬合
10.5 正規化 和 偏差/方差
考慮正則化的線性迴歸模型:
(1) 當 λ 過大,θ 被懲罰後會變得很小、接近於0,最後方程只剩下 θ0 這一項,成為一條直線,導致高偏差bias、欠擬合。
(2) 當 λ 過小,正則項不起作用,導致高方差 variance、過擬合。
那怎麼選擇 λ 的值呢?
首先,當我們定義每個集合上的誤差函式時,不考慮 λ。
然後按照步長兩倍的方式遞增 λ,針對每個 λ 訓練θ。然後分別計算對應的Jcv(θ),得到最小的Jcv(θ(5))。然後在 test 集合上進行測試。
現在我們看一下,λ 的大小對損失函式的影響。
(1) 先看曲線左邊,當 λ 很小 ,Jcv(θ) 的值遠大於 Jtrain(θ),說明過擬合
(2) 再看曲線右邊,當 λ 很大 ,Jcv(θ) 和 Jtrain(θ) 都很大,說明欠擬合
10.6 學習曲線
m指訓練樣本的個數,曲線顯示不同的m對於J(θ)的影響
高偏差 bias、欠擬合:
高方差 variance、過擬合。兩個曲線會有一個很大的gap:
10.7 接下來
每種解決方案對應的問題如下(箭頭右側指向的是表現出的問題,左側是解決方案):
對於神經網路,開始可以嘗試一個相對比較簡單的神經網路模型,計算量小。
如果使用大型神經網路,使用正則化來修正過擬合。
如果不知道選擇幾層hidden layer,可以將資料分為三個資料集之後,分別做測試。