网络首发:MTF-CNN-Attention故障识别: 基于马尔可夫场(MTF)和卷积网络(CNN)融合注意力机制的故障识别程序

发布时间:2023年12月24日

适用平台:Matlab2023版本及以上

本程序参考中文EI期刊《电网技术》网络首发文献:《基于马尔可夫转换场与多头注意力机制的电能质量扰动分类方法》,程序注释清晰,干货满满,下面对文章和程序做简要介绍!

文献创新点:这篇文献的创新点在于马尔可夫场(MTF)与卷积神经网络(CNN)相结合,融入多头注意力机制,实现故障分类。MTF将一维信号转换为二维特征图,而CNN可以对这些特征图进行自适应的特征提取和分类,融合多头注意力机制有效把握提取特征的贡献程度,实现了故障的准确分类。

故障识别流程:

原理:马尔可夫转换场(Markov transition field, MTF)是一种将时序数据转化为空间图像数据的方法,该方法扩展了马尔可夫状态转移矩阵,通过顺序表达状态转移矩阵,充分保留了离散化时域动态信息,最终利用模糊内核聚合生成二维图像。以电压正弦信号为例,MTF示意图如下图所示。

MTF-CNN-Attention进行故障识别的方法具有几个创新性的方面:

数据表示的创新:通常,一维序列(如时间序列数据)直接用于建模和分析。将这些序列转化为马尔可夫场图像,实际上是一种新的数据表示方法。这种转换可能揭示出序列数据中的新模式和结构特征,这些在原始一维形式中可能不那么明显或难以检测。比传统的时序分析方法更有效地捕捉复杂的模式和异常。

图像处理技术:通过将序列数据转化为图像,可以利用成熟的图像处理技术和图像识别算法来分析数据。这包括使用各种图像识别方法,如卷积神经网络(CNN),这些方法在图像分析领域已被证明非常有效,但在传统的序列数据分析中不常见。

捕捉时间依赖性:马尔可夫场是一种数学模型,用于表示随机变量之间的依赖关系。在将序列数据转化为马尔可夫场图像时,可以以图像的形式捕捉时间序列中的时间依赖性和动态变化,这为理解和识别时间序列中的故障模式提供了新的视角。

多头注意力机制:融合多头注意力机制有效把握提取特征的贡献程度,将特征进行重点强化,提高故障识别的准确率。

程序套用:马尔可夫转换场(MTF)将一维时序生成二维图像,再用CNN提取图像的高维特征,利用多头自注意力机制(Multihead Self-Attention)将特征进行重点强化,提高故障识别的准确率。完整代码:🍞正在为您运送作品详情

输入数据格式:(一行一个样本,最后一列表示故障所属类别标签)

由上述数据生成MTF图像:

识别结果:(训练集和测试集的混淆矩阵)

训练集和测试集的散点图:

训练曲线:准确率和损失变化图

马尔可夫场部分程序:

% 加载数据
data = xlsread('特征数据带标签.xlsx');

% 获取数据集的样本数量和每个样本的长度
[numSamples, sampleLength] = size(data);

% 循环处理每个样本数据
for sampleIdx = 1:numSamples
    %% 生成数据
    % 从data中获取当前样本数据
    featureData = data(sampleIdx, 1:end - 1);

    X = featureData;
    m = length(X);
     
    % 将数据归一化到[0, 1]
    X_normalized = (X - min(X)) / (max(X) - min(X));
     
    %% 构造转移矩阵W
    numDataPoints = length(X);
     
    % 分成Q个分位箱(按照个数),从小往大:1、2、3、4
    Q = 4;
     
    % 将每个元素映射到分位箱1、2、3、4,
    X_Q = ones(1, numDataPoints);
    threshold = 0;
     
    % 初始化阈值
    thresholds = ones(1, Q + 1);
    for i = 2 : Q + 1
        
        % 循环计算小于当前阈值的数据个数,达到阈值时跳出循环
        while sum(X_normalized < threshold) < numDataPoints * (i - 1) / Q
            threshold = threshold + 0.0001;
        end
        
        % 记录每一个分位箱的阈值
        thresholds(i) = threshold;
        
        % 将原始数据向量变成对应的分位箱次序向量
        X_Q(find(X_normalized < thresholds(i) & X_normalized > thresholds(i - 1))) = i - 1;
    end
     
    %% 计算马尔可夫矩阵
    % 初始化各状态转移计数
    sum_11 = 0; sum_12 = 0; sum_13 = 0; sum_14 = 0;
    sum_21 = 0; sum_22 = 0; sum_23 = 0; sum_24 = 0;
    sum_31 = 0; sum_32 = 0; sum_33 = 0; sum_34 = 0;
    sum_41 = 0; sum_42 = 0; sum_43 = 0; sum_44 = 0;

部分图片来源于网络,侵权联系删除!

欢迎感兴趣的小伙伴关注下方公众号代码前的链接获得完整版代码,小编会继续推送更有质量的学习资料、文章和程序代码!

文章来源:https://blog.csdn.net/weixin_48747334/article/details/135177154
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。