斯坦福第十課:應用機器學習的建議(Advice for Applying Machine Learning)

來源:互聯網
上載者:User

標籤:

10.1  決定下一步做什麼

10.2  評估一個假設

10.3  模型選擇和交叉驗證集

10.4  診斷偏差和方差

10.5  歸一化和偏差/方差

10.6  學習曲線

10.7  決定下一步做什麼

 

 10.1  決定下一步做什麼   

     到目前為止,我們已經介紹了許多不同的學習演算法,如果你一直跟著這些視頻的進度學習,你會發現自己已經不知不覺地成為一個瞭解許多先進機器學習技術的專家了。

     然而,在懂機器學習的人當中依然存在著很大的差距,一部分人確實掌握了怎樣高效有力地運用這些學習演算法。而另一些人他們可能對我馬上要講的東西,就不是那麼熟悉了。他 們可能沒有完全理解怎樣運用這些演算法。因此總是把時間浪費在毫無意義的嘗試上。我想做 的是確保你在設計機器學習的系統時,你能夠明白怎樣選擇一條最合適、最正確的道路。因 此,在這節視頻和之後的幾段視頻中,我將向你介紹一些實用的建議和指導,協助你明白怎 樣進行選擇。具體來講,我將重點關注的問題是假如你在開發一個機器學習系統,或者想試 著改進一個機器學習系統的效能,你應如何決定接下來應該選擇哪條道路?為瞭解釋這一問 題,我想仍然使用預測樓價的學習例子,假如你已經完成了正則化線性迴歸,也就是最小化 代價函數 J 的值,假如,在你得到你的學習參數以後,如果你要將你的假設函數放到一組新的房屋樣本上進行測試,假如說你發現在預測樓價時產生了巨大的誤差,現在你的問題是要想改進這個演算法,接下來應該怎麼辦? 實際上你可以想出很多種方法來改進這個演算法的效能,其中一種辦法是使用更多的訓練樣本。具體來講,也許你能想到通過電話調查或上門調查來擷取更多的不同的房屋出售資料。 遺憾的是,我看到好多人花費了好多時間想收集更多的訓練樣本。他們總認為,要是我有兩倍甚至十倍數量的訓練資料,那就一定會解決問題的是吧?但有時候獲得更多的訓練資料實 際上並沒有作用。在接下來的幾段視頻中,我們將解釋原因。

     我們也將知道怎樣避免把過多的時間浪費在收集更多的訓練資料上,這實際上是於事無補的。另一個方法,你也許能想到的是嘗試選用更少的特徵集。因此如果你有一系列特徵比 如 x1x2 x3 等等。也許有很多特徵,也許你可以花一點時間從這些特徵中仔細挑選一小部分來防止過擬合。或者也許你需要用更多的特徵,也許目前的特徵集,對你來講並不是很有協助。

     你希望從擷取更多特徵的角度來收集更多的資料,同樣地,你可以把這個問題擴充為一個很 大的項目,比如使用電話調查來得到更多的房屋案例,或者再進行土地測量來獲得更多有關, 這塊土地的資訊等等,因此這是一個複雜的問題。同樣的道理,我們非常希望在花費大量時 間完成這些工作之前,我們就能知道其效果如何。我們也可以嘗試增加多項式特徵的方法,比如 x1 的平方,x2 的平方,x1x2 的乘積,我們可以花很多時間來考慮這一方法,我們也可以 考慮其他方法減小或增大正則化參數 lambda 的值。我們列出的這個單子,上面的很多方法 都可以擴充開來擴充成一個六個月或更長時間的項目。遺憾的是,大多數人用來選擇這些方法的標準是憑感覺的,也就是說,大多數人的選擇方法是隨便從這些方法中選擇一種,比如 他們會說 “噢,我們來多找點資料吧”,然後花上六個月的時間收集了一大堆資料,然後 也許另一個人說:“好吧,讓我們來從這些房子的資料中多找點特徵吧”。我很遺憾不止一 次地看到很多人花了至少六個月時間來完成他們隨便選擇的一種方法,而在六個月或者更長 時間後,他們很遺憾地發現自己選擇的是一條不歸路。幸運的是,有一系列簡單的方法能讓 你事半功倍,排除掉單子上的至少一半的方法,留下那些確實有前途的方法,同時也有一種 很簡單的方法,只要你使用,就能很輕鬆地排除掉很多選擇,從而為你節省大量不必要花費 的時間。最終達到改進機器學習系統效能的目的假設我們需要用一個線性迴歸模型來預測房 價,當我們運用訓練好了的模型來預測未知資料的時候發現有較大的誤差,我們下一步可以 做什嗎?

1. 獲得更多的訓練執行個體——通常是有效,但代價較大,下面的方法也可能有效,可考慮先採用下面的幾種方法。

2. 嘗試減少特徵的數量

3. 嘗試獲得更多的特徵

4. 嘗試增加多項式特徵

5. 嘗試減少歸一化程度 λ

6. 嘗試增加歸一化程度 λ

我們不應該隨機播放上面的某種方法來改進我們的演算法,而是運用一些機器學習診斷法 來協助我們知道上面哪些方法對我們的演算法是有效。

