Machine Learning - Andrew Ng on Coursera (Week 6)
本篇文章將分享Coursera上Andrew Ng的Machine Learning第六周的課程,主要內容有如下,詳細內容可以參考文末附件:
- 評價機器學習算法
- Diagnosing bias vs. variance(診斷偏差和方差,模型多項式維度$d$ - $J(theta)$圖)
- Regularization and bias/variance(正則化和偏差/方差,$lambda$ - $J(theta)$圖)
- Learning curves(學習曲線,訓練集大小$m$ - $J(theta)$圖)
- 下一步該做什么?
- 神經網絡中的過擬合問題
評價機器學習算法
討論在建立了模型假設,收集了相關數據以后接下來應該怎么做。初步學習的算法往往不準確的,所以需要對學習算法進行調試和評估,以進行進一步的優化。
假設實現了一個正則化的線性回歸算法來預測房價,使以下代價函數最小:
\]
然而,測試一批新的房屋數據時,發現預測出來的數據是很不準確的。那么,下一步你該怎么做?以下是一些備擇選項,先把對應的情況也總結在這里,但最好在看完后面詳細的解釋的部分再回頭來看看是否一一對應:
- 獲取更多的訓練樣本 - 解決高方差
- 嘗試使用更少的特征的集合 - 解決高方差
- 嘗試獲得其他特征 - 解決高偏差
- 嘗試添加多項組合特征 - 解決高偏差
- 嘗試減小[Math Processing Error]?- 解決高偏差
- 嘗試增加[Math Processing Error]?-解決高方差獲取更多的訓練樣本
機器學習(算法)診斷(Diagnostic)是一種測試方法,能對當前學習算法進行深入的認識,知道算法是過擬合還是欠擬合,處于訓練的什么階段,并且能指導接下來如何做能最大限度的提高學習算法的性能。診斷測試雖然需要一些時間來實現,但是這樣做可以使得機器學習算法實現更有效率。
在房價預測問題中,如果假設如下:
[Math Processing Error]
值得注意的是高階項一般可以對訓練數據做到非常好的擬合,但是對不在訓練集的新數據的預測卻很差,失去通用性。那我們應該如何評價這個假設?一個比較通用的做法是將數據集進行拆分,一部分(例如70%或者80%)作為訓練集,另一部分(例如30%或者20%)作為測試集。對于模型假設,此時可以分為兩步:
一旦參數[Math Processing Error]對于某些數據集(訓練集)適應(最終學習的參數),那么基于該數據及參數所計算的模型的訓練誤差[Math Processing Error]很可能比實際泛化的[Math Processing Error]要小。接下來面臨的是模型選擇(Model Selection)的問題,首先來看一個選擇多項式回歸模型的例子,假設有1-10次方的多項式回歸模型,應該選擇其中的哪一個模型?
假設基于訓練集學習得到的參數,然后選擇測試集誤差最小的5次方的多項式回歸模型。那么這個模型的泛化能力如何?測試集的[Math Processing Error]基本能代表它的泛化能力,但是這是否準確?答案是不完全準確,同樣會出現在訓練集和測試集的誤差都很小,但新數據的錯誤率仍然很高。因此,這里再引入第三個集合:交叉驗證集,簡明介紹可參考此處。一種比較典型的劃分方式是60%的訓練集,20%的交叉驗證集以及20%的測試集。在實際使用時,我們通過訓練集學習到參數, 再計算交叉驗證集上的error, 再選擇一個在驗證集上誤差最小的模型,最后再在測試集上估計模型的泛化誤差(generalized error)。
Diagnosing bias vs. variance(診斷偏差和方差,模型多項式維度[Math Processing Error]?-?[Math Processing Error]圖)
通過觀察欠擬合和過擬合的例子可以發現:
- 當多項式回歸模型的次數[Math Processing Error],也就是高偏差(欠擬合)時,訓練集誤差和驗證集誤差都比較大;
- 當[Math Processing Error],也就是高方差(過擬合)時,訓練集誤差會很小(擬合的非常好),但是驗證集誤差卻很大;
- 當[Math Processing Error],也就是擬合的剛剛好時,無論訓練集誤差還是驗證集誤差都剛剛好,介于上面兩者之間。
如果用圖形表示,就是下面這個樣子:

