1. 程式人生 > >吳恩達機器學習筆記(十)-應用機器學習的建議

吳恩達機器學習筆記(十)-應用機器學習的建議

第十一章 應用機器學習的建議

決定下一步做什麼

    當要設計機器學習系統時,如何選擇一條最適合最高效的道路?

    假設你已經實現了正則化的線性迴歸來預測房屋價格,然而,當在一組新的測試集上使用該假設時,在預測上出現了不能接受的錯誤,接下來會做什麼呢?也就是說當除錯學習演算法時,當面對測試集演算法效果不佳時,會怎麼做呢?

    (1)採集更多的訓練樣本;(有時候並沒有效果)

    (2)嘗試選用更少的特徵;

    (3)嘗試獲取更多的特徵;

    (4)嘗試增加特徵多項式

    (5)嘗試減小或增大正則化引數的值。

    由此引出機器學習診斷法:這是一種測試法,通過執行這種測試能夠了解演算法在哪裡出了問題,也能告訴你要想改進一種演算法的效果,什麼樣的嘗試才是有意義的,這些診斷法的執行與實現需要花很多時間來理解和實現。

評估假設

    在這一節中將介紹怎麼評價演算法學習得到的假設。

    為了確保可以評價假設函式,需要將訓練集分成兩部分,第一部分成為訓練集,第二部分成為測試集。

    典型按照7:3比例,如下:

    1)訓練和測試線性迴歸的步驟:

        1. 對訓練集進行學習得到引數θ(具體來說就是最小化訓練誤差)。

        2. 計算出測試誤差:

    這是線性迴歸時測試誤差的定義。

    2)訓練和測試線性迴歸的步驟:

        1. 從訓練資料中學習得到引數θ。

        2. 計算出測試誤差:

        3. 錯誤分類(0/1分類錯誤)

模型選擇、訓練、驗證、測試集

    對於過擬合問題,在過擬閤中的學習演算法即便對訓練集擬合的很好,也並不代表它是一個很好的假設。通常來說,這就是為什麼訓練集誤差不能用來判斷該假設對新樣本的擬合好壞;具體來講,如果用這些引數來擬合訓練集,就算假設在訓練集上表現地很好,也並不意味著該假設對訓練集中沒有的新樣本有多好的泛化能力。更為普遍的規律,如果引數對某個資料集擬合的很好(比如訓練集或者其他資料集),那麼用同一資料集計算得到的誤差(比如訓練誤差)並不能很好地估計出實際的泛化誤差,即該假設對新樣本的泛化能力。

    (1)模型選擇問題

    在多項式迴歸時,該如何選擇次數作為假設模型呢?

    如何從這些模型中選出最好的一個,應該看哪個模型有最小的測試誤差。

    假設對這個例子,選擇五次多項式模型,看一看這個模型的泛化能力怎麼樣,可以觀察這個五項式對測試集的擬合情況,但問題是這樣仍然不能公平地評估出這個假設的泛化能力。原因:擬合了一個額外的引數d,也就是多項式的次數,用測試集擬合了引數d,選擇了一個能最好地擬合測試集的引數d的值,因此,引數向量θ5在測試集上的效能很可能是對泛化誤差過於樂觀的估計。

    所以為了解決模型選擇出現的問題,通常會採用下面的方法來評估假設:

    給定一個數據集,把它分成三個部分:訓練集、交叉驗證集、測試集,它們的比例為3:1:1,用交叉驗證集來作為評判選擇的標準,選擇合適的模型,而測試集則是作為演算法效能的評判

    定義訓練誤差:

    定義交叉驗證誤差:

    定義測試誤差:

    所以對於上述的模型選擇,要用交叉驗證集來進行選擇而不是原來的測試集:

    在如今的機器學習應用中,的確有很多人用測試集來選擇模型,通過測試集來選擇多項式的次數,然後仍在測試集上計算誤差,把它當作理想的泛化誤差,這並不是一個好的方法。將資料集分成訓練集、驗證集、測試集是更好的選擇。