在接下來的兩段視頻中,我首先介紹怎樣評估機器學習演算法的效能,然後在之後的幾段 視頻中,我將開始討論這些方法,它們也被稱為"機器學習診斷法"。

“診斷法”的意思是: 這是一種測試法,你通過執行這種測試,能夠深入瞭解某種演算法到底是否有用。這通常也能夠告訴你,要想改進一種演算法的效果,什麼樣的嘗試,才是有意義的。在這一系列的視頻中 我們將介紹具體的診斷法,但我要提前說明一點的是,這些診斷法的執行和實現,是需要花 些時間的,有時候確實需要花很多時間來理解和實現,但這樣做的確是把時間用在了刀刃上, 因為這些方法讓你在開發學習演算法時,節省了幾個月的時間,因此,在接下來幾節課中,我 將先來介紹如何評價你的學習演算法。在此之後,我將介紹一些診斷法,希望能讓你更清楚。 在接下來的嘗試中,如何選擇更有意義的方法。

 

 

10.2   評估一個假設

在本節視頻中我想介紹一下怎樣用你學過的演算法來評估假設函數。在之後的課程中,我 們將以此為基礎來討論如何避免過擬合和欠擬合的問題。

 

      當我們確定學習演算法的參數的時候,我們考慮的是選擇參量來使訓練誤差最小化,有人 認為得到一個非常小的訓練誤差一定是一件好事,但我們已經知道,僅僅是因為這個假設具 有很小的訓練誤差,並不能說明它就一定是一個好的假設函數。而且我們也學習了過擬合假 設函數的例子,所以這推廣到新的訓練集上是不適用的。

       那麼,你該如何判斷一個假設函數是過擬合的呢?對於這個簡單的例子,我們可以對假 設函數 h(x) 進行畫圖,然後觀察圖形趨勢,但對於特徵變數不止一個的這種一般情況,還 有像有很多特徵變數的問題,想要通過畫出假設函數來進行觀察,就會變得很難甚至是不可 能實現。

      因此,我們需要另一種方法來評估我們的假設函數過擬合檢驗。 為了檢驗演算法是否過擬合,我們將資料分成訓練集和測試集,通常用 70%的資料作為訓練集,用剩下 30%的資料作為測試集。很重要的一點是訓練集和測試集均要含有各種類型的資料,通常我們要對資料進行“洗牌”,然後再分成訓練集和測試集。

 

測試集評估在通過訓練集讓我們的模型學習得出其參數後,對測試集運用該模型,我們 有兩種方式計算誤差:

1. 對於線性迴歸模型,我們利用測試集資料計算代價函數 J

2. 對於羅吉斯迴歸模型,我們除了可以利用測試資料集來計算代價函數外:

誤分類的比率,對於每一個測試集執行個體,計算:

然後對計算結果求平均。

10.3   模型選擇和交叉驗證集

假設我們要在 10 個不同次數的二項式模型之間進行選擇:

 

顯然越高次數的多項式模型越能夠適應我們的訓練資料集,但是適應訓練資料集並不代 表著能推廣至一般情況,我們應該選擇一個更能適應一般情況的模型。

我們需要使用交叉驗 證集來協助選擇模型。

即:使用 60%的資料作為訓練集,使用 20%的資料作為交叉驗證集,使用 20%的資料作為測試集

模型選擇的方法為:

1. 使用訓練集訓練出 10 個模型

2. 用 10 個模型分別對交叉驗證集計算得出交叉驗證誤差(代價函數的值)

3. 選取代價函數值最小的模型

4. 用步驟 3 中選出的模型對測試集計算得出推廣誤差(代價函數的值)

 

10.4   診斷偏差和方差

       當你運行一個學習演算法時,如果這個演算法的表現不理想,那麼多半是出現兩種情況:要 麼是偏差比較大,要麼是方差比較大。換句話說,出現的情況要麼是欠擬合,要麼是過擬合 問題。那麼這兩種情況,哪個和偏差有關,哪個和方差有關,或者是不是和兩個都有關?搞 清楚這一點非常重要,因為能判斷出現的情況是這兩種情況中的哪一種。其實是一個很有效 的指標,指引著可以改進演算法的最有效方法和途徑。在這段視頻中,我想更深入地探討 一下有關偏差和方差的問題,希望你能對它們有一個更深入的理解,並且也能弄清楚怎樣評 價一個學習演算法,能夠判斷一個演算法是偏差還是方差有問題,因為這個問題對於弄清如何改 進學習演算法的效果非常重要,高偏差和高方差的問題基本上來說是欠擬合和過擬合的問題。

     

 

我們通常會通過將訓練集和交叉驗證集的代價函數誤差與多項式的次數繪製在同一張 圖表上來協助分析:

 

對於訓練集,當 d 較小時,模型擬合程度更低,誤差較大;隨著 d 的增長,擬合程度提高,誤差減小。

對於交叉驗證集,當 d 較小時,模型擬合程度低,誤差較大;但是隨著 d 的增長,誤差 呈現先減小後增大的趨勢,轉折點是我們的模型開始過擬合訓練資料集的時候。

