最小二乘拟合算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最小二乘拟合算法

最小二乘定义

一般情况下,最小二乘问题求的是使某一函数局部最小的向量 x,函数具有平方和的形式,求解可能需要满足一定的约束:

信赖域反射最小二乘

要理解信赖域优化方法,请考虑无约束最小化问题,最小化 f(x),该函数接受向量参数并返回标量。假设您现在位于 n 维空间中的点 x 处,并且您要寻求改进,即移至函数值较低的点。基本思路是用较简单的函数 q 来逼近 f,该函数需能充分反映函数 f 在点 x 的邻域 N 中的行为。此邻域是信赖域。试探步 s 是通过在 N 上进行最小化(或近似最小化)来计算的。以下是信赖域子问题

如果f(x + s) < f(x),当前点更新为 x + s;否则,当前点保持不变,信赖域 N 缩小,算法再次计算试探步。

在定义特定信赖域方法以最小化 f(x) 的过程中,关键问题是如何选择和计算逼近 q(在当前点 x 上定义)、如何选择和修改信赖域 N,以及如何准确求解信赖域子问题。

在标准信赖域方法中,二次逼近 q 由 F 在 x 处的泰勒逼近的前两项定义;邻域 N 通常是球形或椭圆形。以数学语言表述,信赖域子问题通常写作

公式2

其中,g 是 f 在当前点 x 处的梯度,H 是 Hessian 矩阵(二阶导数的对称矩阵),D 是对角缩放矩阵,Δ是正标量,∥ . ∥是 2-范数。此类算法通常涉及计算 H 的所有特征值,并将牛顿法应用于以下久期方程

它们要耗费与 H 的几个分解成比例的时间,因此,对于信赖域问题,需要采取另一种方法。Optimization Toolbox 求解器采用的逼近方法是将信赖域子问题限制在二维子空间 S 内。一旦计算出子空间 S,即使需要完整的特征值/特征向量信息,求解的工作量也不大(因为在子空间中,问题只是二维的)。现在的主要工作已转移到子空间的确定上。二维子空间 S 是借助下述预条件共轭梯度法确定的。求解器将 S 定义为由 s1 和 s2 确定的线性空间,其中 s1 是梯度 g 的方向,s2 是近似牛顿方向,即下式的解

或是负曲率的方向,

以此种方式选择 S 背后的理念是强制全局收敛(通过最陡下降方向或负曲率方向)并实现快速局部收敛(通过牛顿步,如果它存在)。

现在,我们可以很容易地给出基于信赖域的无约束最小化的大致框架:

1.构造二维信赖域子问题。

2.求解公式 2 以确定试探步 s。

3.如果f(x + s) < f(x),则x = x + s。

4.调整Δ

重复这四个步骤,直到收敛。信赖域维度Δ根据标准规则进行调整。具体来说,它会在试探步不被接受(即f(x + s) ≥ f(x))时减小。

大规模非线性最小二乘

f(x) 的一个重要特例是非线性最小二乘问题

其中,F(x) 是向量值函数,F(x) 的分量 i 等于 fi(x)。用于求解此问题的基本方法与非线性最小化信赖域方法中所述的一般情况相同。不过,我们可以充分利用非线性最小二乘问题的结构来提高效率。具体来说,就是使用近似高斯-牛顿方向,即下式的解 s

(其中 J 是 F(x) 的 Jacobian 矩阵)来定义二维子空间 S。此处不使用分量函数 fi(x) 的二阶导数。

每次迭代中,算法都使用预条件共轭梯度法来近似求解标准方程,即

Lsqcurvefit-非线性最小二乘求解器

找到求解以下问题的系数 x

给定输入数据 xdata,观察到的输出 ydata,其中 xdata 和 ydata 是矩阵或向量,F (x, xdata) 是与 ydata 大小相同的矩阵值或向量值函数。

x = lsqcurvefit(fun,x0,xdata,ydata,lb,ub,options)

(可选)x 的分量可以有下界和上界,即 lb 和 ub。参数 x、lb 和 ub 可以是向量或矩阵;lsqcurvefit 函数使用与lsqnonlin 相同的算法。lsqcurvefit 只是为数据拟合问题提供一个方便的接口。

fun-要拟合的函数,要拟合的函数,指定为函数句柄或函数名称。fun 函数采用两个输入:向量或矩阵x,以及向量或矩阵xdata。fun 返回向量或矩阵F,即

在x 和xdata 处计算的目标函数。fun 应返回fun(x,xdata),而不是平方

和sum((fun(x,xdata)-ydata).^2)。lsqcurvefit 隐式计算fun(x,xdata)-ydata 的分量的平方和。

X0-初始点,指定为实数向量或实数数组。求解器使用x0 中的元素数量和x0 的大小来确定fun 接受的变量数量和大小。

Xdata-模型的输入数据,模型的输入数据,指定为实数向量或实数数组。模型是

ydata = fun(x,xdata),其中,xdata 和ydata 是固定数组,x 是lsqcurvefit 寻求最小平方和时要更改的参数所组成的数组。

Ydata-模型响应数据,模型的响应数据,指定为实数向量或实数数组。模型是

ydata = fun(x,xdata),其中,xdata 和ydata 是固定数组,x 是lsqcurvefit 寻求最小平方和时要更改的参数所组成的数组。ydata 数组的大小和形状必须

与fun(x0,xdata) 数组相同。

Lb-下界,指定为实数向量或实数数组。如果x0 中的元素数等于lb 中的元素数,则lb 指定x(i) >= lb(i)(对于全部i)。如果numel(lb) < numel(x0),则lb 指定x(i) >= lb(i)

(1 <= i <= numel(lb))。如果lb 中的元素数少于x0 中的元素数,求解器会发出警告。

Ub-上界,指定为实数向量或实数数组。如果x0 中的元素数等于ub 中的元素数,则ub 指定x(i) <= ub(i)(对于全部i)。如果numel(ub) < numel(x0),则ub 指定x(i) <= ub(i)

(1 <= i <= numel(ub))。如果ub 中的元素数少于x0 中的元素数,求解器会发出警告。

lsqcurvefit 要求基于用户定义的函数来计算向量值函数,而不是计算平方和

x = lsqcurvefit(fun,x0,xdata,ydata) 从x0 开始,求取合适的系数x,使非线性函数fun(x,xdata) 对数据ydata 的拟合最佳(基于最小二乘指标)。ydata 必须与fun 返回的向量(或矩阵)F 大小相同。

线性拟合底层数学原理:

使偏差平方和最小的原则称为最小二乘原则,按照该原则拟合曲线称为最小二乘法。首先我了解了线性回归相关数学原理。

线性回归:线性回归假设数据集中特征与结果存在着线性关系;等式:y = mx + c

y为结果,x为特征,m为系数,c为误差在数学中m为梯度c为截距。这个等式为我们假设的,我们需要找到m、c使得mx+c得到的结果与真实的y误差最小,这里使用平方差来衡量估计值与真实值得误差(如果只用差值就可能会存在负数);用于计算真实值与预测值

相关文档
最新文档