前言:
本節主要是練習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
參考資料: