在上一篇文章中,我们讲了多尺度熵的原理及MATLAB实现。
本篇要讲的是多尺度熵的一个改进特征提取方法——复合多尺度熵(Composite Multiscale Entropy, CMSE)。复合多尺度熵方法不仅继承了多尺度熵在揭示时间序列多尺度复杂性方面的优势,而且还通过改进的计算方式,提高了熵值的稳定性和准确性,尤其是在处理短时间序列或噪声较大的信号时。
一、为什么要用复合多尺度熵
正如上一篇文章所讲,多尺度熵通过对原始时间序列进行“粗粒化”处理来构建不同尺度的序列,并在每个尺度上计算熵值。
这里我们再回忆一下“粗粒化”的过程,下图给出了当τ =2以及τ =3的粗粒化过程,可以看出粗粒化过程就是用一个长度为 τ 的窗口以不重叠的方式求取滑动窗口内的序列平均值。[1]
图1. τ=2 及 τ=3 时的粗粒化示意图
当原始时间序列较短时,随着尺度因子的增加,粗粒化后的序列长度将显著减少。在较高尺度上,序列可能变得过于短暂,不足以可靠地估计熵值。熵值的计算依赖于序列中模式(或重复模式)的识别,而较短的序列可能无法提供足够的信息来准确评估这些模式,从而影响了熵值的稳定性和可靠性。
为了解决这一问题,复合多尺度熵就被提出了。
二、从多尺度熵到复合多尺度熵
复合多尺度熵在传统多尺度熵的基础上,对每一个尺度因子所对应的序列,进一步的细化,由只生成一个粗粒序列改进为生成多个粗粒序列,再计算多个序列的多尺度熵,将这些多尺度熵的均值作为最终的熵值,使获得的故障信息更加细致,也提高了多尺度熵计算的精确度。
具体做法也是比较直观的,相比于传统多尺度熵只生成一个粗粒化序列,复合多尺度熵通过窗口的依次平移,在尺度 τ 下一共可以生成 τ 个粗粒化序列。下图为尺度 τ=3 时的复合多尺度熵粗粒化示意图:
图2. τ=3 时的复合多尺度熵粗粒化示意图
计算每一次因滑动窗口而形成的粗粒化序列的样本熵,再对这些样本熵求均值,即可得到尺度因子为 τ 时的复合多尺度熵。
对比图 1与图 2可以看出,以尺度因子 τ=3 时为例,传统多尺度熵只生成了一个粗粒化序列,而复合多尺度熵算法生成了 3 个不同的粗粒化序列,每个粗粒化序列是在原始序列的基础上依次向后平移一个数据点,再计算每个粗粒化序列的样本熵,最后求其平均值。相比于传统多尺度熵的求解过程,复合多尺度熵尽管计算量要大一点,但是它的熵值计算精确程度要远远优于传统多尺度熵。
三、案例演示
这里举一个完整的案例,里说明复合多尺度熵的计算过程,以及与多尺度熵的区别。
首先我们生成一段仿真信号,它是由幅值为1的2hz正弦、幅值为0.5的1.5hz正弦以及白噪声信号叠加而成的:
待分析的仿真信号
在多尺度熵方法中,如果设置尺度值分别为1~3,得到的粗粒化信号如下:
多尺度熵方法中的粗粒化信号
在复合多尺度熵方法中,粗粒化信号的数量取决于所选择的尺度值。具体来说,当尺度值(scale factor)为1时,由于没有平移操作(或者说,平移0个数据点),粗粒化后的信号仅有一组,即原始信号本身。这是因为在尺度1下,不需要对数据进行任何改变,每个数据点都是其自身的平均。
随着尺度值的增加,粗粒化信号的数量也相应增加。例如,当尺度值为2时,将会生成2个粗粒化信号。这是因为首先将原始信号不进行平移并按尺度2粗粒化,然后将原始信号向后平移1个数据点后再进行尺度2粗粒化,因此得到两组不同的粗粒化数据。
依此类推,当尺度值为n时,将会生成n个粗粒化信号。每个信号都是通过将原始信号从0到n-1个数据点逐个平移后按照尺度n进行粗粒化得到的。
当我们取尺度为3时,具体画出来图像是这样的:
复合多尺度熵方法中的粗粒化信号
同一尺度内的粗粒化信号取平均后将会得到:
复合多尺度熵方法中的粗粒化信号
然后对这3个信号分别求样本熵,就可以得到复合多尺度样本熵的计算结果:
复合多尺度样本熵
当然,我们也可以求其他类型的熵,得到各种类型熵的复合多尺度计算结果,就像这样:
8种复合多尺度熵结果
四、复合多尺度熵该怎么使用
与多尺度熵的用法相同。简单来说,使用方法有以下两种:
4.1 根据复合多尺度熵的数值大小和变化规律进行直观判断
这里举个例子,比如我们在使用熵值进行故障诊断,原始信号在单一尺度上的样本熵值虽然能够区分转子的故障类型,但是区分效果不明显。 但是如果使用复合多尺度熵,可以反映出不同故障状态与正常状态的复合多尺度熵值的大小关系。例如论文《多尺度熵在转子故障诊断中的应用》中的案例,对正常、不对中、不平衡、碰摩和油膜涡动转子信号求多尺度熵,可以得到这样的计算结果:
从上边图中,论文得出了以下结论:
转子径向位移信号在大部分尺度上较正常状态的复杂,无规则程度较高,不平衡和正常状态的次之。 不对中和油膜涡动状态径向位移信号在大部分尺度下的样本熵值较小,说明不对中和油膜涡动状态径向位移信号自相似性较高,信号较为规则。 5种状态的多尺度熵曲线都是随着尺度因子的增加而渐变地趋向于某一值,这说明多尺度熵不仅反映了时间序列本身的复杂性程度,而且还包含了序列在其他尺度上的信息,这是分形维数和样本熵所无法反映的,说明了多尺度熵的优越性。
大家在做其他领域研究时,也可以采取类似方式进行分析判断。
2. 将复合多尺度熵值作为后续其他算法的输入
复合多尺度熵(CMSE)提供了一种度量信号在不同时间尺度上复杂性的方法。在机器学习和数据挖掘中,CMSE可以用来从时间序列数据中提取特征,尤其是当数据的复杂性或动态变化是关注的焦点时。
具体步骤大致如下:
1.根据需要,对原始时间序列数据进行必要的预处理,如去噪、标准化等。 2.针对数据计算多尺度熵,得到每个时间尺度上的熵值,此时熵的类型可能是多种,所以得到会是一个矩阵,其中一个维度是时间尺度长度,另一个维度是熵的类型数。 3.使用这些特征向量训练机器学习模型,如分类器或回归模型。模型将学习如何基于这些复杂性特征来进行预测或分类。
复合多尺度熵作为一种强大的特征提取工具,其在机器学习和数据挖掘领域的应用增强了模型对于时间序列数据复杂性的理解和分析能力。正确应用这些特征可以显著提升模型性能,尤其是在需要深入分析数据动态变化的场景中。
五、MATLAB代码实现
复合多尺度熵的代码在网上似乎能找到,不过为了给大家提供靠谱的代码来源,笔者重新进行了代码编写和封装。
由于搞科研写论文时,对特征提取的需要往往是集中性的、多种类的、需求各异的,所以我把之前介绍过的功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、排列熵、模糊熵、包络熵这8个熵特征进行了打包:
以上8种全都集中到一个封装函数里,实现一行代码完成复合多尺度熵特征提取。
如果提取数据“功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、排列熵、模糊熵”这全部8种特征,就可以这样写:
cmseFea =genFeatureCMSE(data,1:3,{'psdE','svdpE','eE', 'ApEn', 'SpEn','PeEn','FuzzyEn'}, option);
%调用genFeatureCMSE函数,完成特征提取,算出的特征值会保存在cmseFea变量里
也就是说需要提取哪个特征,在函数中直接指定就可以了。输出的cmseFea变量里就会得到相应的这些特征值,顺序也是与输入的排序保持一致的。
程序运行后会直接绘制出以下3张图:
这个函数的介绍如下:
function cmseFea = genFeatureCMSE(data, scales, featureNamesCell, options)
% 复合多尺度熵特征提取函数
% 输入:
% data:待特征提取的时域信号,必须是一维数据
% scales:要分析的尺度数组
% featureNamesCell:拟进行特征提取的特征名称,该变量为cell类型,其中包含的特征名称为字符串,特征名称需要在下边列表中:
% 目前支持的特征(2022.7.10,共8种):
% psdE:功率谱熵
% svdpE:奇异谱熵
% eE:能量熵
% ApEn:近似熵
% SpEn:样本熵
% FuzzyEn:模糊熵
% PeEn:排列熵
% enveEn:包络熵
% options:其他设置,使用结构体的方式导入。目前可设置变量包括:
% -svdpEn:即奇异值的窗口长度。
% -Apdim:近似熵参数,Apdim为近似熵的模式维度
% -Apr:近似熵参数,Apr为近似熵的阈值
% -Spdim:样本熵参数,Spdim为样本熵的模式维度
% -Spr:Spr为样本熵的阈值
% -Fuzdim:模糊熵参数,Fuzdim为模糊熵模式维度
% -Fuzr:模糊熵参数,Fuzr为模糊熵的阈值
% -Fuzn:模糊熵参数,Fuzn为模糊熵权重
% -Pedim:排列熵参数,Pedim为排列熵模式维度
% -Pet:排列熵参数,Pet为排列熵的时间延迟
% -fs:采样频率,采样频率即每秒钟采集的数据点数,按照实际情况设置,该参数目前在包络熵特征采集中用到
% -figflag:是否画图,'on'为画图,'off'为不画图
%
% 输出:
% cmseFea:不同尺度下的特征值,是二维数据,每行代表一种熵的计算结果
% cmseFea的行数和featureNamesCell中指定的特征量一致,且顺序一一对应
需要上边这个函数文件以及测试代码的同学,可以在公众号 khscience(看海的城堡)中回复“复合多尺度熵”获取。
相关文章
Mr.看海:【熵与特征提取】基于“信息熵”的特征指标及其MATLAB代码实现(功率谱熵、奇异谱熵、能量熵)
Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第一篇)——近似熵及其MATLAB实现
Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第二篇)——样本熵及其MATLAB实现
Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第三篇)——模糊熵及其MATLAB实现
Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第四篇)——排列熵及其MATLAB实现
Mr.看海:【多尺度熵与特征提取】一文看懂“多尺度熵”——多尺度样本熵、多尺度模糊熵、多尺度排列熵、多尺度包络熵、多尺度功率谱熵、多尺度能量熵、多尺度奇异谱熵及其MATLAB实现
参考
- ^刘津涛.EMD结合复合多尺度熵的模拟电路故障诊断方法研究[D].湖南师范大学,2021.DOI:10.27137/d.cnki.ghusu.2021.001319.