线性拟合的原理、matlab使用和声发射b值求解

在声发射中可能有这么几个应用场景。

1、在做加载试验的时候,获得一组声发射事件数随载荷的变化,后期当我们只测得声发射信号事件数的时候,能否评估当前的载荷是多少,或者推断当前试验所处的状态?

2、对一个材料做疲劳试验的时候,随着疲劳的加深,声发射事件率也逐渐增加,当我们采集完数据之后能否通过声发射事件率判断材料当前所处的疲劳状态?

3、一个材料可能有多个模态的信号源,每个信号源产生的信号可能有明显的区别,如下图,其中一类数据点随着信号幅度的增加能量快速的增加,另一类信号幅度增加的同时能量增加得就没那么快了。能否通过信号的幅度和能量推测信号产生的模式呢?

以上分析,就可以使用本节介绍的数据拟合功能了。

数据拟合又称曲线拟合,俗称拉曲线,是一种把现有数据透过数学方法来代入一条数式的表示方式。科学和工程问题可以通过诸如采样、实验等方法获得若干离散的数据,根据这些数据,我们往往希望得到一个连续的函数(也就是曲线)或者更加密集的离散方程与已知数据相吻合,这过程就叫做拟合(fitting)。

其实数据拟合就是通过一系列的离散点找出一条曲线比如Y=a*X+c;后期当我们测到一个X值的时候,就可以推测对应的Y值。(曲线可能有不同类型,数据也可以是三维的甚至更多维度的,本处主要以二维为例)。

二、数据拟合的基本算法:最小二乘法

2.1、引言

我们以前做实验,为了提高数据的准确性,经常用的一个方法叫做多次测量取平均值。比如要测量一个东西的长度的时候,我们可能会测量7次,然后在7次的结果里去掉最大和最小值,剩下的数据取平均值。

假设测得的数据如下|:

我们先会将序号2和7的数据排除,然后将其他的数据求平均值。

xr=(10.2+9.8+10+9.8+9.9)/5=9.94

利用matlab将其绘制出来,得到如下图形

2.2、最小二乘法

我们假设我们要测量的东西的实际长度是X,我们将其画在上图中。

我们可以得到每个测量点和实际长度之间的距离,也可以理解为测量值和真实值之间的误差。因为取绝对值计算起来麻烦,所以用平方来代替误差,5次测量的总的误差可以表示为:

我们假设虽然我们每次测量都会有误差,但是离真实值越近我们得到的可能会越大,比如我们可能会测量出结果是9.9,9.8,9.7,但是我们正常情况下是不会测量出结果是1的情况的。换言之,当Y值是真实值的时候,以上公式计算的结果是最小的。

以上公式是一个一元二次方程,且开口向上,根据微积分的原理我们可以知道当其导数是0的时候,公式取得最小的值。

对其求导:

进而得出

可见对于这个案例,最小二乘法的结果就是算术平均值。

2.3、一次方程

以上是最简单的方程,但是已经说明了最小二乘法的原理。

我们假设声发射断铅实验中信号的幅度和断铅距离传感器的距离做一个案例,假设数据如下:

绘制其曲线如下:

可以看出线性关系变成了f(x)=a*x+b;(上一个案例中是f(x)=a*x)

这个时候每个点和实际点的误差是f(xi)-yi,最小误差和可以表示为:

函数有两个参数a,b,分别对ab求导,两个导数都为0的时候对应的是误差最小的f(x0);

以上是二元一次方程组,解方程即可得到两个参数ab,根据ab即可以画出拟合曲线。

2.4、二次方程

当我们的拟合曲线是二次方程的时候,f(x)=a*x^2+b*x+c。

每个点距离真实点的距离是f(xi)-yi。

所有的的误差和为

根据微积分原理,分别对abc求导,可以得到3元一次方程组,方程组都为0时候得到的值是最小值,以下是a=1,b=0.3,c=2时候的数据和拟合曲线。

2.5、指数等其他方程

除了以上方程还可以用其他方程取拟合数据,比如指数方程f(x)=a*e^b,计算的方式也是如上,分别对未知参数ab求导,导数为0时候误差和最小。然后根据导数方程组求二元方程。

也可以根据实际写一个自定义的方程,比如f(x)=a*exp(b*x)+c*x^2+d*sin(e*x);这个就是包含了指数、次方、三角波的拟合函数。

三、matlab图表中自带的拟合功能介绍

3.1、使用代码生成数据,绘图结果如下所示

3.2、图形界面选择“工具”->“基本拟合”,弹出设置对话框。

3.3、设置模块分为几个模块。分别是选择数据、选择拟合曲线样式、显示方程、绘制残差图和更多。

以下分别介绍

1、选择数据:我们的数据是两个数据,分别是y1和y2。这个数据可以由聚类分析等方法区分开。

