【知识仓库】误差分析(四)函数拟合

您所在的位置:网站首页 eviews线形图怎么做 【知识仓库】误差分析(四)函数拟合

【知识仓库】误差分析(四)函数拟合

2023-04-09 14:31| 来源: 网络整理| 查看: 265

前三篇我们讲了

何为误差 爱XR的麦子:【知识仓库】误差分析(一)何为误差测量中的误差 爱XR的麦子:【知识仓库】误差分析(二)测量误差计算误差的基本方法 爱XR的麦子:【知识仓库】误差分析(三)误差传递

我们在第二篇里提过测量完数据后,这些数据有一个很重要的工作,就是通过数据来拟合函数、发现规律,并且还要分析拟合函数是否是好的拟合

本篇我们就来简单聊聊“如何拟合函数”这个话题。之所以说是“简单聊聊”,是因为这里面很多算法我们需要专门开个“最优化”(Optimization) 的章节聊。这里只聊一些跟实验相关的内容。

从残差到卡方

如果我们有很多数据点,我们自然是希望我们拟合的函数是能穿过这些数据点的。但是如果你还记得“做实验的过程其实是在一个母体分布中采样的过程,并且我们误差的含义是数据点68%的可能性会出现在距离预期值1标准偏差的范围内”的话,应该也能理解,我们并不需要我们拟合的函数穿过100%的数据点,理论上应该是68%的数据点在拟合函数的1标准误差内就好。

那我们怎么说明“在误差内”这么一件事呢?想必你很容易想到可以利用之前说的残差去描述。数据点与预期值之间的差为 y_i - y(x_i) ,我们自然是希望这样的差异越小越好。因此拟合问题就变成了最小化残差,具体最小化的对象可以是 \left|y_i - y(x_i)\right| 或 (y_i - y(x_i))^2 ,这也对应着机器学习里常用的 损失函数 (爱XR的麦子:【知识仓库】深度学习-回归问题)。

为了更好的数学表达,我们会更青睐于 (y_i - y(x_i))^2 ,而这样一个损失函数也使得我们的问题变成了一个最小二乘法 (Least Square Method) 的问题。最小二乘与高斯分布的 最大似然估计 (Maximum Likelihood) 可以说是一体两面的两个方法 (关于这个我以后我会写到,这里就全先当如此吧)。之所以这里指出最大似然估计是因为我们可以写出一个函数拟合的可能性

P \sim \exp\left[-\frac{1}{2}\sum_i^N \left(\frac{y_i - f(x_i)}{\alpha_i}\right)^2\right] \\

这个可能性是每个数据点符合 y=f(x_i) 的可能性相乘的结果(放到指数函数里就变相加了),这里只在意两者之间成正比,而不在意前面的系数,因为与我们拟合函数优化有关的部分只在这个求和里。

可以看出,最大化这个可能性的方法就是最小化那个求和的部分。我们就给求和的部分一个命名:卡方 (Chi-square)

\mathcal{X}^2 = \sum_i \left(\frac{y_i - f(x_i)}{\alpha_i}\right)^2\\同时这个卡方也被称作拟合优度参数 (Goodness-of-fit Parameter),顾名思义,就是用来衡量拟合效果的一个量。

值得一提的是,这个卡方函数里求和部分里面的东西也是有含义的。 R_i = \frac{y_i - f(x_i)}{\alpha_i}\\

我们一般叫归一化残差 (Normalised Residual) 。可以看出所谓的归一化残差就是残差除以了一个标准误差,我们自然是期待残差越靠近0越好,但是残差不为0也是很正常的,因为怎样都应该符合一个高斯分布,那么我们就不希望我们归一化残差的绝对值远大于1,因为这就说明我们的拟合函数不能让数据点落在1标准误差内。

因此,作为一个绘图的小tips,我们一般要求除了绘制自变量与因变量的变化趋势、拟合函数等,还需要附上归一化残差的图,图中各点的归一化残差应该在正负1之间,且不应该有明显的规律,应该是混乱、随机的,如果将归一化残差绘制出直方图,那么应该是符合标准高斯分布的

拟合

综上所述,我们来总结下我们拟合的过程:

根据数据、物理理论或其他前置经验等猜测一个 f(x) 作为拟合函数对于每个自变量,计算归一化残差 R_i 通过归一化残差计算卡方 \mathcal{X}^2 对于拟合函数 f(x) 的参数进行最优化得到卡方最小值 \mathcal{X}_{min}^2 拟合误差

好的我们现在通过最小化卡方来得到拟合函数了,但是既然数据有误差,拟合出来的函数也自然会有误差。

因为我们需要最小化\mathcal{X}^2 = \sum_i \left(\frac{y_i - f(x_i)}{\alpha_i}\right)^2\\而参数其实都来自于 f(x_i) ,我们做一些简化的假设,比如只有一个参数 m , f(x) = mx ,那么我们可以对卡方进行泰勒展开

\mathcal{X}^2(\bar m + \delta m) = \mathcal{X}^2(\bar m) + \frac{1}{2} \frac{\partial^2 \mathcal{X}^2}{\partial m^2} (\delta m)^2\\可以看出我们没有写一次导,即 \frac{\partial \mathcal{X}^2}{\partial m} ,因为经过了最小化,它理应是0。这里的 \delta m 是相对于最优解 \bar m 的一段任意的偏移 (Excursion) (当然是一段小偏移,否则泰勒展开就不奏效了),而我们需要知道的就是对于卡方而言,什么时候 \delta m = \alpha_m 。

