機器學習訓練模型的通常錯誤

前言

在咱們構建完機器學習模型,常常會遇到訓練獲得模型沒法正確預測,這以後咱們每每會採起下面的一些方案:機器學習

  • 增長訓練數據
  • 減小特徵的個數
  • 增長更多的特徵
  • 增長多項式特徵(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種狀況:3d


樣本

根據上面偏差計算部分得來的Training set和cv set獲得相應圖片
調試


High bias:Jcv與Jtrain很是接近,加入過多樣本,對模型的優化沒做用
code


High variance:Jcv遠大於Jtrain,增長樣本,能夠對模型進行優化
blog


多項式特徵

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

  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則是所有進行使用。如【計算模型偏差的代碼部分】。

相關文章
相關標籤/搜索