ML

原文:https://share.coursera.org/wiki/index.php/ML:Advice_for_Applying_Machine_Learning

面對一個機器學習問題,我們提取好特徵,挑選好訓練集,選擇一種機器學習算法,然後學習預測得到了第一步結果。然而我們不幸地發現,在測試集上的準確率低得離譜,誤差高得嚇人,要提高準確率、減少誤差的話,下一步該做些什麼呢?

可以採用以下的方法來減少預測的誤差:

  • 獲得更多的訓練樣本
  • 減少特徵的數量
  • 增加特徵的數量
  • 使用多項式特徵
  • 增大或減小正則化參數λ

但不要盲目在這些可行的方法裏隨便選一種來提升模型,需要用一些診斷模型的技術來幫助我們選擇使用哪種策略。

1.評估假設

即使模型假設對於訓練集的誤差很低,若存在過擬合,模型的預測也同樣會不準確。

給定一份訓練集,我們可以將數據分成兩部分:訓練集和測試集。

  1. 使用訓練集最小化J(Θ)得到Θ參數
  2. 計算測試集的誤差:
Jtest(Θ)=12mtesti=1mtest(hΘ(x(i)test)y(i)test)2

3.計算分類錯誤率(即0/1分類錯誤率)

err(hΘ(x),y)=10if hΘ(x)0.5 and y=0 or hΘ(x)<0.5 and y=1otherwise

測試集的平均誤差爲:

Test Error=1mtesti=1mtesterr(hΘ(x(i)test),y(i)test)

也就是測試集上分類錯誤的樣本的比例。

2.模型選擇與訓練/驗證/測試集

  • 學習算法若僅僅對訓練集擬合較好,並不能說明其假設也是好的。
  • 訓練集上的假設誤差通常要比其他數據集上得到的誤差要小。

爲了在假設上選擇模型,可以測試模型的多項式的次數來觀察誤差結果。

無驗證集

  1. 對不同的多項式次數的模型通過訓練集得到最優化參數Θ
  2. 找到在預測集上誤差最小的模型的多項式次數d
  3. 使用測試集估計泛化誤差Jtest(Θ(d))

在這個例子中,我們用測試集訓練得到的一個變量,即多項式次數d,但這樣做會使其他數據集的誤差更大。

爲了解決這個問題,我們引入了第三種數據集,即交叉驗證集(Cross Validation Set),來作爲選擇d的中間數據集。這樣,測試集會給出一個準確,非樂觀估計的誤差結果。

例如,將數據集分成三份:

  • 訓練集:60%
  • 交叉驗證集:20%
  • 測試集:20%

對於這三個數據集我們可以計算三個不同誤差值:

有驗證集

  1. 對不同的多項式次數的模型通過訓練集得到最優化參數Θ
  2. 找到在驗證集上誤差最小的模型的多項式次數d
  3. 使用測試集估計泛化誤差Jtest(Θ(d))

使用驗證集則避免了使用測試集來確定多項式次數d

3.診斷偏差 Vs. 方差

我們來討論一下多項式次數d和過擬合以及欠擬合之間的關係。

  • 我們需要區分導致預測結果差的原因是偏差還是方差。
  • 高偏差也就是欠擬合,高方差也就是過擬合。我們需要在這兩者之間找到一個黃金分割。

隨着多項式次數d的增加,訓練集的誤差會減少

同時,交叉驗證集的誤差會隨着d的增加而減少,但在d增加到某一點之後,會隨着d的增加而增加,形成一個凸曲線

  • 高偏差(欠擬合):Jtrain(Θ)JCV(Θ)都較高,並且JCV(Θ)Jtrain(Θ)
  • 高方差(過擬合):Jtrain(Θ)較低,且JCV(Θ)Jtrain(Θ)高得多。

可以用下圖來表示:

Features-and-polynom-degree

4.正則化和偏差/方差

下面來分析正則化參數λ

  • λ較大:高偏差(欠擬合)
  • λ不大不小:正好
  • λ較小:高方差(過擬合)

較大的λ參數會懲罰Θ參數,即簡單化結果函數的曲線,造成欠擬合。

λ和訓練集以及驗證集的關係如下:

  • λ較小:Jtrain(Θ)較低,且JCV(Θ)較高(高方差/過擬合)。
  • λ不大不小:Jtrain(Θ)JCV(Θ)都較低,並且JCV(Θ)Jtrain(Θ)
  • λ較大:Jtrain(Θ)JCV(Θ)都較高(高偏差/欠擬合)。

下圖說明了λ值和假設之間的關係:

Features-and-lambda

