Machine Learning Exercise 1.1

Machine Learning Exercise 1.1



1. 实验题目:编写程序模拟仿真多项式回归

参见textbook p4-12。完成以下任务:

  1. 生成正弦序列s(n);
  2. 使用噪声函数对正弦序列加噪x(n)=s(n)+w(n);
  3. 使用多项式回归模型对x(n)进行拟合,并分析过拟合和欠拟合情况;

注:参考误差函数式1-2,带正则项的修正误差函数式1-4,实验仿真生成图1-6、图1-7,给出模型系数表。1

1.2
1.4
Figure1.6
Figure1.7


2. 实验要求

  1. 本次作业是第一次编程作业,请大家运用所学的知识独立完成。
  2. 编程语言不限。
  3. 提交作业的时候需要提交一份报告(PDF格式)和代码,并打包到.zip,其中zip文件的命名格式为学号_姓名。
  4. 禁止抄袭。

3. 实验过程及代码

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。2

  • 在CSDN上寻得参考文章,了解到对于最小二乘的拟合曲线有矩阵解法:
    其中 Y Y Y为列向量, X X X N ∗ K N*K NK的矩阵, W W W K ∗ 1 K*1 K1的行向量
    m i n ∑ ( y i − y ^ i ) 2 = m i n ∥ Y − X W ∥ = ( Y T − W T X T ) ( Y − X W ) = Y T Y − Y T X W − W T X T Y + W T X T X W = Y T Y − 2 Y T X W + W T X T X W 令 偏 导 ∂ ∂ W = − 2 Y X T + 2 W T X T X = 0 求 得 W = ( X T X ) − 1 X T Y min\sum (y_i - \hat y_i)^2 = min \Vert {Y-XW}\Vert \\ =(Y^T-W^TX^T)(Y-XW) \\ =Y^TY-Y^TXW-WTXTY+W^TX^TXW \\ =Y^TY-2Y^TXW+W^TX^TXW \\ \quad \\ 令偏导\frac{\partial}{\partial W} = -2YX^T+2W^TX^TX=0 \\ \quad \\ 求得W=(X^TX)^{-1}X^TY min(yiy^i)2=minYXW=(YTWTXT)(YXW)=YTYYTXWWTXTY+WTXTXW=YTY2YTXW+WTXTXWW=2YXT+2WTXTX=0W=(XTX)1XTY
  • 同理,对于L2正则项,有:
    m i n ∥ Y − X W ∥ + λ 2 ∥ W ∥ 2 2 = ( Y T − W T X T ) ( Y − X W ) + λ 2 W T W = Y T Y − Y T X W − W T X T Y + W T X T X W + λ 2 W T W = Y T Y − 2 Y T X W + W T X T X W + λ 2 W T W 令 偏 导 ∂ ∂ W = − 2 Y X T + 2 W T X T X + λ W T = 0 求 得 W = ( X T X + λ 2 I ) − 1 X T Y min \Vert {Y-XW}\Vert +\frac {\lambda}{2} \Vert W \Vert_2^2 \\ =(Y^T-W^TX^T)(Y-XW) +\frac {\lambda}{2} W^TW\\ =Y^TY-Y^TXW-WTXTY+W^TX^TXW +\frac {\lambda}{2} W^TW\\ =Y^TY-2Y^TXW+W^TX^TXW +\frac {\lambda}{2} W^TW\\ \quad \\ 令偏导\frac{\partial}{\partial W} = -2YX^T+2W^TX^TX+\lambda W^T=0 \\ \quad \\ 求得W=(X^TX+\frac {\lambda}{2}I)^{-1}X^TY minYXW+2λW22=(YTWTXT)(YXW)+2λWTW=YTYYTXWWTXTY+WTXTXW+2λWTW=YTY2YTXW+WTXTXW+2λWTWW=2YXT+2WTXTX+λWT=0W=(XTX+2λI)1XTY
  • 希望我这里的计算没有错
  • λ = 0 \lambda=0 λ=0时上式退化为无L2正则项的解。
  • 用matlab实现为:
    W = inv(X'*X+lambda/2*eye(size(X))*X'*Y

4.实验结果及分析

根据公式编写matlab实验代码如下:

% Homework File Name: hw1_1.m
% 实验环境: MATLAB R2015b
% 实验任务: 模拟仿真多项式回归
close all;                      % 关闭所有窗口以便刷新显示缓存

% 定义一些参数

matter = 10;                    % 颗粒数量
lambda = 0;                     % L2正则项系数
M = 9;                          % 最高次项幂
c = 0.5;                        % 随机噪声调节系数
n = linspace(0, 2, matter);     % 生成横坐标序列
X_ = n;                         % 生成横坐标及其各次幂
X = ones(1, matter);
for i=1:M
   X = [X; (X_.^i)]; 
end
X = X';
W = zeros(M+1, 1);
w = c*(-0.5+rand(1,matter));    % 生成噪声
s = sin(pi*n);                  % 生成正弦序列
x = s + w;                      % 生成数据点
Y = x';

% 开始运算

% W = inv(X'*X+lambda/2*eye(M+1))*X'*Y
% 编程时此处提示使用A\b代替inv(A)*b
% 实验中inv(A)*b得到的结果具有较大偏差

W = (X'*X+lambda/2*eye(M+1))\X'*Y;
W = flip(W');			% 得到各参数的值
p = polyfit(n, x, M);		% 标准拟合结果
x_1 = linspace(0,2);
y_1 = polyval(p, x_1);
y_3 = polyval(W, x_1);

% 将运算结果图形化显示

figure                          % 创建默认显示窗口
hold on
plot(n, x, 'bo',...
    'LineWidth', 2,...
    'MarkerSize',8)             % 显示数据点
plot(x_1, sin(pi*x_1), 'g',...
    'LineWidth', 2)             % 显示标准曲线
plot(x_1, y_3, 'r',...
    'LineWidth', 2)             % 显示我的拟合结果
% plot(x_1, y_1, 'g--',...
%     'LineWidth', 2)           % 显示标准拟合结果
xlabel('x')
ylabel('y')
xlim([-0.2,2+0.2])
ylim([-1-c-0.1, 1+c+0.1])
legend('datapoint', 'y', 'y\_result')

Figure 1.6的重现

  • 在数据点数量matter=[15, 100], 最高次系数M=9的情况下分别得到以下结果:
    1.6a
    1.6a_param
    1.6b
    1.6b_param

  • 可以看到,当数据点数与参数数目相近的时候,拟合结果会更加“切合”数据点数,这种情况我们认为其过拟合。过拟合情况下得到的函数与实际函数偏离较为明显,在估算结果的时候将更多得到较大误差。

  • 当数据点数远大于参数数目的时候,在随机分布的情况下,其值往往能够让拟合函数更多地贴近实际函数,同样能得到一个较好的估算结果。

Figure 1.7的重现

  • 在上一个实验中,我们将lambda的值设定为0,以使用不带L2正则项的退化解。
  • 现在,我们设定lambda的值,并通过将生成数据点的代码:
% x = s + w;                      % 生成数据点
  • 这一行注释掉,从而实现每次运行的数据是固定的。在这个实验中,我们将设定lambda分别为1.52299797e-8和1,从而模拟Figure 1.7中的 l n λ = − 18 ln \lambda=-18 lnλ=18 l n λ = 0 ln \lambda=0 lnλ=0,为了使实验对比更明显,这里的M值我们设定为4。结果如下:
    1.7a
    1.7a_param
    1.7b
    在这里插入图片描述
  • 我们可以看到,随着 λ \lambda λ值的增大,我们得到的拟合函数与实际的原函数相似性就越低。这是因为我们的L2正则项对参数进行了一种“惩罚”,使得我们得到的函数与数据点相似而又不至于过于拟合。为了说明这一点,我们增加一些实验,其他实验条件不变,将M值增加至9,这样W会有10个自由度从而会获得一个过拟合的结果:
    1.7d
  • 当我们增大 λ \lambda λ的时候,很明显可以看出,过拟合趋势经过“惩罚”被削弱了。
    1.7e
  • 由此我们可以看出,当参数过多以至于能够与实验数据量相比的时候,可以通过加入正则化来使拟合过程不至于过度。

5.实验总结

  • 本次实验是一个比较基础的函数拟合实验,在本实验中,采用了最小二乘法对经由正弦序列+噪声函数随机生成的数据点进行多项式线性函数拟合。在实验中我们发现,参数数量一定的情况下,过少的数据点会导致函数出现“过拟合”的现象,通过增加数据点的数量,我们找到了一个适合的方案解决过拟合问题。但更多的情况下,数据的获取具有一定难度,不一定能在数量上创造环境,于是我们尝试了另一种方法,通过在估量函数上增加一个正值(参数W的L2正则量),使其更容易达到估值满意点,从而实现“不那么完全拟合”的拟合函数,从另一个角度尝试解决过拟合问题。
  • 虽然两种方法在一定程度上解决了过拟合问题,但在实际运用中,仍需要根据实际情况选择解决方案及对应的参数,至此,Machine Learning Exercise 1.1告一段落。

  1. Bishop, ChristopherM. Pattern recognition and machine learning[M]. Academic Press, 2006. ↩︎

  2. 最小二乘拟合,L1、L2正则化约束(https://blog.csdn.net/u013164528/article/details/45042895) ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值