診斷偏差與方差

    當執行一個學習演算法時,如果這個演算法表現不理想,往往是出現兩種情況:

    (1)偏差比較大(欠擬合問題)

    (2)方差比較大(過擬合問題)

    這一節中將更深入探討偏差和方差問題,弄清楚它們對改進學習演算法的效果是非常重要的。

    上圖中分別表示了高偏差、剛好、高方差的情況。

    根據訓練誤差和驗證誤差函式:

    從圖中可以看出,隨著多項式次數的增大,訓練集上的偏差逐漸變小,而交叉驗證集上的偏差在減小到一定程度後開始升高。

    診斷偏差和方差:

    假設得出一個學習演算法,而這個演算法並沒有表現地像你期望的那麼好,如果交叉驗證誤差或者測試集誤差都很大,如何判斷此時學習演算法出現了高偏差問題還是高方差問題?

    如果有高偏差(欠擬合問題),發現交叉驗證誤差和訓練誤差都會很大,所以如果演算法有偏差問題,它的訓練誤差將會比較大,交叉驗證誤差也會比較大且接近訓練誤差;如果有高方差(過擬合問題),發現訓練誤差會很小,代表訓練集合擬合得非常好,而交叉驗證誤差會遠遠大於訓練誤差。

正則化和偏差、方差

    正則化可以有效地防止過擬合,但正則化跟演算法的偏差和方差有什麼關係呢?

    這一節中將深入探討偏差和方差與演算法正則化之間的關係,以及正則化是如何影響偏差和方差。

    在加入正則化項後根據的λ不同所得圖如下

    同樣可以通過在交叉驗證集上的測試選擇較好的λ

    如何自動地選擇出一個最適合的正則化引數λ呢?

    模型:

    通常的做法,選取一系列想要嘗試的λ,首先可能考慮不使用正則化以及一系列可能會試的值,如下:

 得到這12組模型之後,接下來要做的是選用第一個模型,然後最小化代價函式,得到某個引數向量

    繼續上述步驟,會得到引數:。然後用交叉驗證集來評價它們,即測出每一個引數在交叉驗證集上的平均誤差平方和,

    然後選擇12模型中平均誤差平方最小的那個模型作為最終選擇。

    所以這就是模型選擇在選取正則化引數時λ的應用。

    接下來探討當正則化引數變化時,交叉驗證誤差和訓練誤差怎麼變化,如圖:

    這裡的圖顯得有些簡單和理想化,對於真實的資料,得到的曲線可能比這更復雜,但是通過這樣的圖可以更好地理解各種情況,也有助於確認選擇的正則化引數值λ是否合適。

學習曲線

    學習曲線是一種很好的工具來判斷某一個學習演算法是否處於偏差、方差問題,或者二者都有。

    根據樣本的大小與誤差的關係我們可以畫出一般的學習曲線模樣:

    從圖中可以看出隨著m的增大,平均訓練誤差越來越大,相反地,交叉驗證誤差越來越小。

    假設學習演算法出現高偏差的問題:

    交叉驗證誤差減小將會很快變為水平而不再變化,只要達到一定數量的訓練樣本,這樣能得到最擬合數據的直線;訓練誤差會逐漸增大,最後接近交叉驗證誤差,這就是學習演算法處於高偏差情形時的學習曲線的大致走向。

    結論:如果一個學習演算法有高偏差,隨著增加訓練樣本,發現交叉驗證誤差不會明顯下降了,基本變成水平,所以如果學習演算法正處於高偏差的情形,選用更多的訓練集資料對於改善演算法表現並不能起到一定作用

    假設學習演算法出現高方差的問題:

    結論:如果考慮增大訓練集的樣本數,交叉驗證誤差將會一直下降,所以在高方差的情形中,使用更多的訓練集資料對改進演算法是有幫助的。

決定接下來做什麼

    哪些方法有助於改進學習演算法的效果,可以看一下之前提到過的問題,看看它們適合什麼的模型:

    本章回顧:

    當在進行神經網路擬合的時候,可以選擇任何一種。

    (1)一個相對比較簡單的神經網路模型(只有一個隱藏層且隱藏單元數較少),這樣的模型引數就不會很多,容易出現欠擬合,這種小型的神經網路最大的優勢在於計算量較小;

    (2)一個擬合較大型的神經網路模型(有多個隱藏層且隱藏單元數較多),這樣的模型引數一般很多,更容易出現過擬合,這種結構的一大劣勢在於當有大量神經元時這種結構會有很大的計算量,最主要的潛在問題還是它容易出現過擬合現象。