首页 > 编程语言 >Python用CNN+LSTM+Attention对新闻文本分类、锂离子电池健康、寿命数据预测

Python用CNN+LSTM+Attention对新闻文本分类、锂离子电池健康、寿命数据预测

时间:2024-09-02 23:25:26浏览次数:9  
标签:plot plt Python 模型 Attention CNN 电池

全文链接:https://tecdat.cn/?p=37561

原文出处:拓端数据部落公众号

 分析师:Weiqiao Jue

在当今的数字化时代,数据的爆炸式增长既带来了机遇,也带来了挑战。如何从海量的数据中高效地提取有价值的信息,并进行准确的分类和预测,成为了众多领域亟待解决的关键问题。

本研究通过CNN+LSTM+Attention模型提高新闻文本分类的精确性的案例,结合Attention+CNN+BiLSTM锂离子电池健康、寿命预测的代码数据,深入探讨 Python 在不同领域的应用以及深度学习技术在数据处理和预测中的强大潜力,为推动相关领域的发展提供有益的参考和借鉴。

CNN+LSTM+Attention模型提高新闻文本分类的精确性

新闻文本分类,准确地将海量新闻文本划分到不同类别中,有助于信息的高效检索和利用。为了实现更高的分类精确性,我们引入了 CNN+LSTM+Attention 模型。该模型利用大规模的训练集和测试集数据,经过精心的数据处理和复杂的模型架构设计,能够有效地捕捉新闻文本中的语义特征和上下文关系,从而显著提高分类的准确性,减少误差。

 

任务/目标

使用CNN+LSTM+Attention模型提高新闻文本分类的准确性,减少误差

数据源准备

训练集为20w条样本,测试集为10w条样本。将训练集分为10份,前9份为训练集,最后1份为验证集。定义并创建vacab。Vacab有两份,一份是自创建的,另一份是外部加载的。得到词与字典对应的embedding。

模型构建

按照vacab将文本转换为对应的索引,最后返回的数据是list,里面的每一个元素是tuple。进而将每一个batch转换成tensor,生成训练数据。

词向量输入CNN中,CNN中分别定义了3个大小不同的卷积核,经过卷积+池化后将3个向量拼接输入双向LSTM中。接着,经过Attention,在Attention中经过线性变化得到key,再将key与query相乘得到output,表示每个句子所分配到的权重,再进行softmax。最后进入FC层得到分类概率的向量。

最后测试集得分为74.10。相较于单一模型的文本分类其效果有显著提升。

Attention+CNN+BiLSTM锂离子电池健康、寿命预测

锂离子电池的健康状态(State of Health,SOH)和剩余使用寿命(Remaining Useful Life,RUL)是电池化学的重要方面,从不同角度描述了电池的当前老化程度。为提高电池健康评估模型的有效性和准确性,本文实现了一种利用卷积神经网络(Convolutional Neural Networks,CNN)、双向长短期记忆网络(Bidirectional Long Short-Term Memory,BiLSTM)和注意力机制(Attention Mechanism,AM)对锂离子电池的 SOH 和 RUL 进行估计的方法,构建了用于锂离子电池容量估计的混合网络模型,并计算 SOH 和 RUL。

引言

锂离子电池在现代社会中有着广泛的应用,准确评估其健康状态和剩余使用寿命对于确保设备的可靠运行至关重要。传统的电池健康评估方法存在一定的局限性,而深度学习方法在处理复杂数据和挖掘潜在特征方面具有优势。因此,本文提出了一种基于注意力机制的 CNN-BiLSTM 混合网络模型,以提高锂离子电池健康状态预测的准确性。

数据来源

本文使用的锂离子电池数据来自美国国家航空航天局艾姆斯预测数据存储库(NASA Ames Prognostics Data Repository)[1]。此外,还包括一个用于对该数据集进行初步数据探索的笔记本以及一个用于荷电状态(State of Charge,SOC)预测的支持向量机(Support Vector Machine,SVM)模型。

模型概述

该模型首先使用卷积神经网络(CNN)进行特征提取和数据降维。这些特征作为双向长短期记忆网络(BiLSTM)的输入。BiLSTM 用于双向学习输入时间序列局部特征中的时间相关性信息。注意力机制通过为重要特征分配权重,更加关注对输出结果影响最大的输入关键特征,并进行电池 SOH 的多步预测。总体而言,卷积层提取时间序列数据的内在特征,BiLSTM 可以基于提取的特征预测电池容量,而注意力机制为这些特征分配权重。混合神经网络模型的结构示意图如下图 [2] 所示。

 

结果与分析

不同电池的容量绘制。

