Machine Learning Exercise 1.1
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。完成以下任务:
- 生成正弦序列s(n);
- 使用噪声函数对正弦序列加噪x(n)=s(n)+w(n);
- 使用多项式回归模型对x(n)进行拟合,并分析过拟合和欠拟合情况;
注:参考误差函数式1-2,带正则项的修正误差函数式1-4,实验仿真生成图1-6、图1-7,给出模型系数表。1
2. 实验要求
- 本次作业是第一次编程作业,请大家运用所学的知识独立完成。
- 编程语言不限。
- 提交作业的时候需要提交一份报告(PDF格式)和代码,并打包到.zip,其中zip文件的命名格式为学号_姓名。
- 禁止抄袭。
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告一段落。
Bishop, ChristopherM. Pattern recognition and machine learning[M]. Academic Press, 2006. ↩︎
最小二乘拟合,L1、L2正则化约束(https://blog.csdn.net/u013164528/article/details/45042895) ↩︎
Machine Learning Exercise 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 ...
- 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 ...
- Machine Learning week 7 quiz: programming assignment-Support Vector Machines
一.ex6.m %% Machine Learning Online Class % Exercise 6 | Support Vector Machines % % Instructions % - ...
- 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 ...
- Machine Learning week 5 quiz: programming assignment-Multi-Neural Network Learning
一.ex4.m %% Machine Learning Online Class - Exercise 4 Neural Network Learning% Instructions % ------ ...
- 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 % --------- ...
- 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 ...
- Build a Machine Learning Portfolio(构建机器学习投资组合)
Complete Small Focused Projects and Demonstrate Your Skills (完成小型针对性机器学习项目,证明你的能力) A portfolio is ty ...
- An example machine learning notebook
原文地址 An example machine learning notebook Notebook by Randal S. Olson Supported by Jason H. Moore Un ...
最新文章
- java.lang.StackOverflowError 解决方法
- 《计算机视觉:模型、学习和推理》一3.6 正态逆伽马分布
- Universal-Image-Loader解析(二)——DisplayImageOptions的详细配置与简单的图片加载...
- 大道至简: 拉新、促活和留存
- 那个一年发四篇Cell的研究生,后来怎么样了?
- LeetCode题 - 26 删除排序数组中的重复项 python实现
- new、delete与malloc、free的详解
- 彻底告别“人工+Excel”低效模式,传统制造业实现“一站式”数据化管理
- python调用java完整教程
- vivado 开发教程(三) 在SDK中创建应用工程
- 8086c语言编译器,8086汇编语言编译器MKStudio安装使用教程
- python什么为假_Python返回真假值(True or False)小技巧
- 中国古代衣食住行 3
- windows虚拟摄像头开发
- 使用Windows自带的工具计算文件的 MD5 SHA1 SHA256
- Simple java里面的paint(Graphics g)的理解
- onsubmit函数触发事件
- 2022年流动式起重机司机考题及模拟考试
- D2550运行Linux,也发一个128*128的相框lcd4linux的conf
- Ansible 实战案例--Ansible Ad-Hoc 组件详解
热门文章
- npm 卡住 type-fest@^0.20.2 问题解决
- Unity Tutorial - Adventure Game
- educoder太原理工web程序设计——移动端电商页面制作
- BIM技术全过程咨询服务如何打响建筑革命?
- Java篇第七回——内部类与异常类
- 影响TWS耳机发展的五大关键技术
- matlab拉氏逆变换,偏微分方程的拉氏变换解法.ppt
- 支持自动打怪(内挂)的网游,更新日期15.3.2
- 现在自学Java可以找到工作吗?
- python实现剪刀石头布_用Python Tkinter实现剪刀石头布小游戏的方法