爲了選擇模型和正則化參數lambda,我們需要:

  1. 列出λ測試的值,比如 λ{0,0.01,0.02,0.04,0.08,0.16,0.32,0.64,1.28,2.56,5.12,10.24}
  2. 選擇一個λ的值進行計算;
  3. 創建模型集,比如按照多項式次數或其他指標來創建;
  4. 選擇一個模型來學習Θ值;
  5. 用所選的模型學習得到Θ值,使用選擇的λ值計算Jtrain(Θ)(爲下一步學習參數Θ);
  6. 使用學習(帶λ)得到的參數Θ計算不帶正則項或是λ=0的訓練誤差Jtrain(Θ)
  7. 使用學習(帶λ)得到的參數Θ計算不帶正則項或是λ=0的交叉驗證誤差JCV(Θ)
  8. 對模型集合所有λ取值重複上述步驟,選擇使交叉驗證集誤差最小的組合;
  9. 如果需要使用圖形化結果來幫助決策的話,可以繪製λJtrain(Θ)的圖像,以及λJCV(Θ)的圖像;
  10. 使用最好的Θλ組合,在測試集上進行預測計算Jtest(Θ)的值來驗證模型對問題是否有好的泛化能力。
  11. 爲了幫助選擇最好的多項式次數和λ的值,可以採用學習曲線來診斷。

5.學習曲線

訓練3個樣本很容易得到0誤差,因爲我們永遠可以找到一條二次曲線完全經過3個點。

  • 當訓練集越來越大時,二次函數的誤差也會增加。
  • 誤差值會在訓練集大小m增加到一定程度後慢慢平緩。

高偏差的情況

  • 小訓練集Jtrain(Θ)較低,$J_{CV}(\Theta)較高。
  • 大訓練集Jtrain(Θ)JCV(Θ)J_{train}(\Theta) \approx J_{CV}(\Theta)$。

如果學習算法有高偏差的問題,那麼獲取更多的訓練數據並不會有很多改進。

對於高方差的問題,對於訓練集大小有如下關係:

高方差的情況

  • 小訓練集Jtrain(Θ)較低,$J_{CV}(\Theta)較高。
  • 大訓練集Jtrain(Θ)會略微增加,JCV(Θ)J_{train}(\Theta) < J_{CV}(\Theta)$。

如果學習算法有高方差的問題,那麼獲取更多的訓練數據是有用的。

下圖展示了訓練集大小和高偏差/高方差問題之間的關係。

High-variance-high-bias

6.再次考慮如何選擇提升模型的下一步

決策過程可以分解成以下幾點:

  • 獲得更多的訓練樣本
    • 解決高方差
  • 減少特徵的數量
    • 解決高方差
  • 增加特徵的數量
    • 解決高偏差
  • 使用多項式特徵
    • 解決高偏差
  • 增加正則參數λ
    • 解決高偏差
  • 減少正則參數λ
    • 解決高方差

7.診斷神經網絡

  • 參數較少的神經網絡很容易欠擬合,但同時計算也較容易。
  • 參數較多的大型神經網絡更容易過擬合,但同時計算量較大。在這種情況下可以使用正則化(增加λ)來避免過擬合問題。

使用單個隱藏層是一個較好地開始默認設置。你可以使用驗證集在多個隱藏層上訓練神經網絡。

8.模型選擇總結

以下是機器學習診斷的一些總結

  • 選擇多項式次數M
  • 如何選擇模型中得參數Θ(即模型選擇)

有3種方式解決:

  1. 獲取更多數據(非常困難)
  2. 選擇擬合數據最好且沒有過擬合的模型(非常困難)
  3. 通過正則化來減少過擬合的機會

偏差:近似誤差(預測值和期望值之間的差值)

  • 高偏差 = 欠擬合(BU)
  • Jtrain(Θ)JCV(Θ)J_{train}(\Theta) \approx J_{CV}(\Theta)$

方差:有限數據集之間的估計誤差值

  • 高方差 = 過擬合(VO)
  • Jtrain(Θ)較低,並且Jtrain(Θ)<<JCV(Θ)

偏差-方差權衡的直覺

  • 複雜模型=>數據敏感=>受訓練集X變化的影響=>高方差,低偏差
  • 簡單模型=>更死板=>不受訓練集X變化的影響=>低方差,高偏差

機器學習的最重要的目標之一:找到一個模型在偏差-方差的權衡之間剛剛好。

正則化影響

  • λ值較小(過擬合)使模型容易受噪聲影響,導致高方差。
  • λ值較大(欠擬合)會將參數值接近於0,導致高偏差。

模型複雜度影響

  • 多項式次數較低的模型(模型複雜度低)有高偏差和低方差。在這種情況下,模型擬合總是很差。
  • 多項式次數較高的模型(模型複雜度高)擬合訓練集極好,擬合測試集極差。導致訓練集上低偏差,但高方差。
  • 在現實中,我們想要選擇一個模型在以上兩種情況之間,既然可以很好地擬合數據,也有很好地泛化能力。

使用診斷時的一些典型經驗法則

  • 獲取更多地訓練樣本可以解決高方差問題,不能解決高偏差問題。
  • 減少特徵數量可以解決高方差問題,不能解決高偏差問題。
  • 增加特徵數量可以解決高偏差問題,不能解決高方差問題。
  • 增加多項式特徵和交互特徵(特徵和特徵交互)解決高偏差問題,不能解決高方差問題。
  • 當使用梯度下降時,減少正則化參數λ值可以解決高方差問題,增加λ值可以解決高偏差問題。
  • 當使用神經網絡時,小型神經網絡更容易欠擬合,大型神經網絡更容易過擬合。交叉驗證是選擇神經網絡大小的一種方式。

參考:

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