绘制不同电池的容量曲线,如下所示:

 
  1.    
  2.   ax.plot(B0005_capacity[0], B0005_capacity[1], color='blue', label='Battery-05')
  3.   ax.plot(B0006_capacity[0], B0006_capacity[1], color='green', label='Battery-06')
  4.   ax.plot(B0007_capacity[0], B0007_capacity[1], color='red', label='Battery-07')
 

 

充电数据绘制

针对充电数据进行绘制,代码如下:

 
  1.   indx = 1
  2.   for label in charging_labels:
  3.   fig, ax = plt.subplots(1, figsize=(20, 7))
  4.   fig1, ax1 = plt.subplots(1, figsize=(20, 7))
  5.   fig2, ax2 = plt.subplots(1, figsize=(20, 7))
  6.   fig3, ax3=plt.subplots(1, figsize=(20, 7))
  7.    
  8.   ax.plot(B0005_charging[5], B0005_charging[indx], color='red' ,label="B0005")
  9.   ax1.plot(B0006_charging[5], B0006_charging[indx], color='orange', label="B0006")
 

 

放电数据绘制

对于放电数据进行绘制,代码如下:

 
  1.   indx = 1
  2.   for label in charging_labels:
  3.   fig, ax = plt.subplots(1, figsize=(20, 7))
  4.   fig1, ax1 = plt.subplots(1, figsize=(20, 7))
  5.   fig2, ax2 = plt.subplots(1, figsize=(20, 7))
  6.    
  7.   ax.plot(B0005_discharging[5], B0005_discharging[indx], color='red' ,label="B0005")
  8.   ax1.plot(B0006_discharging[5], B0006_discharging[indx], color='orange', label="B0006")
  9.   ax2.plot(B0007_discharging[5], B0007_discharging[indx], color='blue' ,label="B0007")
 

SVM

 SVM 模型应用

  1. 获取 B0005 的数据框并绘制残差图:
 
  1.   dfB0005 = getDataframe(B0005)
  2.   sns.residplot(dfB0005['cycle'], dfB0005['capacity'])
 

 

使用最佳支持向量回归(Support Vector Regression,SVR)进行预测 

y_pred = best_svr.predict(X.values.reshape(-1, 1))

 

电池 SOC 的 CNN-BiLSTM-Attention 模型

定义模型参数:INPUT_DIMS = 4TIME_STEPS = 10lstm_units = 64。对数据进行归一化处理 

 
  1.   INPUT_DIMS = 4
  2.   TIME_STEPS = 10
  3.   lstm_units = 64
  4.   #Normalized
  5.   data,normalize = NormalizeMult(dfB0007)
  6.   capacity_data = data[:,0].reshape(len(dfB0007),1)
 

 打印数据集形状并构建注意力模型

 
  1.   train_X, _ = create_dataset(data,TIME_STEPS)
  2.   _ , train_Y = create_dataset(capacity_data,TIME_STEPS)
  3.    
  4.   print(train_X.shape,train_Y.shape)
  5.    
  6.   m = attention_model()
  7.   m.summary()
 

 
  1.   print(train_X.shape,train_Y.shape)
  2.    
  3.   m = attention_model()
  4.   m.summary()
 

 

绘制模型平均绝对误差(Mean Absolute Error,MAE)曲线和真实值与预测值对比曲线 

 
  1.   plt.plot(history.history['mae'])
  2.   plt.plot(history.history['val_mae'])
  3.   plt.title('model MAE')
  4.   plt.ylabel('MAE')
  5.   plt.xlabel('epoch')
  6.   plt.legend(['train', 'validation'], loc='upper left')
  7.   plt.show()
 

 

 

 
  1.   plt.plot(test_Y[:100])
  2.   plt.title('real vs pred')
  3.   plt.ylabel('value')
  4.   plt.xlabel('epoch')
  5.   plt.legend(['pred', 'real'], loc='upper left')
 

 

 

结论

本文提出的基于注意力机制的 CNN-BiLSTM 混合网络模型在锂离子电池健康状态预测方面表现出了较好的性能。通过对来自 NASA 数据存储库的锂离子电池数据进行实验,验证了该模型在特征提取、时间相关性学习和关键特征关注方面的有效性。未来,可以进一步优化模型结构和参数,提高预测的准确性和稳定性,并将该模型应用于实际的电池管理系统中,为电池的安全运行和维护提供有力支持。

 

参考文献 