2、选择拟合曲线样式:

  • 如果选择样条插值或者保形插值,会将每个点连接。
  • 如果选择直线,matlab会用一条直线拟合数据。
  • 如果选择二次或者多次方程,会用二次方程式进行拟合

3、勾选显示方程,界面上会出现拟合曲线的方程式

4、勾选绘制残差,会在图形上显示每点和拟合曲线的差

5、点击更多按钮,右侧将出现具体的数值结果

如果只需要简单的分析或者大概寻找规律,基本就以上功能可以满足。

四、matlab中cftool工具箱的使用

在声发射数据中,声发射数据也可能不是标准的次方规律,可能是指数增长,可能是周期变化,也可能是多种变化的组合,那么,下面将介绍这种情况下的拟合。

本节继续介绍matlab中非常实用的数据拟合工具箱cftool。简单实用而强大的函数拟合工具箱,提供丰富的拟合算法,能实现多种线性、非线性的函数拟合。

相较于图表自带的拟合功能,cftool提供了更多的拟合函数选择、甚至可以自己编辑拟合的函数,可以应对更复杂的声发射信号分析。

4.1、生成几个测试用的数据

4.2、打开cftool工具箱

在命令行输入“cftool”,或者在菜单中点击“curve fitting”菜单,弹出工具箱操作界面。

4.3、选择数据源

首先给拟合一个命名“fity1”,Xdata选择x,Ydata选择y1;我们主要操作二维的,所以Zdata选择空,如果要做三维拟合可以选择一个Z数据,weights也选择空,暂时每个点的权重都是一样的,我们后面再介绍不同权重的点的拟合。

4.4、拟合数据

工具箱默认的是线性拟合,所以此时图中出现了数据点和拟合的曲线,如果没有自动出现拟合结果,可以手动点击界面上的‘FIT’按钮进行数据拟合。

在拟合曲线的左侧是拟合的结果,分别是拟合模型:线性y=p1*x+p2;拟合曲线的参数:p1p2的值;后面的拟合曲线对数据的解释能力,也就是拟合的准确性评估:

其中R-square越接近1表示拟合越完美。

4.5、选择其他拟合函数

点击拟合函数下拉框,会出现如下拟合函数,可以选择一个,之后会出现拟合的函数的示例方程,如果选择了自动拟合,就会即时出现拟合曲线和拟合结果。

4.6、拟合比较

我们选择y2作为数据,y2是2次方数据加随机数形成,选择线性拟合结果如下1,选择二次函数拟合结果如下2;可以通过拟合结果确定选择拟合函数的适用性。

4.7、其他拟合曲线

同理y3的最佳拟合函数是函数或者,其求出的值也和我们生成数据的值比较接近。

y4的最佳拟合函数是指数函数,其求出的值也和我们生成数据的值比较接近

4.8、自定义函数拟合

y5的数据有有一个线性和正弦信号叠加,所以我们用自定义函数。通过观察数据,可以写出拟合函数是y5=a*sin(b*x)+c*x+d,写入输入框中。采用默认的参数,数据拟合可能不准确,再次观察数据,可以获得正弦周期性变化的周期大概范围,点击fitopetion,给参数b一个范围,获得拟合的结果如下所示。

通过以上的数据就可获得数据的一个变化近似函数,将声发射的过程进行量化。

五、拟合的优化:分段拟合与局部加权拟合

上面介绍的主要都是基于基本的最小二乘法的拟合操作,本节是响应的优化。

5.1分段拟合

在有些实验中,实验的过程是可以按照时间段区分的。比如在负荷加载中,有加压——恒压——加压——恒压——卸压的过程,在数据分析中,可以分析一次加恒压过程中声发射的规律。如下,随着加压,声发射事件快速增加。恒压阶段增速减慢后基本保持稳定。

在数据拟合的时候,可能没有非常合适的函数能够表述上面的这条曲线,那么就可以使用分段拟合的方法

分段拟合就是将数据分成多个连续的区间段,对每个区间段进行拟合。比如下面这个图,虽然也可以拟合成一条曲线,但是拟合的损失值会比分段拟合大。另外在实验室条件下的实验很多都是加有外部作用力的,拐点会比较明显,所以根据实验的过程进行分段拟合是个不错的选择。

最后可以拟合出如下的方程组

f(x)=x,when(x<10)

f(x)=3*x+5,when(x>10)

5.2局部加权拟合

局部加权回归使一种非参数方法(Non-parametric)。在每次预测新样本时会重新训练临近的数据得到新参数值

局部加权回归优点:可以有效避免欠拟合,减小了较远数据的干扰,仅与较近的数据有关。缺点是计算量比较大。

如上图,我们要预测x点对应的y值,根据经验可以知道,距离x比较近的点对x的预测影响比较大,而较远的点影响比较小,如上虚线内的影响较大而虚线外的影响比较小。所以在对x进行预测的时候,就根据x的范围重新拟合一曲线,如上斜线,将x带入斜线方程求得对应的y值。

