筆記 - 機器學習 有效的改善模型

[筆記] 機器學習 有效的改善模型

改善方法

  • 取得更多訓練資料
  • 嘗試較少的特徵量
  • 嘗試較多的特徵量
  • 嘗試多項式的特徵量
  • 嘗試增加 λ
  • 嘗試減少 λ

機器學習診斷法 ( Machine learning diagnostic )

評估假設 ( Evaluating a Hypothesis )

  • 我們的假設可能使訓練樣本的誤差較小,但仍然不準確 ( 因為過度擬合 ),這時就必須評估假設
  • 為了評估假設,將訓練樣本分為兩組 :

    1. 70% 的隨機數據當訓練集
    2. 30% 的隨機數據當測試集
  • 過程 :

    1. 使用新的訓練集學習出 θ 和最小化的 Jtrain(θ)
    2. 使用新的測試集計算出測試集錯誤率 ( The test set error ) Jtest(θ)
  • 測試集錯誤率 ( The test set error )

  1. 線性回歸 :

  2. 邏輯回歸 :

    • 判斷是否錯誤

    • 算出錯誤率

模型選擇 ( Model selection )

  • 鑑於具有需多不同的多項式模型,我們必須要有方法來做模型的選擇
  • 將訓練樣本分為三組 :

    1. 60% 的隨機數據當訓練集
    2. 20% 的隨機數據當交叉驗證集 ( cross validation set )
    3. 20% 的隨機數據當測試集
  • 過程 :

    1. 使用新的訓練集來學習出每個多項式的 θ 和最小化的 Jtrain(θ)
    2. 使用新的交叉驗證集來計算出交叉驗證集錯誤率,找出錯誤率最小的模型 d
    3. 最後使用新的測試集算出泛化誤差 Jtest(θ(d))
  • 此方法,測試集並沒有參與訓練

分辨偏差與方差 ( Bias vs. Variance )

  • 高偏差 ( High bias ) 屬於擬合不足 ( underfitting ) :

    • Jtrain(θ)、JCV(θ) 都很高
    • Jtrain(θ) ≈ JCV(θ)
  • 高方差 ( High Variance ) 屬於過度擬合 ( overfitting ) :

    • Jtrain(θ) 較低
    • JCV(θ) >> Jtrain(θ)

如何選擇 λ

  • 當 λ 過大時,會導致擬合不足,而當 λ 過小時,會導致過度擬合
  • 如何選擇模型與 λ :

    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. 使用交叉驗證集來算出錯誤率 JCV(θ) ( 不使用正規化,或使 λ = 0 )
    5. 選擇 JCV(θ) 最低的作為最佳組合
    6. 使用此最佳組合 θ、λ,查看在 Jtest(θ) 上是否運作良好
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function [lambda_vec, error_train, error_val] = validationCurve(X, y, Xval, yval)

% λ 列表
lambda_vec = [0 0.001 0.003 0.01 0.03 0.1 0.3 1 3 10]';

error_train = zeros(length(lambda_vec), 1);
error_val = zeros(length(lambda_vec), 1);

for i = 1:length(lambda_vec)

% 使用每個 λ,各學習出 θ
lambda = lambda_vec(i);
theta = trainLinearReg(X, y, lambda);

% 計算出訓練集與交叉驗證集的錯誤率
error_train(i) = linearRegCostFunction(X, y, theta, 0);
error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);

endfor

end
  • 在 Octave 上的選擇 λ 函式

學習曲線

  • 在極少數資料 ( 1、2 或 3 ) 的訓練集,容易產生錯誤率為 0,因為很容易找到符合這些資料的多項式,因此 :

    • 隨訓練資料越多,函數的誤差增加
    • 在到達某個資料量後,誤差值將穩定下來
  • 高偏差 ( High bias ) :

    • 資料量少 : Jtrain(θ) 較低,JCV(θ) 較高
    • 資料量多 : Jtrain(θ) ≈ JCV(θ),都很高
    • 如果繼續增加訓練資料,並沒有太大改善

  • 高方差 ( High Variance ) :

    • 資料量少 : Jtrain(θ) 較低,JCV(θ) 較高
    • 資料量多 : Jtrain(θ) 隨資料量越大而增加, JCV(θ) 隨著減少且不平穩,Jtrain(θ) < JCV(θ),兩個差異仍然很大
    • 如果繼續增加訓練資料,有助於改善

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function [error_train, error_val] = learningCurve(X, y, Xval, yval, lambda)

m = size(X, 1);

error_train = zeros(m, 1);
error_val = zeros(m, 1);


for i = 1:m

X_train = X(1:i, :);
y_train = y(1:i);

% 訓練出 θ
theta = trainLinearReg(X_train, y_train, lambda);

% 計算出訓練集與測試集的錯誤率
error_train(i) = linearRegCostFunction(X_train, y_train, theta, 0);
error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);

endfor

end
  • 在 Octave 上的學習曲線函式

總結

  • 解決高偏差 ( High bias ) :

    • 嘗試較多的特徵量
    • 嘗試多項式的特徵量

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      function [X_poly] = polyFeatures(X, p)

      X_poly = zeros(numel(X), p);

      X_poly(:, 1) = X;

      for i = 2:p

      X_poly(:, i) = X .* X_poly(:, i - 1)

      endfor

      end
      • 在 Octave 上算出單特徵量多次方的函式
    • 嘗試減少 λ

  • 解決高方差 ( High Variance ) :

    • 取得更多訓練資料
    • 嘗試較少的特徵量
    • 嘗試增加 λ
  • 診斷神經網路

    • 較少參數的神經網路

      • 容易產生擬合不足 ( underfitting )
      • 計算成本較低
    • 較多參數的神經網路

      • 容易產生過度擬合 ( overfitting )
      • 計算成本較高
      • 可以使用正規化來解決過度擬合
    • 如何選擇 Hidden layer 數量

      • 使用多種 Hidden layer 數量不同的模型
      • 再用交叉驗證集選出效果較佳的
  • 模型複雜度

    • 模型複雜度低

      • 高偏差、低方差
      • 對於訓練數據和測試數據都有較大的誤差
    • 模型複雜度高

      • 低偏差、高方差
      • 非常擬合訓練數據,但對測試數據有較大的誤差
tags: 筆記 機器學習 改善模型
Author: Kenny Li
Link: https://kennyliblog.nctu.me/2019/08/08/Machine-learning-advice-for-model/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.