[1] B. Saha and K. Goebel (2007). "Battery Data Set", NASA Ames Prognostics Data Repository (https://ti.arc.nasa.gov/tech/dash/groups/pcoe/prognostic-data-repository/#battery), NASA Ames Research Center, Moffett Field, CA

[2] Zhu Z, Yang Q, Liu X, Gao D. Attention-based CNN-BiLSTM for  SOH and RUL estimation of  lithium-ion batteries. Journal of Algorithms & Computational Technology. 2022;16. doi:10.1177/17483026221130598

关于分析师 

在此对 Weiqiao Jue 对本文所作的贡献表示诚挚感谢,他完成了计算机科学与技术专业的硕士学位,专注深度学习、NLP、图像处理领域。擅长使用 PyCharm、Pytorch 框架。

 

标签:plot,plt,Python,模型,Attention,CNN,电池
From: https://www.cnblogs.com/tecdat/p/18393736

相关文章

  • python-uinput虚拟输入
    文章目录python-uinput虚拟输入背景库简介:什么是python-uinput?安装指南:如何获取这个强大的工具?快速上手:五个核心函数的介绍与使用1.创建虚拟设备2.模拟键盘输入3.模拟鼠标移动4.模拟鼠标点击5.模拟触摸屏操作实战应用:三个场景的代码示例场景一:自动化测试场景二:游戏......
  • 文档自动化:Python-docx的魔力
    文章目录文档自动化:Python-docx的魔力背景:为何选择Python-docx?库简介:Python-docx是什么?安装指南:如何获得Python-docx?基础操作:五个核心函数的探索1.创建文档2.添加段落3.添加标题4.插入图片5.保存文档实战演练:三个场景的应用场景一:生成会议记录场景二:自动化报告生成......
  • Python——描绘Hello Kitty的代码
    没注释的源代码importmathimportturtleast defmyarc(t1,r,angle):  arc_length=2*math.pi*r*angle/360   n=int(arc_length/3)+1   step_length=arc_length/n   step_angle=angle/n   polyline(t1,n,st......
  • python基础(14内置函数介绍)
    python系列文章目录python基础(01变量&数据类型&运算符)python基础(02序列共性)python基础(03列表和元组)python基础(04字符串&字典)python基础(05集合set)python基础(06控制语句)python基础(07函数)python基础(08类和对象)python基础(09闭包&装饰器)python基础(10异常处理)python......
  • Python中的集合魔法:解锁高效数据处理的秘密
    引言集合是一种不允许重复元素的数据结构,并且其内部元素无序排列。这种特性使得集合在某些场景下表现得极为出色:去重:快速去除列表或数组中的重复项。交集、并集、差集等运算:用于比较两个或多个集合间的关系,非常适用于权限控制、用户管理等领域。性能优势:相较于列表,集合......
  • Python机器学习:基础、算法与实战
    1:《Python机器学习:基础算法与实战》内容简介本书基于 Python 语言,结合实际的数据集,介绍了机器学习算法以及数据分析方法的应用。本书主要包含两部分内容,第一部分为 Python 机器学习入门知识:主要介绍了 Python 基础内容、Numpy与Pandas 库数据操作、Matplotlib 与Seaborn......
  • Python中的函数艺术:解锁高效编程的秘密
    引言在软件开发过程中,重复使用相同的代码段是不可避免的。这不仅增加了代码量,还可能导致维护困难。通过定义函数,我们可以将这些重复代码抽象出来,封装成一个可重用的组件。这样做的好处显而易见:减少了代码冗余、提高了代码的复用性,同时也使得程序结构更加清晰。此外,在团队协作时,良......
  • Python机器学习:基础算法与实战-内容介绍
    1:《Python机器学习:基础算法与实战》内容简介本书基于 Python 语言,结合实际的数据集,介绍了机器学习算法以及数据分析方法的应用。本书主要包含两部分内容,第一部分为 Python 机器学习入门知识:主要介绍了 Python 基础内容、Numpy与Pandas 库数据操作、Matplotlib 与Seaborn......
  • Python 实现行为驱动开发 (BDD) 自动化测试详解
    什么是BDD?行为驱动开发(BDD,Behavior-DrivenDevelopment)是一种软件开发过程,旨在通过鼓励协作和沟通,提高软件质量。BDD的核心理念是用自然语言描述软件的行为,使得业务人员、开发人员和测试人员都能参与其中。BDD是由测试驱动开发(TDD,Test-DrivenDevelopment)演......
  • 2024.9.2 Python,用栈写每日温度,等差数列划分,子串所有可能性,等差数列划分,深度优先搜索
    1.每日温度给定一个整数数组temperatures,表示每天的温度,返回一个数组answer,其中answer[i]是指对于第i天,下一个更高温度出现在几天后。如果气温在这之后都不会升高,请在该位置用0来代替。示例1:输入:temperatures=[73,74,75,71,69,72,76,73]输出:[1,1,4,2,......