python机器学习MATLAB最小二乘法的两种解读
作者:slandarer 时间:2022-02-19 08:00:11
最小二乘法
大部分的最小二乘法公式推导,都是使用的 代价函数偏导 的方式来求得的,在这里首先展示如何通过代价函数求偏导的方式得到最小二乘公式,再展示李扬老师讲解的如何由向量到子空间的距离得来最小二乘法公式。
代价函数与最小二乘法
假设我们的拟合结果为:
则平方损失函数为:
平方损失函数的形式只有极小值,没有极大值,我们要使代价函数最小,我们要找到其极值点,即偏导均为0的点,代价函数对于各参数偏导如下:
令偏导为0得:
实际上若是令:
则有:
向量到子空间的距离与最小二乘法
最小二乘法与多项式拟合
以下展示自己编写最小二乘法拟合多项式与MATLAB自带函数 polyfit 拟合多项式的参数对比,注意,为了和MATLAB自带函数保持一致,θ向量变为第一个参数为 θn ,最后一个参数为 θo , X 矩阵也做了相应的调整:
% 最小二乘法多项式拟合
% 原三次函数+随机噪声
f=@(x)x.^3+6.*x.^2-2.*x+4+(rand(size(x))-.5).*20;
% 构造原始数据
x=-5:.1:5;
y=f(x);
% 自己写一个最小二乘
n=3;% 最高次数为三次
X=(x').^(n:-1:0);
theta1=((X'*X)\X'*y')';
% MATLAB自带多项式拟合
theta2=polyfit(x,y,n);
% 输出对比
disp(theta1)
disp(theta2)
% 一个小技巧,下面的写法能够快速将
% 参数向量变成有关x的多项式匿名函数
func=matlabFunction(poly2sym(theta1));
theta1=
0.9686 6.0178 -1.8845 4.3362
theta2=
0.9686 6.0178 -1.8845 4.3362
多项式拟合结果绘图:
% 绘图部分
% 保持坐标区域不刷新并添加网格
ax=gca;hold(ax,'on');grid(ax,'on');
% 绘制原数据点和拟合结果
plot(x,y,'o','MarkerFaceColor',[94,142,179]./255);
plot(x,func(x),'Color',[0,64,115]./255,'LineWidth',2);
% 修饰一下
ax.FontName='cambria';
ax.LineWidth=1.5;
ax.GridLineStyle='--';
ax.XColor=[1,1,1].*.3;
ax.YColor=[1,1,1].*.3;
ax.ZColor=[1,1,1].*.3;
最小二乘法与多元线性回归
以下展示自己编写最小二乘法进行多元线性回归与MATLAB自带函数 regress
进行多元线性回归的参数对比:
% 最小二乘法多元线性回归
% 原二元函数+随机噪声
f=@(x1,x2) 3.*x1+4.*x2+5+(rand(size(x1))-.5).*10;
% 构造原始数据
[x1,x2]=meshgrid(-5:.5:5,-5:.5:5);
y=f(x1,x2);
% 自己写一个最小二乘
X=[x1(:),x2(:),ones(size(x1(:)))];
theta1=((X'*X)\X'*y(:));
% MATLAB多元线性回归
theta2=regress(y(:),X);
% 输出对比
disp(theta1)
disp(theta2)
% 构造拟合结果的二元匿名函数
func=matlabFunction([sym('x1'),sym('x2'),1]*theta1);
theta1=
2.9285 4.0688 4.7520
theta2=
2.9285 4.0688 4.7520
多元线性回归结果绘图:
% 绘图部分
% 保持坐标区域不刷新并添加网格
ax=gca;hold(ax,'on');grid(ax,'on');
% 绘制原数据点和拟合结果
mesh(x1,x2,func(x1,x2),'FaceColor','flat','FaceAlpha',.8)
scatter3(x1(:),x2(:),y(:),20,'filled')
% 修饰一下
ax.FontName='cambria';
ax.LineWidth=1.5;
ax.GridLineStyle='--';
ax.XColor=[1,1,1].*.3;
ax.YColor=[1,1,1].*.3;
ax.ZColor=[1,1,1].*.3;
view(30,20)
来源:https://blog.csdn.net/slandarer/article/details/122373147
标签:python,MATLAB,机器学习,最小二乘法
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
Python实现将mp3音频格式转换为wav格式
2023-09-18 15:50:02
![](https://img.aspxhome.com/file/2023/7/62557_0s.png)
AJAX请求类下载
2007-08-23 08:33:00
表格艺术经典回顾
2013-07-14 11:11:04
如何将服务器端变量转换为客户端的变量?
2009-12-03 19:54:00
asp 在线备份与恢复sql server数据库的代码
2010-07-31 18:52:00
搜索系统与导航系统的关系
2009-09-08 12:44:00
豆瓣可以做而且值得做的几件事情
2009-04-24 12:07:00
ASP获取网址或当前地址代码
2008-04-07 20:19:00
CSS模块化设计—从空格谈起
2007-12-15 09:41:00
如何在ADO服务器端利用好缓存技术?
2010-06-17 12:49:00
页面自动刷新javascript代码大全
2010-06-28 18:54:00
ajax xmlhttp getResponseHeader实例教程
2009-02-04 10:46:00
[译]艺术和设计的差异 (1)
2009-09-25 12:38:00
如何处理好网页色彩搭配
2007-08-10 13:22:00
asp我对后台安全的一些做法
2011-09-01 19:22:09
讲解MaxDB数据库和MySQL的数据库的主要差别
2012-02-25 20:04:34
2008圣诞节网站特色Logo不完全点评
2008-12-25 18:35:00
![](https://img.aspxhome.com/file/UploadPic/up/1-shengdanjie.jpg)
如何用拦截表单的方法上传图片?
2010-06-16 09:50:00
Python多重继承的方法解析执行顺序实例分析
2021-06-08 04:34:51
![](https://img.aspxhome.com/file/2023/3/65983_0s.png)
MySQL 数值类型概述int smallint tinyint
2010-11-02 11:46:00