Regularization线性回归练习

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

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

        模型表达式为:

            

         代价函数:

       

 

        模型的normal equation求解为:

   

        实验实现

        %加载数据

        数据下载: 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');

       

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

     

          可以看出,当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


 

 

  

        

       

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值