曲线拟合工具箱™软件在拟合数据时采用最小二乘法。拟合需要一个参数模型,将响应数据与具有一个或多个系数的预测数据关联起来。拟合过程的结果是对模型系数的估计。
为了获得系数估计值,最小二乘法使残差的平方和最小。剩余的
残差的平方和由
在哪里
线性最小二乘
加权线性最小二乘
鲁棒最小二乘
非线性最小二乘
当拟合包含随机变化的数据时,通常会对误差做出两个重要的假设:
错误只存在于响应数据中,而不存在于预测器数据中。
误差是随机的,服从均值为零、方差为常数的正态(高斯)分布,
第二个假设通常被表述为
误差被假定为正态分布,因为正态分布通常提供了对许多测量量的分布的适当的近似。尽管最小二乘拟合方法在计算参数估计时不假定正态分布误差,但该方法最适用于不包含大量具有极端值的随机误差的数据。正态分布是极端随机误差不常见的概率分布之一。然而,统计结果如置信度和预测界限确实需要正态分布误差来保证其有效性。
如果误差的均值为零,那么这些误差完全是随机的。如果平均值不是零,那么可能是模型不是数据的正确选择,或者错误不是纯粹的随机的,包含系统错误。
数据的恒定方差意味着错误的“扩散”是恒定的。具有相同方差的数据有时被称为<一个class="indexterm" name="d123e6957">同等的质量.
随机误差具有常数方差的假设并不是加权最小二乘回归的隐含假设。相反,假定拟合程序中提供的权重正确地表明数据中存在的不同质量水平。然后使用权重将每个数据点对拟合系数估计值的影响程度调整到适当的水平。
曲线拟合工具箱软件使用线性最小二乘法拟合一个线性模型到数据。一个<年代p一个nclass="emphasis">线性模型定义为系数为线性的方程。例如,多项式是线性的,但高斯函数不是。为了说明线性最小二乘拟合过程,假设你有
解这个方程的未知系数
因为最小二乘拟合过程使残差的平方和最小,系数是通过微分确定的
真参数的估计通常用
求和从何而来
解
解
如你所见,估计系数
在矩阵形式下,由公式给出了线性模型
y=
在哪里
对于一阶多项式
这个问题的最小二乘解是一个向量
(
在哪里
b= (
使用MATLAB<年代up>®年代up>反斜杠符(<一个href="https://fr.mathworks.com/help/matlab/ref/mldivide.html">mldivide
)来解一个系数未知的线性方程组。因为反相
你可以插
ŷ=
H=
一个字母上的帽子(回旋)表示一个参数的估计或一个模型的预测。投影矩阵
残差是
r=
通常假设响应数据质量相等,因此方差恒定。如果这个假设被违背了,你的匹配可能会被低质量的数据不适当地影响。为了改进拟合,可以使用加权最小二乘回归,其中在拟合过程中包含一个额外的比例因子(权重)。加权最小二乘回归使估计误差最小化
在哪里
权值修改参数估计的表达式
在哪里
通常可以通过拟合数据并绘制残差来确定方差是否为常数。在下图中,数据包含各种质量的重复数据,并且假设拟合是正确的。差质量的数据显示在残差图中,它有一个“漏斗”形状,小的预测值在响应值中产生比大的预测值更大的散度。
您提供的权重应该将响应方差转换为一个常量值。如果你知道数据中测量误差的方差,那么权重是
或者,如果你只有对每个数据点的误差变量的估计,通常用这些估计来代替真实方差就足够了。如果你不知道方差,在一个相对的尺度上指定权重就足够了。注意,即使指定了权重,总体方差项也会被估计。在本例中,权值定义了拟合中每个点的相对权值,但不用于指定每个点的确切方差。
例如,如果每个数据点是几个独立测量值的平均值,那么使用这些测量值作为权重可能是有意义的。
通常假设响应误差服从正态分布,且极值很少。然而,极端的价值观<年代p一个nclass="emphasis">离群值确实发生了。
最小二乘拟合的主要缺点是对异常值的敏感性。离群值对拟合有很大影响,因为残差的平方放大了这些极端数据点的影响。为了最小化离群值的影响,可以使用稳健最小二乘回归来拟合数据。工具箱提供了两种稳健的回归方法:
权值均方稳健拟合采用迭代重加权最小二乘算法,其过程如下:
采用加权最小二乘法拟合模型。
计算<年代p一个nclass="emphasis">调整后的残差和规范。经调整的残差为
r<年代ub>我年代ub>是通常的最小二乘残差和吗
K调优常数是否等于4.685,和
的函数计算鲁棒权值
注意,如果您提供自己的回归权重向量,则最终权重是稳健权重和回归权重的乘积。
如果拟合收敛,就完成了。否则,返回到第一步,执行拟合过程的下一个迭代。
下图比较了常规线性拟合与使用均方权值的稳健拟合。请注意,稳健拟合遵循大量数据,不受离群值的强烈影响。
不是通过使用稳健回归来最小化离群值的影响,而是将数据点标记为从拟合中排除。指<一个href="https://fr.mathworks.com/help/curvefit/removing-outliers.html" class="a">删除离群值一个>为更多的信息。
曲线拟合工具箱软件使用非线性最小二乘公式来拟合非线性模型到数据。非线性模型定义为系数为非线性的方程,或系数为线性和非线性的组合。例如,高斯函数、多项式的比率和幂函数都是非线性的。
在矩阵形式下,用公式给出了非线性模型
y=
在哪里
y是一个
f是β和的函数吗
β是一个
X是
ε是一个
非线性模型比线性模型更难拟合,因为系数不能用简单的矩阵技术估计。相反,需要遵循以下步骤的迭代方法:
可以对非线性模型使用权重和稳健拟合,并对拟合过程进行相应修改。
由于近似过程的性质,没有一种算法对所有非线性模型、数据集和起点都是万无一失的。因此,如果您不能使用默认的起点、算法和收敛标准达到合理的匹配,那么您应该尝试不同的选项。指<一个href="https://fr.mathworks.com/help/curvefit/parametric-fitting.html" class="a">指定适合选项和优化的起点一个>有关如何修改默认选项的说明。因为非线性模型对起始点特别敏感,所以这应该是您修改的第一个拟合选项。
这个例子展示了如何比较排除异常值和稳健拟合的效果。这个例子说明了如何排除离模型大于1.5个标准差的任意距离的异常值。然后,这些步骤将移除异常值与指定一个给予异常值更低权重的稳健匹配进行比较。
创建一个基线正弦信号:
xdata =(0:0.1:2 *π)';y0 =罪(xdata);
对具有非常数方差的信号添加噪声。
响应相关的高斯噪声年代p一个n>gnoise = y0。* randn(大小(y0));<年代p一个n年代tyle="color:#228B22">%满头花白的噪音年代p一个n>spnoise = 0(大小(y0));p = randperm(长度(y0));sppoints = p(1:圆形(长度(p) / 5));spnoise (sppoints) = 5 *标志(y0 (sppoints));Ydata = y0 + gnoise + spnoise;
用基线正弦模型拟合噪声数据,指定3个输出参数,得到包括残差在内的拟合信息。
f = fittype (<年代p一个n年代tyle="color:#A020F0">“* sin (b * x)”年代p一个n>);[gof fit1, fitinfo] =适合(xdata ydata f,<年代p一个n年代tyle="color:#A020F0">曾经繁荣的年代p一个n>[1]);
检查fitinfo结构中的信息。
fitinfo
fitinfo =<年代p一个nclass="emphasis">结构体字段:nummobs: 63 numparam: 2 residuals: [63x1 double] Jacobian: [63x2 double] exitflag: 3 firstorderopt: 0.0883 iterations: 5 funcCount: 18 cgiterations: 0 algorithm: ' trustregion -reflective' stepsize: 4.1539e-04 message: '成功,但拟合停止,因为残差小于公差(TolFun)。'
从fitinfo结构中获得残差。
残差= fitinfo.residuals;
确定离基线模型任意距离大于1.5个标准差的点为“离群点”,并排除离群点对数据进行重新拟合。
I = abs(residuals) > 1.5 * std(residuals);离群值= excludedata (xdata ydata,<年代p一个n年代tyle="color:#A020F0">“指标”年代p一个n>,我);fit2 =适合(xdata ydata f,<年代p一个n年代tyle="color:#A020F0">曾经繁荣的年代p一个n>[1],<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“排除”年代p一个n>、异常值);
比较排除异常值的效果和在稳健拟合中给予它们较低的平方权重的效果。
fit3 =适合(xdata ydata f,<年代p一个n年代tyle="color:#A020F0">曾经繁荣的年代p一个n>[1],<年代p一个n年代tyle="color:#A020F0">“稳健”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“上”年代p一个n>);
绘制数据、异常值和拟合结果。指定一个有用的图例。
情节(fit1<年代p一个n年代tyle="color:#A020F0">的r -年代p一个n>xdata ydata,<年代p一个n年代tyle="color:#A020F0">“k”。年代p一个n>离群值,<年代p一个n年代tyle="color:#A020F0">“m *”年代p一个n>)举行<年代p一个n年代tyle="color:#A020F0">在年代p一个n>情节(fit2<年代p一个n年代tyle="color:#A020F0">“c——”年代p一个n>)情节(fit3<年代p一个n年代tyle="color:#A020F0">”乙:“年代p一个n>) xlim([0 2*pi])<年代p一个n年代tyle="color:#A020F0">“数据”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“数据排除在第二次拟合之外”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“原来适合”年代p一个n>,<年代p一个n年代tyle="color:#0000FF">...年代p一个n>“不匹配点”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">健壮的适合的年代p一个n>)举行<年代p一个n年代tyle="color:#A020F0">从年代p一个n>
绘制考虑离群值的两个拟合的残差:
图绘制(fit2 xdata ydata,<年代p一个n年代tyle="color:#A020F0">“有限公司”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“残差”年代p一个n>)举行<年代p一个n年代tyle="color:#A020F0">在年代p一个n>情节(fit3 xdata ydata,<年代p一个n年代tyle="color:#A020F0">“软”年代p一个n>,<年代p一个n年代tyle="color:#A020F0">“残差”年代p一个n>)举行<年代p一个n年代tyle="color:#A020F0">从年代p一个n>