统计学表明 \Delta \mathcal{X}^2 = \mathcal{X}^2(\bar m + \alpha_m) - \mathcal{X}^2(\bar m) = 1\\当 \Delta \mathcal{X}^2 = 1 时,围绕着 \mathcal{X}_{min}^2 会占1标准偏差的分布面积。其实这也比较好理解,毕竟卡方是归一化残差的平方和,而归一化残差应该符合标准高斯分布,正负1范围为1标准偏差。

因此,代入后我们发现

\Rightarrow 1 = \frac{1}{2} \frac{\partial^2 \mathcal{X}^2}{\partial m^2} \alpha_m^2\\ \Rightarrow \alpha_m = \sqrt{\frac{2}{\left(\frac{\partial^2 \mathcal{X}^2}{\partial m^2}\right)} }\\普遍而言,我们说拟合函数的误差为卡方函数或误差曲面 (Error Surface) 曲率 (Curvature)。(因为卡方里假设的函数一般不止一个参数,因此整个卡方函数一般会构成一个曲面,或超曲面 (Hyper-surface),就是高维的曲面)

卡方与优化

好的,我们说了很多理论上的东西,但是遇到具体的问题到底要怎么得到合理的拟合函数呢?得到了拟合函数又要如何得到拟合函数的误差呢?

其实这之间的选择就很多了。

首先一些函数参数的拟合,我们是可以找到闭式解 (Closed-form Solution) 的,比如一维线性拟合。

当 y = f(x_i) = m x_i + c 的情况下,假设数据间 x_i 的测量误差不唯一,那么如 爱XR的麦子:【知识仓库】误差分析(三)误差传递 中描述的,根据 w_i = \frac{1}{\alpha_i^2} 各个数据的测量误差进行加权,得到 c = \frac{\sum_i w_i x_i^2 \sum_i w_i y_i - \sum_i w_i x_i \sum_i w_i x_i y_i}{\Delta}\\ m = \frac{\sum_i w_i \sum_i w_i x_i y_i - \sum_i w_i x_i \sum_i w_i y_i}{\Delta}\\同时 \alpha_c = \sqrt{\frac{\sum_i w_i x_i^2}{\Delta}}\\ \alpha_m = \sqrt{\frac{\sum_i w_i }{\Delta}}\\反复出现的分母是 \Delta = \sum_i w_i \sum_i w_i x_i^2 - \left(\sum_i w_i x_i\right)^2\\这里主要就是提及一下存在这种闭式解,而且线性拟合在物理里可以说是十分重要的。但是毕竟绝大部分情况下是不存在的,所以也就不做说明了。

反之,如果没有闭式解,我们就需要对卡方用最优化去做逼近了。常见的基础方法如:

网格搜索 (Grid Search)梯度下降 (Gradient Descent Method) (可以看 爱XR的麦子:【知识仓库】深度学习-回归问题 里有聊)二阶牛顿法 (Second-order Newton Method)二阶高斯-牛顿法 (Second-order Gauss-Newton Method)麦夸尔特法 (Marquardt-Levenberg Method)

可以说各有各的好处和问题吧。

关于误差也要聊一下,因为如果参数多了,误差曲面的曲率自然不会是一个简单的值,而是会构成一个曲率矩阵 (Curvature Matrix)。假如我们的拟合函数涉及 \mathcal{N} 个参数 y = f(x_i; a_1, a_2,...,a_{\mathcal{N}}) ,那么就会构成 (\mathcal{N} \times \mathcal{N} ) 的曲率矩阵。其中每一项可以写成 \mathbf{A}_{ij} = \frac{1}{2} \frac{\partial^2 \mathcal{X}^2}{\partial a_i \partial a_j}\\可以看出这个所谓的曲率矩阵就是卡方的二阶导的 \frac{1}{2} 。(二阶导又叫黑塞矩阵,爱XR的麦子:【知识仓库】深度学习-技巧小总结)

对于矩阵中不在对角线的项,即 i \ne j 的情况,这个矩阵说明了误差之间的关联性 (Correlation)。我们对曲率矩阵求逆,就得到了协方差矩阵 (Covariance Matrix) 或叫误差矩阵 (Error Matrix), \mathbf{C} = \mathbf{A}^{-1}\\而对于某一项参数,如 a_i ,它的误差就是 \alpha_i = \sqrt{\mathbf{C}_{ii}}\\当然,求对于一个参数很多的函数而言,去求这个逆就不一定是一个明知的选择了,所以也可以用迭代的方法去逼近我们想要的误差值,方法如下 (EM的思想):

先通过最优化找到 \mathcal{X}_{min}^2 以及这个时候的各个参数, \bar a_1, \bar a_2, ..., \bar a_{\mathcal{N}} 检查下这个拟合是否是个好的拟合,可以通过画图、归一化残差等方法(下一章我们还会介绍一些更数值化的方法)。如果是好的拟合就继续下一步找误差,否则就思考下自己的拟合函数是否需要更替;实验步骤是否需要更改;测量次数是否需要增加选择一个参数取寻找误差,比如 a_i ,增大或缩小它直到 \mathcal{X}^2 = \mathcal{X}_{min}^2+1 对除了 a_i 以外的 \mathcal{N}-1 个参数对 \mathcal{X}^2 再进行一次最优化重复3、4步骤,直到 \mathcal{X}^2 不再变化(一般也需要允许一定的容忍值 (Tolerance) ),\bar a_i 的误差 \alpha_i 就是这时 \left| a_i - \bar a_i\right| 的值对于每一个参数重复3-5步

这样就可以在误差曲面上找到所有参数的误差值了。当然,是使用误差矩阵还是这种迭代法需要具体问题具体分析。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3