吳恩達機器學習(六)模型選擇與評估,誤差分析與優化

  :  + \color{#f00}{***\ 點擊查看\ :吳恩達機器學習 \ —— \ 整套筆記+編程作業詳解\ ***}
注:本章沒有枯燥的算法講解,主要講的是在機器學習實踐過程中的一些應用建議。

概述

前5周我們學習了線性迴歸,邏輯迴歸,神經網絡來訓練數據得到預測模型。但是如何評價預測模型的優劣,如何對預測模型進行誤差分析以及如何改進,這是實際應用中所關注的。

本週,將要針對模型的評估,優化改進進行學習,旨在對模型進行進一步完善做出明確的指導。

1. 模型選擇與評估——訓練集,驗證集,測試集

以往的做法是:用訓練集進行訓練得到最終參數,並還是用訓練集計算模型的準確率。
該做法的問題:易產生過擬合,將模型推廣到新的數據集上效果並不好。

改進的做法:將數據集分爲訓練集和測試集,訓練集用於訓練得到最優參數,測試機用於評估模型準確率。
提出新問題:假如我們還未確定訓練模型,需要在以下多項式模型中選擇最優的模型進行訓練,用哪部分數據進行訓練得到最優模型呢?

在這裏插入圖片描述

進一步改進爲:在數據集中再抽出一部分來作爲交叉驗證集用於上述模型選擇。

我們可以把數據集分爲三個部分:訓練集(Training Set)、交叉驗證集(Cross Validation Set)、測試集(Test Set)。這三者的分配比例可以是:60%,20%,20%。(注意:分配數據前需要將數據打亂)

這三部分的誤差計算公式如下:
在這裏插入圖片描述
需要注意的是,當計算訓練集、交叉驗證集和測試集誤差時,不計算正則項。

可以大致理解訓練模型的步驟:

  • Step 1:用訓練集訓練各種模型,線性的,多項式的,有正則化的,無正則化的,追求訓練誤差的最小化。
  • Step 2:用驗證集去計算訓練出來的模型的驗證誤差,並選出表現最好的一個作爲最終模型。
  • Step 3:用測試集,評估最終模型的表現優劣。

2. 誤差分析

2.1 偏差與方差

評價模型,一般評價其偏差和方差:

  • 偏差(Bias) 反映了模型無法正確的描述數據規律,導致預測誤差很大(欠擬合 Underfitting)
  • 方差(Variance )反映了模型對訓練數據過度敏感,導致了其泛化能力很差(過擬合 Overfitting)

在這裏插入圖片描述

  • 以多項式迴歸爲例,訓練集的誤差 Jtrain(θ)J_{train}(θ) 以及交叉驗證集的誤差 Jcv(θ)J_{cv}(θ) 隨多項式次數 dd 的變化曲線如下圖:
    在這裏插入圖片描述曲線左邊 多項式的次數過小欠擬合,導致無論在訓練集還是交叉驗證集上擬合效果都不好,即 高偏差
    曲線右邊 多項式的次數太大過擬合,雖然在訓練集上擬合得很好,但在交叉驗證集上的誤差則很大,即 高方差

  • 同理,我們也可以得到正則化係數 λ\lambda 的大小與 Jtrain(θ)J_{train}(θ)Jcv(θ)J_{cv}(θ)的關係:

在這裏插入圖片描述

2.3 學習曲線

學習曲線是訓練集的誤差 Jtrain(θ)J_{train}(θ) 與交叉驗證集的誤差 Jcv(θ)J_{cv}(θ)關於訓練集樣本數量mm的函數圖像。

  • 低偏差、低方差下的學習曲線:
    在這裏插入圖片描述
  • 對於訓練誤差 Jtrain(θ)J_{train}(θ) :當只有幾個數據訓練算法時(例如1、2、3),很容易就可以得到零誤差,因爲我們總能找到一條二次曲線與它們完美擬合。但是隨着數據的增加,二次曲線的誤差就會越大,經過一定的 mm值以後,誤差就會趨於穩定。
  • 對於交叉驗證誤差 Jcv(θ)J_{cv}(θ):當訓練集大小 mm 很小時,擬合出的假設函數泛化到新樣本的能力很差,交叉驗證誤差就很大,隨着訓練集不斷增大,可能會擬合出更好的假設函數,泛化到新樣本的能力增強,交叉驗證誤差會逐漸減小。
  • 高偏差:
    +
    結論:當 Jtrain(θ)J_{train}(θ)Jcv(θ)J_{cv}(θ) 都很大時,屬於高偏差(欠擬合)問題,此iu時 增加訓練數據是沒有用的
  • 對於訓練誤差 Jtrain(θ)J_{train}(θ)
    • 當訓練集 mm 很小時,擬合出的直線對於每個樣本的擬合效果不算差,因此訓練誤差 Jtrain(θ)J_{train}(θ) 也較小;
    • 隨着訓練集不斷增大,直線對訓練樣本的擬合能力就差了很多,因此訓練誤差 Jtrain(θ)J_{train}(θ) 續增大直到接近交叉驗證誤差;
    • mm 大到一定值之後,對於訓練樣本的擬合就沒那麼準確了,故訓練誤差 Jtrain(θ)J_{train}(θ) 會持續增大直到接近交叉驗證誤差 Jcv(θ)J_{cv}(θ)
  • 對於交叉驗證誤差 Jcv(θ)J_{cv}(θ)
    • 當訓練集集 mm 很小時,擬合出的直線泛化到新樣本的能力很差,交叉驗證誤差 Jcv(θ)J_{cv}(θ) 很大;
    • 隨着訓練集不斷增大,訓練出的直線更好的適應訓練集,泛化到新樣本的能力略有增強,交叉驗證誤差 Jcv(θ)J_{cv}(θ) 稍有減小
    • mm 大到一定值之後,訓練出的還是一條差不多的直線,交叉驗證誤差 Jcv(θ)J_{cv}(θ) 將不再變化並接近水平。
  • 高方差:
    在這裏插入圖片描述
    結論:高方差(過擬合)時,增加訓練數據可能會有用,因爲隨着訓練數據增多 Jcv(θ)J_{cv}(θ)Jtrain(θ)J_{train}(θ) 越來越接近。
  • 當訓練集大小 mm很小時,因爲存在過擬合,訓練誤差 Jtrain(θ)J_{train}(θ) 會非常小,同時過擬合的存在使假設函數泛化到新樣本的能力不足,交叉驗證誤差 Jcv(θ)J_{cv}(θ) 很大 ;
  • 隨着訓練集不斷增大,想要完美擬合所有訓練數據變得沒那麼容易,訓練誤差 Jtrain(θ)J_{train}(θ) 會稍微增大,但因爲 hθ(x)hθ(x) 的階次很高,仍然存在過擬合,總體來說 Jtrain(θ)J_{train}(θ) 還是很小的。訓練集增大讓交叉驗證誤差 Jcv(θ)J_{cv}(θ) 有減小的趨勢,但因爲過擬合依然存在,故 Jcv(θ)J_{cv}(θ) 只是稍微減小,仍然較大, Jcv(θ)J_{cv}(θ)Jtrain(θ)J_{train}(θ) 間還是有很大差距。

總而言之,學習曲線能讓我們發現是否存在高方差/高偏差問題,以及採取某些手段(如:增加訓練樣本數)是否有意義,避免我們在調試學習算法時浪費時間。

2.3 總結方法

  1. 獲得更多的訓練樣本——解決高方差
  2. 嘗試減少特徵的數量——解決高方差
  3. 嘗試獲得更多的特徵——解決高偏差
  4. 嘗試增加多項式特徵——解決高偏差
  5. 嘗試減少正則化程度 λλ——解決高偏差
  6. 嘗試增加正則化程度 λλ——解決高方差

3. 類偏斜的誤差度量

(Error Metrics for Skewed Classes)

以我們之前提到的腫瘤惡性與良性檢測問題爲例。患有癌症爲 1,沒有患癌症爲 0。假如我們在測試集上進行測試,結果只有 1% 的誤分類率,看起來結果好像不錯,但如果測試集中真正患有癌症的病人只有 0.50%,這個結果就不太理想了。

這個例子中,正樣本的數量遠遠大於負樣本,這種情況我們稱之爲偏斜類(Skewed Class)。對於這種情況,原來的誤分類率不能再作爲算法好壞的度量標準。所以我們需要另一種的評估方法,叫做 查準率(Precision)和召回率(Recall)(或稱 查全率)

在這裏插入圖片描述
在這裏插入圖片描述
查準率和召回率越高,算法性能越好。

仍然以腫瘤良性與惡性爲例。之前我們的預測結果如下:

在這裏插入圖片描述

  • 如果我們希望在更確定的情況下再判斷患者得了癌症,因爲這是一個壞消息,誤診可能造成患者的恐慌。這樣的話,我們可以把臨界值 0.5 改爲 0.7,這樣就可以得到較高的查準率,但召回率相對會降低。

  • 如果我們希望保證癌症患者及時得到醫治,不放過任何一個可能病例,我們需要把臨界值降低,比如改爲 0.3。這樣會得到較高的召回率,但查準率相對會降低。

那麼我們可不可以自動選取臨界值呢?

如下面幾個算法(可能算法相同,臨界值不同),我們如何判斷哪個更好?

在這裏插入圖片描述
可能會有人想到求平均值 Average=P+R2Average=\frac{P+R}{2},看哪個更高。但顯然這並不是一個很好的解決辦法。因爲按平均值來看,算法3是最高的,但這不是我們希望的。

一般來說,我們用 F1Score=2PRP+RF_1Score=2\frac{PR}{P+R} 值來評估(調和平均數):

在這裏插入圖片描述

參考:機器學習筆記week6

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章