python机器学习MATLAB最小二乘法的两种解读
作者:slandarer 发布时间:2022-02-19 08:00:11
标签:python,MATLAB,机器学习,最小二乘法
最小二乘法
大部分的最小二乘法公式推导,都是使用的 代价函数偏导 的方式来求得的,在这里首先展示如何通过代价函数求偏导的方式得到最小二乘公式,再展示李扬老师讲解的如何由向量到子空间的距离得来最小二乘法公式。
代价函数与最小二乘法
假设我们的拟合结果为:
则平方损失函数为:
平方损失函数的形式只有极小值,没有极大值,我们要使代价函数最小,我们要找到其极值点,即偏导均为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语言的一大优势:为科学计算提供了大量的支持功能,math模块提供了很多数学计算函数。math模块定义了一些数学模块,这个模块属于
- 实验目的:用socket 模拟一个微型的web服务器,当py脚本run起后,实微型web server架起了,然后用本地浏览器访问
- 一、搭建项目环境1、创建 RBAC五张表RBAC,即基于角色的权限访问控制(Role-Based Access Control),就是用户通
- 动态渲染就是有一个异步的数据,大概长这样:{ "inline": true, "labelPosition&q
- 阅读上一篇:FrontPage2002简明教程七:HTML在FrontPage中的应用 FrontPage 2002比起以前版本的FronP
- 总结常用基本点如下: 1、触发器有两种类型:数据定义语言触发器(DDL触发器)和数据操纵语言触发器(DML触发器)。 DDL触发器:在用户对
- Python处理json字符串中的非法双引号工作中数据清洗时遇到以下情况:a = '{"地区": "湖
- 方法一:mylist = [1,2,2,2,2,3,3,3,4,4,4,4]myset = set(mylist)for item in m
- 新建一个项目之后,我们来看一下项目的目录结构几个主要文件的内容index.html文件(入口文件,系统进入之后先进入index.html)&
- 获得当前机器的名字:def hostname(): sy
- 前言Windows10 在 UWP 应用中支持亚克力画刷,可以在部件的底部绘制亚克力效果的背景图。下面我们使用 QLabel 来模拟这个磨砂
- 会用到的库的1、selenium的webdriver2、tesserocr或者pytesseract进行图像识别3、pillow的Image
- Matplotlib介绍Matplotlib 是一款用于数据可视化的 Python 软件包,支持跨平台运行,它能够根据 NumPy 
- ARP欺骗又称ARP毒化或ARP攻击,是针对以太网地址解析协议ARP的一种攻击技术,通过欺骗局域网内访问者PC的网关MAC地址,使访问者PC
- python装饰器就是用于扩展原函数功能的一种函数,这个函数特殊的地方就是它的返回值也是一个函数,使用Python装饰器的一个好处就是:在不
- 对于xml2ddl项目,Freshmeat.org提供了一整套基于GNU或者GPL通用公共许可证下的Python程序。在一个运行的Pytho
- 1.视图的概述 视图其实就是一条查询sql语句,用于显示一个或多个表或其他视图中的相关数据。视图将一个查询的结果作为一个表来使用,因此视图可
- 1.断点调试是啥?难不难?断点调试其实并不是多么复杂的一件事,简单的理解无外呼就是打开浏览器,打开sources找到js文件,在行号上点一下
- 不喜欢Python的人经常会吐嘈Python运行太慢。但是,事实并非如此。尝试以下六个窍门,来为你的Python应用提速。窍门一:关键代码使
- 前言thinkphp3.1.2 需要使用cli方法运行脚本折腾了一天才搞定3.1.2的版本真的很古老解决增加cli.php入口文件defin