【多尺度熵与特征提取】一文看懂“多尺度熵”——多尺度样本熵、多尺度模糊熵、多尺度排列熵、多尺度包络熵、多尺度功率谱熵、多尺度能量熵、多尺度奇异谱熵及其MATLAB实现

在之前的系列的文件里,我对信息熵(功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、排列熵、模糊熵)进行了较为系统的讲解(文章链接见文末)。

不过时常会有同学问我:为什么求熵值画不出来图?

对于一组一维数据来说,求它的某种信息熵(比如模糊熵)得到的就是单一的数值,它描述的是这段信号的复杂度,单一的数据点自然没办法画图。

不过对于朴素的“想要有张图贴到论文中”的想法,今天要讲的“多尺度熵”就可以满足了。

一、为什么要“多尺度”

简单地说,就是为了解决之前求信息熵尺度单一的问题,也就是分析对象只针对原始信号本身,这意味着,这些方法可能忽视了信号中的重要信息,尤其是在分析具有多重时间尺度特征的复杂信号时。

许多类型的信号,例如生理信号(如心电图)和金融市场数据,显示出在不同时间尺度上具有不同复杂性的特征。例如,心电图信号在短时间尺度上可能表现出快速的波动,而在长时间尺度上显示出更缓慢的趋势。

所以Costa 等提出了另一种时间序列复杂度的衡量方法—— 多尺度熵( multiscale entropy,简称MSE),用以衡量时间序列在不同尺度上的复杂性, 极大地丰富了熵的含义。

二、“多尺度”是如何实现的

其实多尺度的实现是非常简单粗暴的。

首先这里引入了一个叫做“尺度因子”的概念。

当尺度因子等于1时,处理后的序列就等于原序列。
当尺度因子等于2时,则将序列中相邻的2个数求平均,例如原始序列为  X={2,4,6,8,10,12} ,则处理后的序列为:每两个数的平均值,即: {(2+4)/2,(6+8)/2,(10+12)/2}={3,7,11}。此时你可以看出,此时序列长度变为以前的1/2
当尺度因子等于3时,则将序列中相邻的3个数求平均,此时序列长度变为以前的1/3,依此类推。

这个处理过程叫做“粗粒化”,可以说这个命名还是很形象的,随着尺度因子的增加,更多的细节信号在平均之后小时,序列所包含的信息变得更加平滑,动态特征减少,相应的长期趋势特征变得更为突出。

经过一系列的多尺度计算,比如尺度因此从1取到5,就可以得到5个新的数列,此时我们就可以观察信号在不同时间尺度下的行为。

拿一张图来直观展示一下这种“粗粒化”过程:

原始信号和5个尺度因子下的粗粒化处理结果

从上图可以看出三点:1.尺度为1时,粗粒化信号就是原信号。2.随着尺度因子的增大,信号变得更加“平滑”,细节信号变得更少,也就是变得更“粗”。3.数据长度随着尺度因子的增大,变得越来越短。

所以,粗粒化是多尺度熵分析不可或缺的一部分,它使我们能够从一个全新的角度来观察和分析时间序列数据。

三、从1到n——从多尺度熵到多尺度某某熵

好了,现在我们得到了“多尺度”的一系列信号,那怎样求多尺度熵呢?

其实同样简单的很。

拿样本熵举例:对于原始信号X,我们求出它的样本熵就是单一的数值spEn;如果我先通过粗粒化得到了5个尺度因子下的序列X1~X5,再分别求样本熵,就可以得到spEn1~spEn5这5个特征值。这5个特征值就是原始信号X的多尺度样本熵。

多尺度模糊熵、多尺度排列熵、多尺度包络熵、多尺度功率谱熵、多尺度能量熵、多尺度奇异谱熵这些的道理也是一样的。

简单吧。

为了帮助大家更加直观地理解,下边举个例子说明:

首先我们生成一段仿真信号,它是由幅值为1的2hz正弦、幅值为0.5的1.5hz正弦以及白噪声信号叠加而成的:

待分析的仿真信号

现在我们将其粗粒化处理成10个尺度的信号,尺度值分别为1~10,得到的信号如下:

尺度为1-10绘制出的信号

然后对这10个信号分别求样本熵,就可以得到多尺度样本熵的计算结果:

多尺度样本熵

当然,我们也可以求其他类型的熵,得到各种类型熵的多尺度计算结果,就像这样:

8种多尺度熵计算结果

四、多尺度熵该怎么使用

简单来说,使用方法有以下两种:

