機器學習訓練模型的一般錯誤


前言

在我們構建完機器學習模型,經常會遇到訓練得到模型無法正確預測,這之后我們往往會采取下面的一些方案:

  • 增加訓練數據
  • 減少特征的個數
  • 增加更多的特征
  • 增加多項式特征(X1*X2 ...)
  • 增大lambda的值
  • 減小lambda的值

若是不了解模型具體的問題所在,而根據隨便拿出一個方案去試錯,這往往都是既費力又費心,往往個把月過去了仍然在進行模型的調試。

CV 數據集 [數據集處理]

將一個數據集先按下面進行划分:

  • Training set: 60%
  • Cross validation set: 20%
  • Test set: 20%

計算模型誤差 [誤差計算]

1.線性回歸,直接使用代價函數即可,如下:

for i = 1:m
    %依次遞增的數據量進行訓練模型
    theta = trainLinearReg(X(1:i,:), y(1:i), lambda);
    %train數據集的測試,使用時去除lambda
    error_train(i) =linearRegCostFunction(X(1:i,:), y(1:i), theta, 0);
    %cv數據集的測試
    error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);
end

2.logistic回歸,引出0-1錯分率:

過擬合和欠擬合 [誤差分析]

欠擬合:高偏差,Jcv近似於Jtrain。
過擬合:高方差,Jcv遠大於Jtrain。
這2個問題是機器學習中最經典的錯誤情況,很多現象也是由它們一手操辦的,來看看下面的3種情況:


樣本

根據上面誤差計算部分得來的Training set和cv set得到相應圖片


High bias:Jcv與Jtrain非常接近,加入過多樣本,對模型的優化沒作用


High variance:Jcv遠大於Jtrain,增加樣本,可以對模型進行優化


多項式特征

多項式特征的選擇的多少往往也會給我們帶來很大的麻煩,過多的多項式特征會使模型過擬合,而過少的多項式特征會使模型欠擬合。
那么我們該如何進行多項式的選擇,下面便引入解決方案:

  1. 使用training set訓練每一個多項式,得出相應的theta值。
  2. 使用cv set獲得誤差最小的多項式。
  3. 最后使用test set對多項式進行評估。

lambda

正規化的引入,就是為了防止過擬合,而lambda對擬合程度有着很大影響。若是沒有lambda則會出現過擬合現象;而若是lambda過大則會出現欠擬合現象。

那怎么選擇一個較好的lambda呢?
方法類似於多項式特征的選取,稍有不同的就是自己要定義lambda集合。

測試代碼段

for i = 1:length(lambda_vec)
        lambda = lambda_vec(i);
        theta = trainLinearReg(X, y, lambda);
        %評估時切記不可在cv set和test set中加入lambda值
        error_train(i) = linearRegCostFunction(X, y, theta, 0);
        error_val(i) = linearRegCostFunction(Xval, yval, theta, 0);
end

測試結果:

學習曲線

很多情況下因為特征很多,我們往往很難將數據展現出來,而可視化的數據往往給我們的分析帶來了很大的幫助;learning curve的繪制無疑是一大助手,learning curve通常是由training set和cv set的誤差繪制出來的,中間最重要的就是將training set使用遞增的方式進行訓練,而cv set則是全部進行使用。如【計算模型誤差的代碼部分】。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM