Regularization线性回归练习

        监督机器学习问题无非就是在规则化参数的同时最小化误差。最小化误差是为了让我们的模型拟合我们的训练数据,而规则化参数是防止我们的模型过分拟合我们的训练数据。因为参数太多,会导致我们的模型复杂度上升,容易过拟合,也就是我们的训练误差会很小。但训练误差小并不是我们的最终目标,我们的目标是希望模型的测试误差小,也就是能准确的预测新的样本。所以,我们需要保证模型“简单”的基础上最小化训练误差,这样得到的参数才具有好的泛化性能(也就是测试误差也小),而模型“简单”就是通过规则函数来实现的。

       本文参考的资料参考网页:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex5/ex5.html 主要是给定7个训练样本点,需要用这7个点来模拟一个5阶多项  式。主要测试的是不同的regularization参数对最终学习到的曲线的影响。

        模型表达式为:

            

         代价函数:

        Regularization线性回归练习_第1张图片

 

        模型的normal equation求解为:

   Regularization线性回归练习_第2张图片

        实验实现

        %加载数据

        数据下载: ex5Data.zip                                                                                                               

        http://openclassroom.stanford.edu/MainFolder/courses/MachineLearning/exercises/ex5materials/ex5Data.zip

        X = load('ex5Linx.dat');
        y = load('ex5Liny.dat');
        %显示原始数据
        plot(X,y,'o','MarkerEdgeColor','b','MarkerFaceColor','r');

        Regularization线性回归练习_第3张图片

           分别对lamda=0,1,10三种情况下拟合,结果如下:

      Regularization线性回归练习_第4张图片

          可以看出,当lambda=1时,模型最好,不容易产生过拟合现象,且有对原始数据有一定的模拟。

          实验主要代码如下:

 

         

%参照斯坦福大学提供的练习题
%Exercise: Regularization
%http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex5/ex5.html
clc
clear all
close all
%加载数据
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);
diag_r=diag([0; ones(n-1,1)]);
lamda=[0,1,10];
sida=zeros(n,3);
X=linspace(min(X),max(X))';
X1 = [ones(size(X)), X, X.^2, X.^3, X.^4, X.^5];

for i=1:3  %求得参数sida,最后是一个n*3的矩阵
    sida(:,i)=inv(x'*x+lamda(:,i)*diag_r)*x'*y;
    norm_sita=norm(sida);
end

   Y=X1*sida; %向量化求得Y的值,无需放在for循环里
   hold on
   plot(X,Y(:,1),'r--')%lamda=0的情况
   plot(X,Y(:,2),'g--')%lamda=1的情况
   plot(X,Y(:,3),'b--')%lamda=10的情况
   legend('traning data', '\lambda=0', '\lambda=1','\lambda=10')%注意转义字符的使用方法
   hold off


 

 

  

        

       

你可能感兴趣的:(深度学习)