1. 程式人生 > >Stanford機器學習-應用機器學習的建議

Stanford機器學習-應用機器學習的建議

1. Deciding what to try next

在這裡插入圖片描述 前面我們以及學習了線性迴歸、Logistic迴歸和神經網路等不同的機器學習演算法,那麼在實際應用中,如果我們需要設計一個機器學習系統 或是想要改進現存的某個系統的效能時,選擇一條合適的道路,也就是選擇一些適合與實際問題的方法,將達到事半功倍的效果。 在這裡插入圖片描述 那麼我們以前面學習的預測房價的例子來看如何選擇。假設我們已經完成了正則化的線性迴歸,對應的代價函式J(θ)如圖所示,我們需要做的就是最小化代價函式,得到學習的引數θ。 接下來將學習到的模型應用到測試集上,看誤差的大小。如果在訓練集上擬合的很好,而到了測試集上,誤差卻很大,那麼我們如何來改進演算法,使其在測試集上仍然取得很好的擬合效果呢?

我們可能會有如下的想法: • 獲得更多的資料 • 嘗試更小的特徵集 • 嘗試得到額外的特徵 • 嘗試增加特徵多項式的特徵次項 • 增大或是減小懲罰係數 λ

但是很多人在選擇辦法的時候都是憑自己的感覺的,總是隨便從一些方法中選擇一個去做,可能做了很長時間的工作才發現走的是一條不通的路,這樣浪費人力物力和時間。 實際上,我們可以選擇一些方法來排除不好的辦法,留下那些可行的,從而最終達到我們想要的目的。 在這裡插入圖片描述

這就是所說的“機器學習診斷法”,它可以診斷我們的學習演算法,並給出一些提升效能的意見,它在實際的應用中將會花很多時間,但是相比走彎路浪費的時間還是值得的。

2. Evaluating a hypothesis

在這裡插入圖片描述 這節課學習如何來衡量我們針對某一具體問題所提出的假設是否是一個好的假設,從而避免訓練過程的欠擬合和過擬合問題。在學習過程中,我們可能會得到一個很小的訓練誤差,那麼這是否就是好的? 其實並不一定,可能是發生了過擬合問題,這樣的話模型的泛化能力就很差了。 在這裡插入圖片描述 我們還是來以房價預測的例子來看。假設我們根據得到的資料還有如圖所示的多個特徵,如果選擇的特徵足夠少時,我們可以通過描點劃線的方式直觀上看是否發生過擬合,但是如果所選的特徵很多時, 這樣的方法就顯得不可操作了,所以我們需要找到一種可以很好的評估假設函式是否會發生過擬合。

在這裡插入圖片描述 我們進行我們的檢測,我們通常將資料集分為訓練集和測試集兩部分,比例通常為7:3,如果我們的資料本身就是無序的,我們可以直接按段取,但如果本身是有序的,我們就需要隨機取,保證資料之間的相關性小,我們使用上圖右邊的標記來表示資料。

測試集評估在通過訓練集讓我們的模型學習得出引數後,在測試集上應用該模型,來計算誤差。 在這裡插入圖片描述 對於線性迴歸來說,我們計算測試資料上的代價函式Jtest(θ)

在這裡插入圖片描述 對於Logistic迴歸模型來說,我們除了計算上圖所示的代價函式Jtest(θ)外,我們還可以計算分類的錯誤率,對於每一個測試資料來說,計算如下: 在這裡插入圖片描述 然後求平均計算結果。

3. Model selection and training/validation/test sets

在這裡插入圖片描述 在這裡插入圖片描述 在前面我們的例子中,假設我們的hθ(x)函式多項式最高次是4次,在訓練集上我們可以得到一個很小的誤差,但是在測試集上,也許結果就不如我們願了。 在這裡插入圖片描述 我們知道多項式的次數越高,對於資料的擬合效果就越好,但是由於會發生過擬合現象,所以它的泛化能力對應就會下降。假設我們針對如上圖所示的10個模型進行選擇, 我們可以對每一個假設函式計算一個代價函式值,通過比較,我們選擇d=5(d表示多項式的次數)的函式。但是在測試集上是否也能如此的好呢?為此我們需要計算測試集上的代價。 在這裡插入圖片描述 為了是我們的模型更能適應一般的情況,我們這裡使用交叉驗證,如上圖所示,我們將資料集分為訓練集、交叉驗證集和測試集,比例通常為6:2:2。 計算的公式如下,也就是分別計算之上的代價函式的值。 在這裡插入圖片描述 在這裡插入圖片描述 對應的模型的選擇方法為: 1. 使用訓練集訓練出10個模型 2. 用10個模型分別對交叉驗證級計算交叉驗證誤差 3. 選擇代價函式最小的模型 4. 用步驟3的選擇的模型在測試集上計算泛化誤差

4. Diagnosing bias vs. variance

在這裡插入圖片描述

當我們的演算法在資料集上表現的不好時,要麼就是偏差比較大,要麼就是方差比較大,或是二者皆有,換種說法就是要麼發生欠擬合要麼發生過擬合。 判斷實際的情況到底是哪一種,對於我們之後的改進工作至關重要。 在這裡插入圖片描述 在上面的資料集上,當我們選擇不同的假設函式時,擬合的效果就會不同,第一個時欠擬合,也就是偏差較高;第二個擬合效果很好;第三個是發生了過擬合,也就是方差比較大。

在這裡插入圖片描述 我們的代價函式如上圖所示,用來計算誤差值,如果將得到的不同的d的誤差值描點劃線的話,可以得到如圖所示的曲線圖。

在這裡插入圖片描述 假設我們的學習演算法並不如我們想象中那樣好,那麼到底是哪一種原因呢,通過分析我們得到的曲線我們可以得到,當d較小時,就會發生欠擬合現象,這時我們在訓練集上的代價函式值會很高,交叉驗證誤差和和訓練誤差差不多相等,這時的偏差較大;當我們的d過大時,在訓練集上的擬合效果就會很好,但是由於泛化能力下降,在交叉驗證集上的誤差就會很大,這時的方差就會偏大。

5. Regularization and bias/variance

在這裡插入圖片描述 在前面的演算法中,我們使用正則化來避免過擬合現象的發生,但是當我們選擇不同的 λ時,對於歸一化的效果影響很大。 在這裡插入圖片描述 當我們的 λ取的很大時,Θ1往後的引數約等於0,此時只有θ0 ,那麼擬合的線就是一條平行與x軸的直線,此時發生欠擬合,偏差較大;當我們的λ合適時,擬合的效果就會很好; 當我們的λ過小時,發生過擬合現象,此時方差較大。 在這裡插入圖片描述 那麼如何知道哪一個 λ是比較合適的呢?我們通常按照一定的步長來嘗試一系列的 λ,根據選擇的函式,計算不同的代價函式值,具體的方法為: 1. 使用訓練集訓練出12個不同程度歸一化模型 2. 用12個模型分別對交叉驗證級計算誤差值 3. 選擇的出交叉誤差最小的模型 4. 根據上面得到的模型計算泛化誤差,同時將訓練集和交叉驗證集的代價函式誤差和λ畫在一張圖上。 在這裡插入圖片描述

在畫出的圖上,我們就可以看出在取不同的λ時我們模型的偏差值和方差值的情況: • 當λ較小時,我們的訓練誤差較小,但是交叉驗證的誤差很大 • 隨著λ的增大,訓練誤差逐漸變大,交叉驗證誤差是先減後增。

6. Learning curves

在這裡插入圖片描述 那麼有沒有一種工具可以在做我們上面想做的事呢?那就是學習曲線,它可以用來判斷我們的學習演算法是否存在偏差或是方差問題。 在這裡插入圖片描述 學習曲線是將訓練集誤差和交叉驗證集誤差作為m的函式繪製的圖,我們不斷的增大m來看訓練誤差和交叉驗證誤差的情況。。

在這裡插入圖片描述 那麼如何利用學習曲線來識別高偏差呢?假設我們的模型如圖右所示,我們試圖通過一條直線來擬合數據,當我們的資料較少時,我們可以看出效果似乎還不錯,但是資料較多時,效果就不是很好了。 通過學習曲線我們可以看出,如果我們的學習演算法偏差很高時,即使增加訓練資料的量,對於效果的提升並不好。 在這裡插入圖片描述 同樣我們如何識別高方差呢?假設我們的模型的多項式的次數很高時,而且歸一化程度非常小,當交叉驗證誤差遠大於訓練集誤差時,增加訓練資料的量,可以有效的提高模型的效果。

7. Deciding what to try next

在這裡插入圖片描述 前面我們學習瞭如何評價一個學習演算法,如何選擇合適的模型,如何看偏差和方差問題。那麼不同的方法是怎麼樣來改進模型效果的呢? 在這裡插入圖片描述 在最開始的例子,我們看一下具體情況具體使用哪一種方法: • 獲得更多的訓練例項–解決高方差 • 嘗試減少特徵的數量–解決高方差 • 嘗試獲取更多的特徵–解決高偏差 • 嘗試增加多項式特徵–解決高偏差 • 嘗試減小歸一化程度–解決高偏差 • 嘗試增加歸一化程式–解決高方差

在這裡插入圖片描述 那麼在神經網路中,如果我們使用較小的神經網路時,容易導致高偏差和欠擬合;但是使用比較大的神經網路時,除了計算量很大外,很容易發生高方差和過擬合。 根據經驗,通常選擇較大的神經網路並採用歸一化處理會比採用較小的的神經網路效果更好。對於神經網路中隱藏層的層數的選擇,通常從一層開始逐漸增加層數,為了更好的選擇,我們同樣可以將資料分為訓練集、交叉驗證集和測試集,針對不同的層數訓練模型,然後選擇交叉驗證集最小的神經網路。