有了上面的解釋,我們就可以來診斷偏差還是方差的問題了。假設你的學習算法表現的不盡如人意,沒有達到你的期望,如何來判定它是一個偏差的問題還是方差的問題?我們可以計算他們的訓練集誤差和交叉驗證集誤差,如果它們落入了上圖的“頭部”區域,可以判斷是偏差(欠擬合)問題,如果落入了“尾部”區域,可以判斷是方差(過擬合)問題。對于偏差還是方差的問題,可以做一個總結如下:
- 欠擬合時,[Math Processing Error]很大,[Math Processing Error]
- 過擬合時,[Math Processing Error]很小,[Math Processing Error]

Regularization and bias/variance(正則化和偏差/方差,[Math Processing Error]?-[Math Processing Error]圖)
對于過擬合問題,正則化是一個非常有效的解決方案。如果正則化參數[Math Processing Error]過大,則除了[Math Processing Error],其他參數都將近似為0,而形成了欠擬合或高偏差的情況。如果λ過小,例如[Math Processing Error],則等同于沒有對線性回歸模型進行正則化,而很容易出現過擬合高方差的問題。因此只有在[Math Processing Error]選取適中的情況下,才能得到合適的擬合。本節講解了如何求得最合適的[Math Processing Error]值。
對于數據集,仍將它劃為3份:訓練集、驗證集、測試集。對于給定的正則化模型,例如上面的例子,我們按[Math Processing Error]從小到大的順序依次取數,然后在訓練集上學習模型參數,在交叉驗證集上計算驗證集誤差,并選擇誤差最小的模型, 也就是選擇[Math Processing Error],最后再在測試集上評估假設:
[Math Processing Error]
偏差/方差可以作為正則化參數[Math Processing Error]的函數,與上一小節相似,我們也可以畫出這個函數圖,這樣就能評估[Math Processing Error]合適的取值范圍了:

Learning curves(學習曲線,訓練集大小[Math Processing Error]?-?[Math Processing Error]圖)
這一小節考慮Learning curves(學習曲線)的問題,主要針對的是訓練樣本數目來觀察訓練集誤差和驗證集誤差之間的差異:
上圖展現了訓練樣本數目和模型的關系。以二次項多項式回歸為例,如果僅有一個訓練樣本,那么模型很容易和樣本點擬合,訓練集誤差近似為0。也就是在訓練集越小時模型越容易擬合樣本點,而驗證集誤差可能會大一些;而當樣本點比較多時,模型訓練集誤差會大一些,但是驗證誤集差會小一些。誤差和訓練樣本數量[Math Processing Error]的關系,即學習曲線如下圖所示:


對于高偏差欠擬合問題,即使增大了訓練樣本數目,模型假設對于問題的擬合依然不夠,導致訓練集和驗證集的誤差都會比較大。因此下圖是高偏差欠擬合問題的學習曲線:

當模型高偏差時,那么它的訓練誤差和驗證集誤差在一定的訓練樣本數目之后都很高,而且不會隨著樣本數目的增大而改變,所以對于高偏差欠擬合的問題,增加訓練樣本數目不是一個好的解決辦法。
而對于高方差過擬合問題,增大樣本數目后,模型的泛化能力會好一些,下圖是高方差過擬合問題的學習曲線:

如果一個學習算法是高方差的,那么它的訓練誤差和驗證集誤差在一定的訓練樣本數目之后雖然有差異,但是會隨著樣本數目的增大而減小它們之間的距離,所以對于高方差過擬合的問題,增加訓練樣本數目是解決方法之一。
下一步該做什么?
再次回到本章的開頭的問題,假設你實現了一個正則化的線性回歸算法來預測房價,然而當用它來測試一批新的房屋數據時,發現預測出來的數據很不準確時,下一步該采取什么措施?以下這些選項,分別針對的是高方差或高偏差的問題,你可以嘗試用上述小節的一些方法來診斷你的學習算法,不過對于下述選項,需要你考慮一下是針對高偏差還是方差的問題,可以先思考一分鐘再看答案:
神經網絡中的過擬合問題
最后我們再來看一下神經網絡和過擬合的問題:
以下是“小”的神經網絡(參數比較少,很容易欠擬合):

它的計算代價較少。
以下是“大”的神經網絡(參數比較多,很容易過擬合):

它的計算代價較大,對于神經網絡過擬合的問題,可以通過正則化([Math Processing Error])方法解決。
附本次演示文檔:ML-Coursera-Week6
總結
以上是生活随笔為你收集整理的Machine Learning - Andrew Ng on Coursera (Week 6)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Machine Learning - A
- 下一篇: An overview of gradi