Python电能质量扰动信号分类(四)基于CNN-BiLSTM的一维信号分类模型

往期精彩内容:

Python-电能质量扰动信号数据介绍与分类-CSDN博客

Python电能质量扰动信号分类(一)基于LSTM模型的一维信号分类-CSDN博客

Python电能质量扰动信号分类(二)基于CNN模型的一维信号分类-CSDN博客

Python电能质量扰动信号分类(三)基于Transformer的一维信号分类模型-CSDN博客

引言

本文基于Python仿真的电能质量扰动信号,先经过数据预处理进行数据集的制作和加载,然后通过Pytorch实现CNN-BiLSTM模型对扰动信号的分类。

Python仿真电能质量扰动信号的详细介绍可以参考下文(文末附 10分类 数据集):

Python-电能质量扰动信号数据介绍与分类-CSDN博客

部分扰动信号类型波形图如下所示:

1 数据集制作与加载

1.1 导入数据

在参考IEEE Std1159-2019电能质量检测标准与相关文献的基础上构建了扰动信号的模型,生成包括正常信号在内的10中单一信号和多种复合扰动信号。参考之前的文章,进行扰动信号10分类的预处理:

第一步,按照公式模型生成单一信号

单一扰动信号可视化:

第二步,导入十分类数据

python 复制代码
import pandas as pd
import numpy as np

# 样本时长0.2s  样本步长1024  每个信号生成500个样本  噪声0DB  
window_step = 1024
samples = 500
noise = 0
split_rate = [0.7, 0.2, 0.1]  # 训练集、验证集、测试集划分比例

# 读取已处理的 CSV 文件
dataframe_10c = pd.read_csv('PDQ_10c_Clasiffy_data.csv' )
dataframe_10c.shape

1.2 制作数据集

第一步,定义制作数据集函数

第二步,制作数据集与分类标签

python 复制代码
from joblib import dump, load
# 生成数据
train_dataframe, val_dataframe, test_dataframe = make_data(dataframe_10c, split_rate)
# 制作标签
train_xdata, train_ylabel = make_data_labels(train_dataframe)
val_xdata, val_ylabel = make_data_labels(val_dataframe)
test_xdata, test_ylabel = make_data_labels(test_dataframe)
# 保存数据
dump(train_xdata, 'TrainX_1024_0DB_10c')
dump(val_xdata, 'ValX_1024_0DB_10c')
dump(test_xdata, 'TestX_1024_0DB_10c')
dump(train_ylabel, 'TrainY_1024_0DB_10c')
dump(val_ylabel, 'ValY_1024_0DB_10c')
dump(test_ylabel, 'TestY_1024_0DB_10c')

2 CNN-BiLSTM分类模型和超参数选取

2.1定义CNN-BiLSTM分类模型

注意:输入数据维度为[64, 1, 1024], 先送入CNN网络进行1d的卷积池化,然后再把卷积池化的空间特征送入BiLSTM进行信号时域特征的提取,最终送入全连接层和softmax进行分类。

2.2 设置参数,训练模型

100个epoch,准确率将近98%,CNN-BiLSTM模型分类效果良好,分类准确率高,性能优越,适当调整模型参数,可以进一步提高分类准确率。

注意调整参数:

  • 可以适当增加 CNN层数和隐藏层维度数,微调学习率;

  • 增加BiLSTM层数和维度数,增加更多的 epoch (注意防止过拟合)

  • 可以改变一维信号堆叠的形状(设置合适的长度和维度)

3 模型评估

3.1 准确率、精确率、召回率、F1 Score

3.2 十分类混淆矩阵:

代码、数据整理如下:

相关推荐
小白学大数据24 分钟前
Scrapy框架下地图爬虫的进度监控与优化策略
开发语言·爬虫·python·scrapy·数据分析
浊酒南街25 分钟前
TensorFlow之微分求导
人工智能·python·tensorflow
立秋678931 分钟前
用Python绘制梦幻星空
开发语言·python·pygame
alpszero43 分钟前
YOLO11解决方案之对象裁剪探索
人工智能·python·计算机视觉·yolo11
白云千载尽1 小时前
相机、雷达标定工具,以及雷达自动标定的思路
python·自动驾驶·ros
咕噜咕噜啦啦1 小时前
python爬虫实战训练
爬虫·python
盛夏绽放2 小时前
Python字符串常用内置函数详解
服务器·开发语言·python
我想睡觉2612 小时前
Python训练营打卡DAY27
开发语言·python·机器学习
蹦蹦跳跳真可爱5892 小时前
Python----神经网络(基于DNN的风电功率预测)
人工智能·pytorch·python·深度学习·神经网络·dnn
冰轮a2 小时前
Python打卡 DAY 27
python