如果我們的交叉驗證集誤差較大,我們如何判斷是方差還是偏差呢? 根據上面的圖表, 我們知道:

訓練集誤差和交叉驗證集誤差近似時:偏差/欠擬合

交叉驗證集誤差遠大於訓練集誤差時:方差/過擬合

 

10.5   歸一化和偏差 / 方差

       在我們在訓練模型的過程中,一般會使用一些歸一化方法來防止過擬合。

       但是我們可能會歸一化的程度太高或太小了,即我們在選擇 λ 的值時也需要思考與剛才選擇多項式模型次數類似的問題。

 

      我們選擇一系列的想要測試的 λ  值,通常是 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 中選出模型對測試集計算得出推廣誤差,我們也可以同時將訓練集和交叉驗證集模型的代價函數誤差與 λ 的值繪製在一張圖表上:

 

 

•當 λ 較小時,訓練集誤差較小(過擬合)而交叉驗證集誤差較大

• 隨著 λ 的增加,訓練集誤差不斷增加(欠擬合),而交叉驗證集誤差則是先減小後增加

 

10.6   學習曲線

     學習曲線就是一種很好的工具,我經常使用學習曲線來判斷某一個學習演算法是否處於偏 差、方差問題。學習曲線是學習演算法的一個很好的合理檢驗(sanity check)。學習曲線是將訓練集誤差和交叉驗證集誤差作為訓練集執行個體數量(m)的函數繪製的圖表。

      即,如果我們有 100 行資料,我們從 1 行資料開始,逐漸學習更多行的資料。思想是: 當訓練較少行資料的時候,訓練的模型將能夠非常完美地適應較少的訓練資料,但是訓練出來的模型卻不能很好地適應交叉驗證集資料或測試集資料。

 

 

如何利用學習曲線識別高偏差/欠擬合: 作為例子,我們嘗試用一條直線來適應下面的 資料,可以看出,無論訓練集有多麼大誤差都不會有太大改觀:

也就是說在高偏差/欠擬合的情況下,增加資料到訓練集不一定能有協助。

如何利用學習曲線識別高方差/過擬合: 假設我們使用一個非常高次的多項式模型,並且歸一化非常小,

可以看出,當交叉驗證集誤差遠大於訓練集誤差時,往訓練集增加更多數 據可以提高模型的效果。

 

也就是說在高方差/過擬合的情況下,增加更多資料到訓練集可能可以提高演算法效果。

個人總結:隨著變數個數的增長,特徵越多,擬合程度提高,出現過擬合現象,誤差減小,方差減小。歸一化程度越小。

 

 10.7  決定下一步做什麼

我們已經介紹了怎樣評價一個學習演算法,我們討論了模型選擇問題,偏差和方差的問題。 那麼這些診斷法則怎樣協助我們判斷,哪些方法可能有助於改進學習演算法的效果,而哪些可 能是徒勞的呢?

讓我們再次回到最開始的例子,在那裡尋找答案,這就是我們之前的例子。回顧 1.1 中 提出的六種可選的下一步,讓我們來看一看我們在什麼情況下應該怎樣選擇:

1. 獲得更多的訓練執行個體——解決高偏差

2. 嘗試減少特徵的數量——解決高偏差

3. 嘗試獲得更多的特徵——解決高方差

4. 嘗試增加多項式特徵——解決高方差

5. 嘗試減少歸一化程度 λ——解決高方差

6. 嘗試增加歸一化程度 λ——解決高偏差 

 

神經網路的方差和偏差:

 

 

 

 

      使用較小的神經網路,類似於參數較少的情況,容易導致高方差和欠擬合,但計算代價 較小使用較大的神經網路,類似於參數較多的情況,容易導致高偏差和過擬合,雖然計算代 價比較大,但是可以通過歸一化手段來調整而更加適應資料。

     通常選擇較大的神經網路並採用歸一化處理會比採用較小的神經網路效果要好。

    對於神經網路中的隱藏層的層數的選擇,通常從一層開始逐漸增加層數,為了更好地作選擇,可以把資料分為訓練集、交叉驗證集和測試集,針對不同隱藏層層數的神經網路訓 練神經網路, 然後選擇交叉驗證集代價最小的神經網路。

    好的,以上就是我們介紹的偏差和方差問題,以及診斷該問題的學習曲線方法。在改 進學習演算法的表現時,你可以充分運用以上這些內容來判斷哪些途徑可能是有協助的。而哪 些方法可能是無意義的。如果你理解了以上幾節視頻中介紹的內容,並且懂得如何運用。那 麼你已經可以使用機器學習方法有效解決實際問題了。你也能像矽谷的大部分機器學習從 業者一樣,他們每天的工作就是使用這些學習演算法來解決眾多實際問題。我希望這幾節中提 到的一些技巧,關於方差、偏差,以及學習曲線為代表的診斷法能夠真正協助你更有效率地 應用機器學習,讓它們高效地工作。

 

 

 

 

 

 

 

 

斯坦福第十課:應用機器學習的建議(Advice for Applying Machine Learning)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.