吳恩達機器學習:方差與誤差

在前幾周的課程裏,咱們已經學習了 監督學習 中的 線性迴歸邏輯迴歸神經網絡( 點擊進入筆記 )。回顧課程做業,全部的樣本數據都被用來訓練模型。驗證模型時,也只是將模型的數據結果與正確結果做對比來看正確率。 這樣的訓練方法是否正確?正確率是否能做爲評價模型的標準?這周就將學習如何評價咱們的模型,以及如何採起正確有效的改進策略。git

點擊 課程視頻 你就能不間斷地學習 Ng 的課程,關於課程做業的 Python 代碼已經放到了 Github 上,點擊 課程代碼 就能去 Github 查看( 沒法訪問 Github 的話能夠點擊 Coding 查看 ),代碼中的錯誤和改進歡迎你們指出。github

如下是 Ng 機器學習課程第五週的筆記。算法

改進策略

對於 預測函數,咱們一般會使用如下幾種手段來改進:網絡

  1. 採集更多的樣本數據
  2. 減小特徵數量,去除非主要的特徵
  3. 引入更多的相關特徵
  4. 採用多項式特徵
  5. 減少正則化參數 \lambda
  6. 增長正則化參數 \lambda

Andrew Ng 告訴你們,他見過不少開發者盲目地使用改進策略,爲此耗費了大量的時間和精力,卻沒什麼效果。因此咱們須要一些依據來幫助咱們選擇合適的策略。機器學習

數據集劃分

爲了評價模型,咱們一般將數據集分爲三個部分,60\%訓練集20\%交叉驗證集20\%測試集,並使用 偏差 做爲模型使用在這些集合上的評價,偏差 的形式與以前的 代價函數 相同( 線性迴歸偏差函數以下 )。ide

J_s(\theta)=\frac{1}{2m_s}\sum\limits_{i=1}^{m_s}(h_\theta(x_s^{(i)})-y_s^{(i)})^2 \ \ \ \ (s=train,cv,test)

在被劃分的集合中,咱們使用 訓練集 來訓練參數 \theta,使用 交叉驗證集 來選擇模型( 好比該使用多少次的多項式特徵 ),使用 測試集 來評估模型的預測能力。函數

方差與誤差

當咱們的模型表現不佳時,一般是出現兩種問題,一種是 高誤差 問題,另外一種是 高方差 問題。識別它們有助於選擇正確的優化方式,因此咱們先來看下 誤差方差 的意義。工具

  • 誤差: 描述模型輸出結果的指望與樣本真實結果的差距。
  • 方差: 描述模型對於給定值的輸出穩定性。

就像打靶同樣,誤差描述了咱們的射擊整體是否偏離了咱們的目標,而方差描述了射擊準不許。接下來讓咱們經過各類狀況下 訓練集交叉驗證集偏差 曲線來直觀地理解 高誤差 與 高方差 的意義。性能

對於 多項式迴歸,當次數選取較低時,咱們的 訓練集偏差 和 交叉驗證集偏差 都會很大;當次數選擇恰好時,訓練集偏差 和 交叉驗證集偏差 都很小;當次數過大時會產生過擬合,雖然 訓練集偏差 很小,但 交叉驗證集偏差 會很大( 關係圖以下 )。 學習

因此咱們能夠計算 J_{train}(\theta)J_{cv}(\theta),若是他們同時很大的話,就是遇到了高誤差問題,而 J_{cv}(\theta)J_{train}(\theta) 大不少的話,則是遇到了高方差問題。

對於 正則化 參數,使用一樣的分析方法,當參數比較小時容易產生過擬合現象,也就是高方差問題。而參數比較大時容易產生欠擬合現象,也就是高誤差問題。

學習曲線

不管你是要檢查你的學習算法是否正常工做或是要改進算法的表現,學習曲線 都是一個十分直觀有效的工具。學習曲線 的橫軸是樣本數,縱軸爲 訓練集交叉驗證集偏差。因此在一開始,因爲樣本數不多,J_{train}(\theta) 幾乎沒有,而 J_{cv}(\theta) 則很是大。隨着樣本數的增長,J_{train}(\theta) 不斷增大,而 J_{cv}(\theta) 由於訓練數據增長而擬合得更好所以降低。因此 學習曲線 看上去以下圖:

在高誤差的情形下, J_{train}(\theta)J_{cv}(\theta) 已經十分接近,可是 偏差 很大。這時候一味地增長樣本數並不能給算法的性能帶來提高。

在高方差的情形下, J_{train}(\theta)偏差 較小, J_{cv}(\theta) 比較大,這時蒐集更多的樣本極可能帶來幫助。

總結

有了以上的分析手段,就可以得出在何種場景下使用咱們的改進策略:

  1. [高方差] 採集更多的樣本數據
  2. [高方差] 減小特徵數量,去除非主要的特徵
  3. [高誤差] 引入更多的相關特徵
  4. [高誤差] 採用多項式特徵
  5. [高誤差] 減少正則化參數 \lambda
  6. [高方差] 增長正則化參數 \lambda

So~,第五週的內容就是這些了,謝謝你們耐心閱讀。

相關文章
相關標籤/搜索