Machine Learning Exercise 1.1


目录

  • Machine Learning Exercise 1.1
    • 1. 实验题目:编写程序模拟仿真多项式回归
    • 2. 实验要求
    • 3. 实验过程及代码
    • 4.实验结果及分析
      • Figure 1.6的重现
      • Figure 1.7的重现
    • 5.实验总结

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





2. 实验要求

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

3. 实验过程及代码

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

  • 在CSDN上寻得参考文章,了解到对于最小二乘的拟合曲线有矩阵解法:
    其中YYY为列向量,XXX为N∗KN*KN∗K的矩阵,WWW为K∗1K*1K∗1的行向量
    min∑(yi−y^i)2=min∥Y−XW∥=(YT−WTXT)(Y−XW)=YTY−YTXW−WTXTY+WTXTXW=YTY−2YTXW+WTXTXW令偏导∂∂W=−2YXT+2WTXTX=0求得W=(XTX)−1XTYmin\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∑(yi​−y^​i​)2=min∥Y−XW∥=(YT−WTXT)(Y−XW)=YTY−YTXW−WTXTY+WTXTXW=YTY−2YTXW+WTXTXW令偏导∂W∂​=−2YXT+2WTXTX=0求得W=(XTX)−1XTY
  • 同理,对于L2正则项,有:
    min∥Y−XW∥+λ2∥W∥22=(YT−WTXT)(Y−XW)+λ2WTW=YTY−YTXW−WTXTY+WTXTXW+λ2WTW=YTY−2YTXW+WTXTXW+λ2WTW令偏导∂∂W=−2YXT+2WTXTX+λWT=0求得W=(XTX+λ2I)−1XTYmin \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 min∥Y−XW∥+2λ​∥W∥22​=(YT−WTXT)(Y−XW)+2λ​WTW=YTY−YTXW−WTXTY+WTXTXW+2λ​WTW=YTY−2YTXW+WTXTXW+2λ​WTW令偏导∂W∂​=−2YXT+2WTXTX+λWT=0求得W=(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:MX = [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的情况下分别得到以下结果:



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

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

Figure 1.7的重现

  • 在上一个实验中,我们将lambda的值设定为0,以使用不带L2正则项的退化解。
  • 现在,我们设定lambda的值,并通过将生成数据点的代码:
% x = s + w;                      % 生成数据点
  • 这一行注释掉,从而实现每次运行的数据是固定的。在这个实验中,我们将设定lambda分别为1.52299797e-8和1,从而模拟Figure 1.7中的lnλ=−18ln \lambda=-18lnλ=−18和lnλ=0ln \lambda=0lnλ=0,为了使实验对比更明显,这里的M值我们设定为4。结果如下:



  • 我们可以看到,随着λ\lambdaλ值的增大,我们得到的拟合函数与实际的原函数相似性就越低。这是因为我们的L2正则项对参数进行了一种“惩罚”,使得我们得到的函数与数据点相似而又不至于过于拟合。为了说明这一点,我们增加一些实验,其他实验条件不变,将M值增加至9,这样W会有10个自由度从而会获得一个过拟合的结果:
  • 当我们增大λ\lambdaλ的时候,很明显可以看出,过拟合趋势经过“惩罚”被削弱了。
  • 由此我们可以看出,当参数过多以至于能够与实验数据量相比的时候,可以通过加入正则化来使拟合过程不至于过度。

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) ↩︎

Machine Learning Exercise 1.1相关推荐

  1. Machine Learning week 9 quiz: programming assignment-Anomaly Detection and Recommender Systems

    一.ex8.m %% Machine Learning Online Class % Exercise 8 | Anomaly Detection and Collaborative Filterin ...

  2. Machine Learning week 8 quiz: programming assignment-K-Means Clustering and PCA

    一.ex7.m %% Machine Learning Online Class % Exercise 7 | Principle Component Analysis and K-Means Clu ...

  3. Machine Learning week 7 quiz: programming assignment-Support Vector Machines

    一.ex6.m %% Machine Learning Online Class % Exercise 6 | Support Vector Machines % % Instructions % - ...

  4. Machine Learning week 6 quiz: programming assignment-Regularized Linear Regression and Bias/Variance

    一.ex5.m %% Machine Learning Online Class % Exercise 5 | Regularized Linear Regression and Bias-Varia ...

  5. Machine Learning week 5 quiz: programming assignment-Multi-Neural Network Learning

    一.ex4.m %% Machine Learning Online Class - Exercise 4 Neural Network Learning% Instructions % ------ ...

  6. Machine Learning week 4 quiz: programming assignment-Multi-class Classification and Neural Networks

    一.ex3.m %% Machine Learning Online Class - Exercise 3 | Part 1: One-vs-all% Instructions % --------- ...

  7. Machine Learning week 3 quiz: programming assignment-Logistic Regression

    一.ex2.m: the main .m file to call other function files % matlab%% Machine Learning Online Class - Ex ...

  8. Build a Machine Learning Portfolio(构建机器学习投资组合)

    Complete Small Focused Projects and Demonstrate Your Skills (完成小型针对性机器学习项目,证明你的能力) A portfolio is ty ...

  9. An example machine learning notebook

    原文地址 An example machine learning notebook Notebook by Randal S. Olson Supported by Jason H. Moore Un ...

最新文章

  1. java.lang.StackOverflowError 解决方法
  2. 《计算机视觉:模型、学习和推理》一3.6 正态逆伽马分布
  3. Universal-Image-Loader解析(二)——DisplayImageOptions的详细配置与简单的图片加载...
  4. 大道至简: 拉新、促活和留存
  5. 那个一年发四篇Cell的研究生,后来怎么样了?
  6. LeetCode题 - 26 删除排序数组中的重复项 python实现
  7. new、delete与malloc、free的详解
  8. 彻底告别“人工+Excel”低效模式,传统制造业实现“一站式”数据化管理
  9. python调用java完整教程
  10. vivado 开发教程(三) 在SDK中创建应用工程
  11. 8086c语言编译器,8086汇编语言编译器MKStudio安装使用教程
  12. python什么为假_Python返回真假值(True or False)小技巧
  13. 中国古代衣食住行 3
  14. windows虚拟摄像头开发
  15. 使用Windows自带的工具计算文件的 MD5 SHA1 SHA256
  16. Simple java里面的paint(Graphics g)的理解
  17. onsubmit函数触发事件
  18. 2022年流动式起重机司机考题及模拟考试
  19. D2550运行Linux,也发一个128*128的相框lcd4linux的conf
  20. Ansible 实战案例--Ansible Ad-Hoc 组件详解

热门文章

  1. npm 卡住 type-fest@^0.20.2 问题解决
  2. Unity Tutorial - Adventure Game
  3. educoder太原理工web程序设计——移动端电商页面制作
  4. BIM技术全过程咨询服务如何打响建筑革命?
  5. Java篇第七回——内部类与异常类
  6. 影响TWS耳机发展的五大关键技术
  7. matlab拉氏逆变换,偏微分方程的拉氏变换解法.ppt
  8. 支持自动打怪(内挂)的网游,更新日期15.3.2
  9. 现在自学Java可以找到工作吗?
  10. python实现剪刀石头布_用Python Tkinter实现剪刀石头布小游戏的方法