最小二乘法是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。具体来说,最小二乘法试图找到一条函数曲线,使得所有数据点到这条曲线的垂直距离(即误差)的平方和最小。
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代码是使用最小二乘法进行函数拟合的过程,具体解释如下:
首先,生成了一组训练数据x
和y
,x
是在-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
,并将预测结果和真实结果绘制在同一张图上。
这是一种基于最小二乘法的非线性回归方法,通过构造一组基函数来拟合非线性的目标函数。这种方法在机器学习中被广泛使用,特别是在处理回归问题时。