经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » MATLAB » 查看文章
python机器学习MATLAB最小二乘法的两种解读
来源:jb51  时间:2022/2/9 11:18:06  对本文有异议

最小二乘法

大部分的最小二乘法公式推导,都是使用的 代价函数偏导 的方式来求得的,在这里首先展示如何通过代价函数求偏导的方式得到最小二乘公式,再展示李扬老师讲解的如何由向量到子空间的距离得来最小二乘法公式。

代价函数与最小二乘法

假设我们的拟合结果为:

则平方损失函数为:

平方损失函数的形式只有极小值,没有极大值,我们要使代价函数最小,我们要找到其极值点,即偏导均为0的点,代价函数对于各参数偏导如下:

令偏导为0得:

实际上若是令:

则有:

向量到子空间的距离与最小二乘法

最小二乘法与多项式拟合

以下展示自己编写最小二乘法拟合多项式与MATLAB自带函数 polyfit 拟合多项式的参数对比,注意,为了和MATLAB自带函数保持一致,θ向量变为第一个参数为 θn  ,最后一个参数为 θo  , X 矩阵也做了相应的调整:

  1. % 最小二乘法多项式拟合
  2. % 原三次函数+随机噪声
  3. f=@(x)x.^3+6.*x.^2-2.*x+4+(rand(size(x))-.5).*20;
  4. % 构造原始数据
  5. x=-5:.1:5;
  6. y=f(x);
  7. % 自己写一个最小二乘
  8. n=3;% 最高次数为三次
  9. X=(x').^(n:-1:0);
  10. theta1=((X'*X)\X'*y')';
  11. % MATLAB自带多项式拟合
  12. theta2=polyfit(x,y,n);
  13. % 输出对比
  14. disp(theta1)
  15. disp(theta2)
  16. % 一个小技巧,下面的写法能够快速将
  17. % 参数向量变成有关x的多项式匿名函数
  18. func=matlabFunction(poly2sym(theta1));

 theta1=
0.9686 6.0178 -1.8845 4.3362
theta2=
0.9686 6.0178 -1.8845 4.3362

多项式拟合结果绘图:

  1. % 绘图部分
  2. % 保持坐标区域不刷新并添加网格
  3. ax=gca;hold(ax,'on');grid(ax,'on');
  4. % 绘制原数据点和拟合结果
  5. plot(x,y,'o','MarkerFaceColor',[94,142,179]./255);
  6. plot(x,func(x),'Color',[0,64,115]./255,'LineWidth',2);
  7. % 修饰一下
  8. ax.FontName='cambria';
  9. ax.LineWidth=1.5;
  10. ax.GridLineStyle='--';
  11. ax.XColor=[1,1,1].*.3;
  12. ax.YColor=[1,1,1].*.3;
  13. ax.ZColor=[1,1,1].*.3;

最小二乘法与多元线性回归

以下展示自己编写最小二乘法进行多元线性回归与MATLAB自带函数 regress 进行多元线性回归的参数对比:

  1. % 最小二乘法多元线性回归
  2. % 原二元函数+随机噪声
  3. f=@(x1,x2) 3.*x1+4.*x2+5+(rand(size(x1))-.5).*10;
  4. % 构造原始数据
  5. [x1,x2]=meshgrid(-5:.5:5,-5:.5:5);
  6. y=f(x1,x2);
  7. % 自己写一个最小二乘
  8. X=[x1(:),x2(:),ones(size(x1(:)))];
  9. theta1=((X'*X)\X'*y(:));
  10. % MATLAB多元线性回归
  11. theta2=regress(y(:),X);
  12. % 输出对比
  13. disp(theta1)
  14. disp(theta2)
  15. % 构造拟合结果的二元匿名函数
  16. func=matlabFunction([sym('x1'),sym('x2'),1]*theta1);

theta1=
2.9285 4.0688 4.7520
theta2=
2.9285 4.0688 4.7520

多元线性回归结果绘图:

  1. % 绘图部分
  2. % 保持坐标区域不刷新并添加网格
  3. ax=gca;hold(ax,'on');grid(ax,'on');
  4. % 绘制原数据点和拟合结果
  5. mesh(x1,x2,func(x1,x2),'FaceColor','flat','FaceAlpha',.8)
  6. scatter3(x1(:),x2(:),y(:),20,'filled')
  7. % 修饰一下
  8. ax.FontName='cambria';
  9. ax.LineWidth=1.5;
  10. ax.GridLineStyle='--';
  11. ax.XColor=[1,1,1].*.3;
  12. ax.YColor=[1,1,1].*.3;
  13. ax.ZColor=[1,1,1].*.3;
  14. view(30,20)

以上就是python机器学习MATLAB最小二乘法的两种解读的详细内容,更多关于MATLAB最小二乘法解读的资料请关注w3xue其它相关文章!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号