Deep learning:五(regularized線性回歸練習)


 

  前言:

  本節主要是練習regularization項的使用原則。因為在機器學習的一些模型中,如果模型的參數太多,而訓練樣本又太少的話,這樣訓練出來的模型很容易產生過擬合現象。因此在模型的損失函數中,需要對模型的參數進行“懲罰”,這樣的話這些參數就不會太大,而越小的參數說明模型越簡單,越簡單的模型則越不容易產生過擬合現象。本文參考的資料參考網頁:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex5/ex5.html。主要是給定7個訓練樣本點,需要用這7個點來模擬一個5階多項式。主要測試的是不同的regularization參數對最終學習到的曲線的影響。

 

  實驗基礎:

  此時的模型表達式如下所示:

   

  模型中包含了規則項的損失函數如下:

   

  模型的normal equation求解為:

   

  程序中主要測試lambda=0,1,10這3個參數對最終結果的影響。

  一些matlab函數:

  plot:

  主要是將plot繪曲線的一些性質。比如說:plot(x,y,'o','MarkerEdgeColor','b','MarkerFaceColor','r')這里是繪制x-y的點圖,每個點都是圓圈表示,圓圈的邊緣用藍色表示,圓圈里面填充的是紅色。由此可知’MarkerEdgeColor’和’MarkerFaceColor’的含義了。

  diag:

  diag使用來產生對角矩陣的,它是用一個列向量來生成對角矩陣的,所以其參數應該是個列向量,比如說如果想產生3*3的對角矩陣,則可以是diag(ones(3,1)).

  legend:

  注意轉義字符的使用,比如說legned(‘\lambda_0’),說明標注的是lamda0.

 

  實驗結果:

  樣本點的分布和最終學習到的曲線如下所示:

   

  可以看出,當lambda=1時,模型最好,不容易產生過擬合現象,且有對原始數據有一定的模擬。

 

  實驗主要代碼:

clc,clear
%加載數據
x = load('ex5Linx.dat');
y = load('ex5Liny.dat');

%顯示原始數據
plot(x,y,'o','MarkerEdgeColor','b','MarkerFaceColor','r')

%將特征值變成訓練樣本矩陣
x = [ones(length(x),1) x x.^2 x.^3 x.^4 x.^5];
[m n] = size(x);
n = n -1;

%計算參數sidta,並且繪制出擬合曲線
rm = diag([0;ones(n,1)]);%lamda后面的矩陣
lamda = [0 1 10]';
colortype = {'g','b','r'};
sida = zeros(n+1,3);
xrange = linspace(min(x(:,2)),max(x(:,2)))';
hold on;
for i = 1:3
    sida(:,i) = inv(x'*x+lamda(i).*rm)*x'*y;%計算參數sida
    norm_sida = norm(sida)
    yrange = [ones(size(xrange)) xrange xrange.^2 xrange.^3,...
        xrange.^4 xrange.^5]*sida(:,i);
    plot(xrange',yrange,char(colortype(i)))
    hold on
end
legend('traning data', '\lambda=0', '\lambda=1','\lambda=10')%注意轉義字符的使用方法
hold off

 

 

  參考資料:

     http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex5/ex5.html

 

 

 

 

 

 


免責聲明!

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



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