5.3在cftool工具中加权回归的功能

也有加权回归的功能,通常加权值和自变量取同样的数据。

我们在上节的y1数据上,将y1y10y20y30都改成偏离很大的值,如下图中图上的4个黑点。

我们将权重也选为x的时候,拟合相似度明显提升。

六、数据拟合在声发射数据分析中的实际使用

6.1《输气管道阀门内漏声发射多参数检测实验研究》

针对输气管道阀门内漏喷流噪声声场特征复杂特点,应用声发射检测系统进行阀门内漏过程 的检测实验研究,提取阀门不同内漏率下声发射信号波形频谱特征和时域、频率参数特征应用最小二乘法拟合函数曲线,获得声发射信号特征参数与内漏率对应关系。实验结果表明,声发射信号特征参数(均方根、标准差、均值、频域峰值)与内漏率之间都存在明显对应关系。

声发射信号特征参数值(时域均方根RMS、标准差、均值和频域峰值)随阀门内漏率的增大呈现上升趋势,并且如上图中显示给出了相关的函数,因此声发射信号多参数分析可以有效进行阀门内漏率的量化评价,以提高内漏识别的可靠性和准确度。

6.2《基于声发射能量判定指标岩石破坏时刻预测研究》

利用岩石声发射技术对岩石试件进行单轴全过程加载实验,岩石声发射时间一能量参数按 照时间序列分别划分为五段,统计每个时段内不同能量等级事件的个数,每个时段进行拟合如下,不同时期的斜率不同。

上图也可以画成如下所示:

获得模型后通过计算斜率预测岩石当前状态。

6.3《基于声发射技术的碳/环氧复合材料拉伸损伤模型》

为了建立一种更适合复合材料的损伤模型,本文基于声发射技术对复合材料的损伤模型进行了探讨。结果表明:利用声发射事件累计数拟合出的数学模型效果非常好,与实验数据比较吻合,可以用于复合材料的损伤过程分析,对复合材料的损伤规律研究具有一定的参考作用。

测试选择拟合函数的原型

通过以上图形看出,当拟合曲线的斜率再次接近0的时候接近完全破坏。

七、声发射B值的理解

声发射b值是声发射实验中非常重要的一个参数,其物理意义为岩石破裂过程中声发射小事件数与大事件数的比值,可以反映岩石的破裂过程。b值的变化是岩石破裂的重要前兆之一。

声发射B值就是采用数据拟合的方法对声发射特征参数的分析,具体求解过程可以联系获取。

