机器学习 最小二乘学习法 matlab

最小二乘法是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。具体来说,最小二乘法试图找到一条函数曲线,使得所有数据点到这条曲线的垂直距离(即误差)的平方和最小。

1. 数学描述

对于给定的一组数据点{(x1, y1), (x2, y2), ..., (xn, yn)},我们希望找到一个函数y = f(x),使得∑[f(xi) - yi]^2为最小。这里的f(x)是我们要找的函数,[f(xi) - yi]是第i个数据点的预测值f(xi)与实际值yi之间的误差。

2. 求解方法

最小二乘法的求解通常需要通过求解一组线性方程来完成。这组线性方程来自于对误差平方和的最小化。通过求解这组线性方程,我们可以得到函数f(x)的参数。

3. 应用

最小二乘法在许多领域都有应用,包括统计学、数据分析、机器学习等。在这些领域中,最小二乘法被用来拟合模型参数,例如在线性回归中,就是通过最小二乘法来确定线性模型的斜率和截距。

注意:最小二乘法假设误差是独立且服从正态分布的,这一假设在某些情况下可能不成立,这时就需要使用其他的优化方法。

 

rand('state',0);randn('state',0); % 设置随机数生成器的状态,确保结果可复现
n=50;N=1000; % n是训练数据的数量,N是测试数据的数量
x=linspace(-3,3,n)';X=linspace(-3,3,N)'; % 生成训练数据x和测试数据X
pix=pi*x;
y=sin(pix)./(pix)+0.1*x+0.05*randn(n,1); % 生成训练数据的目标值y

% 构造基函数集合
p(:,1)=ones(n,1);P(:,1)=ones(N,1); 
for j=1:15 
    P(:,2*j)=sin(j/2*X);P(:,2*j+1)=cos(j/2*X); 
    p(:,2*j)=sin(j/2*x);p(:,2*j+1)=cos(j/2*x);
end

t=p\y; % 使用最小二乘法求解参数t
F=P*t; % 计算预测值F

% 绘制结果
figure(1);clf;hold on;axis([-5 5 -2 2]);
plot(X,F,'g+'); % 绘制预测结果
plot(x,y,'bo'); % 绘制真实结果

给出的Matlab代码是使用最小二乘法进行函数拟合的过程,具体解释如下:

首先,生成了一组训练数据xyx是在-3到3之间均匀分布的50个点,y是根据函数sin(pi*x)/(pi*x) + 0.1*x + 0.05*randn(n,1)生成的,这是一个带有噪声的sinc函数。

然后,生成了一组测试数据X,它是在-3到3之间均匀分布的1000个点。

接下来,构造了一个包含15个正弦和余弦函数的基函数集合,用于拟合上述的sinc函数。

通过p\y,使用最小二乘法求解了模型的参数t

最后,使用求得的参数t和测试数据X计算了预测值F,并将预测结果和真实结果绘制在同一张图上。

这是一种基于最小二乘法的非线性回归方法,通过构造一组基函数来拟合非线性的目标函数。这种方法在机器学习中被广泛使用,特别是在处理回归问题时。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

samoyan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值