1 资料搜索
最小二乘法(least sqaure method)(作者总结很详细)
2 本人总结
首先我们应该清楚为什么会出现最小二乘法呢,主要是我们在数学或者实际求解数学问题的时候,往往会遇到我们会拿到一堆数据。但是我们不知道该数据对应的函数,所以我们这时候需要根据已知数据来求其对应的函数。而在这种问题的需求的情况下,出现了最小二乘法。
2.1 最小二乘法理论知识
2.1.1 概念
最小二乘法是勒让德在19世纪的时候提出,对应的公式为,其中
对应的是目标函数,
对应我们已知的真值,L对应误差值。进行数据拟合的过程中,就是要实现L误差值最小化。
2.1.2 公式推导
最小二乘法的求解方法,就是对公式进行导数求解,下面通过举例来说明求解的过程。
我们假设函数
将其转化为矩阵的方式
其中为m X 1的向量,A为n X 1的列向量,X为m X n维向量
根据2.1.1中的方程,我们可以得到损失函数,其中Y为我们已知的函数值,这里多出的
主要为了后面求导数后系数为1。因此,
经过整理后可以得到,
2.1.3 局限性
并不是所有的情况下,都可以行都可以使用最小二乘法,其中包括数据量比较大、矩阵不可逆、目标函数不是线性函数的情况下。
(1) 数据量比较大情况下:这步矩阵求逆的运算比较耗时,建议超过10000个特征的时候不要使用最小二乘法,而使用梯度下降的方法;
(2) 矩阵不可逆的情况下,一个方法是通过将不可逆矩阵根据数据整理,得到可逆矩阵;或者使用梯度下降方法;
(3) 目标函数不是线性函数,一个方法是通过通过降维转化为线性函数;或者使用梯度下降方法;
3.1 matlab实现最小二乘法
clear
clc
x = [2,4,5,6,7.8,7.8,9,12,13.3,17];
y = [-10,-11.9,-4.2,-2,0,2.1,3,5.2,6.4,4.5];
[~,k]=size(x);
for n=1:2
X = zeros(n+1, k); %创建方程大小 n+1行,k列
for col = 1:k %写入数据
for row = 1:n+1
X(row,col)=x(col)^(n + 1- row);
end
end
X = X'; %转秩操作
ANSS = (X'*X)\X'*y'; %求解方程(X'*X)\X 与 inv(X'*X)* X'操作相同
Xtmp = 0:0.1:17;
Ytmp = ANSS(1) * Xtmp.^n; %根据求得的系数初始化并构造多项式方程
for num = 2:1:n+1
Ytmp = Ytmp + ANSS(num) * Xtmp.^(n+1-num);
end
subplot(1,2,n)
plot(x,y,'*') %打印输入数据的分布
hold on
plot(Xtmp,Ytmp) %打印几何后的函数
end
suptitle('分别为1阶和2阶函数情况下,拟合结果')
实现效果
但是当阶数为4阶时,进行数据拟合,得到下面的结果:
根据图形可以看出,在拟合的过程中,出现了过拟合现象。针对过拟合现象我们一般采用这则化的方式,来对数据拟合来施加约束,关于正则化的讲解,我们可以参考下面链接。
了解更多关于《计算机视觉与图形学》相关知识,请关注公众号:
下载我们视频中代码和相关讲义,请在公众号回复:计算机视觉课程资料