MATLAB神经网络拟合工具箱Neural Net Fitting详细运行方法

  本文介绍MATLAB软件中神经网络拟合Neural Net Fitting)工具箱的具体使用方法。

  在这篇文章中,我们介绍了MATLAB软件中神经网络(ANN)的纯代码实现;而在MATLAB软件中,其实基于神经网络拟合工具箱,就可以点点鼠标实现神经网络的回归。本文就对基于这一工具箱实现神经网络回归的具体方法加以详细讲解。

  当然,在首先导入我们的训练数据时,还是需要用到几行代码的。不过这里的代码整体而言也非常简单,其实就是基于readtable()函数,读取存储于Excel中的数据;随后,将因变量Y与自变量X提取出来备用。这里有一点需要注意:大家的自变量如果有多个(比如我这里就有data_NDVI与data_Soil两个自变量),需要将这两个自变量合并,放在一个变量X中。

  随后,我们运行这里的代码。如下图所示,可以看到我的因变量Y与自变量X都准备完毕了。

  接下来,我们在MATLAB软件顶部菜单中,依次选择“APP”→“Neural Net Fitting”,打开神经网络拟合工具箱

  打开后的界面如下所示。

  其中,如果我们点击上图左下角的“Neural Network Start”选项,就可以来到如下图所示的“Neural Network Start”界面。可以这么理解,“Neural Network Start”是MATLAB中神经网络工具箱的一个整体的开始界面,而我们这里需要用到的神经网络拟合工具箱Neural Net Fitting)就是该开始界面下属的其中一个工具。

  言归正传,我们再上上图中点击“Next”,就可以看到如下所示的数据筛选界面。该界面就是我们用来选择输入数据(自变量)、输出数据(因变量)的地方。而无论是输入数据还是输出数据,可以看到,我们都需要用鼠标在MATLAB软件的工作区中找到对应的变量。这也是为什么在本文一开始,我们需要先执行一段代码,将数据从Excel中读取到MATLAB中去的原因。

  点击选择完毕数据后,一定注意需要对数据的维度进行选择。换句话说,就是你的输入与输出数据矩阵中,不同行代表的是不同样本,还是同一样本的不同属性(不同自变量)。

  随后,选择“Next”,进入验证集与测试集数据的划分界面。在这个界面中,我们需要对验证集与测试集数据的比例进行划分(为什么要划分数据这里就不再赘述啦,而且这一个界面的右侧也有每一个数据集合的作用,大家不理解的话参考一下就明白了)。一般的,在数据量比较少的情况下(我记得有说少于一百万条数据,就算数据比较少,当然肯定要看大家数据的具体情况),我们按照6:2:2的比例进行划分即可;在数据量多的情况下,则可以按照98:1:1的比例来划分。这里大家就依据实际情况来划分即可。

  随后,点击“Next”,进入神经网络结构配置界面。在神经网络拟合工具箱中,我们仅仅只能对神经网络的隐藏层的神经元数量进行配置,而隐藏层的数量默认为1层,且还不能修改;而在本文开头提及的这篇文章中,通过代码,我们不仅可以对神经元数量进行调整,还可以配置隐藏层的具体层数

  这里建议大家先按照默认的神经元数量10进行填写;等后期运行过模型几次后,根据模型的精度运行时间,再返回这里对神经元的数量进行二次调整。

  随后,点击“Next”,就进入神经网络模型的训练界面了。这里我们可以选择训练神经网络的具体算法,但一共仅仅有三个选项,包括Levenberg-Marquardt算法、Bayesian regularization算法、Scaled conjugate gradient backpropagation算法;同样是在本文开头提及的这篇文章中,通过代码,我们可以选择的算法就有很多了,有十余种。

  这里大家结合每一种算法的具体介绍,依据自己的数据实际情况来选择即可。不过一般的,应该选择第一种算法——Levenberg-Marquardt算法的场合会多一些。选择算法完毕后,点击“Train”就可以开始训练模型。

  模型训练完毕后,会弹出如下所示的训练结果窗口。

  且在神经网络模型的训练界面的右侧会出现精度评定指标的具体数值;数值下方的三个选项可以用来绘制拟合情况图。

  如果对这个模型非常不满意,就可以多次重复训练,还可以更改隐藏层神经元数量、训练算法等进行重新建模。如果对模型大体满意,点击“Next”即可进入模型调整界面。

  这个界面可以更方便地进行重复训练、修改隐藏层神经元个数、扩大或更换数据集等,从而完善大家的模型。

  如果没有问题,点击“Next”即可进入解决方案部署界面(应该是这么翻译的)。这个界面听起来高深,其实说简单点,就是将我们刚刚训练好的神经网络,以不同的形式来导出。

  但我对于我个人而言,这个页面其实没有很大的作用——因为这里导出的并不是纯粹的神经网络MATLAB代码,而是一些和开发、部署工具有关的函数或图表;这里或许对于开发人员而言比较有用,对于我们这种只是单纯想训练一个神经网络模型的人而言,直接跳过就可以。

  随后,点击“Next”即可进入神经网络拟合工具箱的最后一个界面——结果保存界面。

  这个界面是我们训练这么久神经网络模型的最终目标。首先,“Generate Scripts”一栏可以自动生成一个MATLAB代码;有了这个代码,以后我们再想对这个结构的神经网络模型进行训练,就不用再在神经网络拟合工具箱中点来点去了,直接把新的输入数据、输出数据导入到代码里,修改代码中对应的参数即可。例如,本文开头提及的这篇文章,其中的代码其实就是通过这个选项来生成的。

  接下来第二个方框“Save Data to Workspace”,是对本次你训练神经网络模型过程中一些关键参数进行保存的选项。假如大家今后不想用代码来复现这个神经网络,而是想直接将训练好的模型保存下来,下一次直接用一两句代码调用它,那就选择在这里将神经网络模型对象保存下来就好(建议选择最后一项,即以结构体的格式保存全部的参数,防止之后需要某个参数了结果发现没保存)。

  这里我认为有必要说明一下保存神经网络代码神经网络参数的区别。如果我们在“Generate Scripts”一栏保存了神经网络的代码,那么今后我们调用这个代码,并不是直接调用我们本次训练好的神经网络模型,而是再用不同的数据,不通过这个神经网络拟合工具箱而是通过修改代码的方法,对神经网络模型进行调试,还可以修改模型的各项参数(比如隐藏层数量、神经元数量、训练算法等)。而如果我们在“Save Data to Workspace”一栏保存了神经网络模型这个参数,那么今后再调用这个神经网络的时候,神经网络模型里的各项参数就不会再变了,就永永远远是你现在训练好的这个参数。说得简单一点,前者是保存调试神经网络模型的代码,后者就是保存你现在训练好的这个神经网络模型

  保存完毕后,点击“Finish”即可退出神经网络拟合工具箱。此外,如果大家没有保存任何神经网络代码或参数的话,系统还会很贴心地弹出一个提示框,询问你是否确认退出。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。