4.1 根据多尺度熵的数值大小和变化规律进行直观判断

这里举个例子,比如我们在使用熵值进行故障诊断,原始信号在单一尺度上的样本熵值虽然能够区分转子的故障类型,但是区分效果不明显。 但是如果使用多尺度熵,可以反映出不同故障状态与正常状态的多尺度熵值的大小关系。例如论文《多尺度熵在转子故障诊断中的应用》中的案例,对正常、不对中、不平衡、碰摩和油膜涡动转子信号求多尺度熵,可以得到这样的计算结果:

从上边图中,论文得出了以下结论:

转子径向位移信号在大部分尺度上较正常状态的复杂,无规则程度较高,不平衡和正常状态的次之。 不对中和油膜涡动状态径向位移信号在大部分尺度下的样本熵值较小,说明不对中和油膜涡动状态径向位移信号自相似性较高,信号较为规则。
5种状态的多尺度熵曲线都是随着尺度因子的增加而渐变地趋向于某一值,这说明多尺度熵不仅反映了时间序列本身的复杂性程度,而且还包含了序列在其他尺度上的信息,这是分形维数和样本熵所无法反映的,说明了多尺度熵的优越性。

大家在做其他领域研究时,也可以采取类似方式进行分析判断。

2. 将多尺度熵值作为后续其他算法的输入

多尺度熵(MSE)提供了一种度量信号在不同时间尺度上复杂性的方法。在机器学习和数据挖掘中,MSE可以用来从时间序列数据中提取特征,尤其是当数据的复杂性或动态变化是关注的焦点时。

具体步骤大致如下:

1.根据需要,对原始时间序列数据进行必要的预处理,如去噪、标准化等。
2.针对数据计算多尺度熵,得到每个时间尺度上的熵值,此时熵的类型可能是多种,所以得到会是一个矩阵,其中一个维度是时间尺度长度,另一个维度是熵的类型数。
3.使用这些特征向量训练机器学习模型,如分类器或回归模型。模型将学习如何基于这些复杂性特征来进行预测或分类。

多尺度熵作为一种强大的特征提取工具,其在机器学习和数据挖掘领域的应用增强了模型对于时间序列数据复杂性的理解和分析能力。正确应用这些特征可以显著提升模型性能,尤其是在需要深入分析数据动态变化的场景中。

五、MATLAB代码实现

多尺度熵的代码在网上似乎能找到,不过为了给大家提供靠谱的代码来源,笔者重新进行了代码编写和封装。

由于搞科研写论文时,对特征提取的需要往往是集中性的、多种类的、需求各异的,所以我把之前介绍过的功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、排列熵、模糊熵、包络熵这8个熵特征进行了打包:

以上8种全都集中到一个封装函数里,实现一行代码完成多尺度熵特征提取。

如果提取数据“功率谱熵、奇异谱熵、能量熵、近似熵、样本熵、排列熵、模糊熵”这全部8种特征,就可以这样写:

mseFea =genFeatureMSE(data,1:10,{'psdE','svdpE','eE', 'ApEn', 'SpEn','PeEn','FuzzyEn'}, option);  
%调用genFeatureMSE函数,完成特征提取,算出的特征值会保存在mseFea变量里

也就是说需要提取哪个特征,在函数中直接指定就可以了。输出的mseFea变量里就会得到相应的这些特征值,顺序也是与输入的排序保持一致的。

程序运行后会直接绘制出以下两张图:

粗粒化信号

多尺度熵结果

这个函数的介绍如下:

function mseFea = genFeatureMSE(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'为不画图

% 
% 输出:
% mseFea:不同尺度下的特征值,是二维数据,每行代表一种熵的计算结果
% mseFea的行数和featureNamesCell中指定的特征量一致,且顺序一一对应  

需要上边这个函数文件以及测试代码的同学,可以在下边链接获取:

特征提取(多尺度熵) - 工具箱文档 | 工具箱文档

相关文章

Mr.看海:【熵与特征提取】基于“信息熵”的特征指标及其MATLAB代码实现(功率谱熵、奇异谱熵、能量熵)

Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第一篇)——近似熵及其MATLAB实现

Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第二篇)——样本熵及其MATLAB实现

Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第三篇)——模糊熵及其MATLAB实现

Mr.看海:【熵与特征提取】从近似熵,到样本熵,到模糊熵,再到排列熵,究竟实现了什么?(第四篇)——排列熵及其MATLAB实现

  • 18
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.看海

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值