CNN-LSTM回归预测模型

2023-11-03

 使用CNN-LSTM搭建一个简单的回归预测模型,对油耗数据进行预测分析

首先导入必要的包,主要用到numpy,pandas,matplotlib和tensorflow下面的一些网络模型。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from tensorflow.keras.models import Sequential
from tensorflow.keras.utils  import plot_model
from sklearn.model_selection import train_test_split
from tensorflow.keras.layers import Dense, Dropout,Flatten,Activation,LSTM
from sklearn.preprocessing import MinMaxScaler

采用pandas读取数据,数据集部分展示如下,其中以发动机燃油消耗率为目标值,其余变量为特征值。

数据预处理,数据集进行归一化处理。

X = data.iloc[:,1:11]
Y = data.iloc[:,0:1]

X_transfer = MinMaxScaler()
X_transfer = MinMaxScaler()

x_MM = transfer.fit_transform(x)
Y_MM = transfer.fit_transform(Y)

归一化后数据由Datafram格式转换为ndarray格式,归一化后的数据展示如下

归一化完成后对数据集进行切分,采用SKlearn下面的train_test_splist方法对数据进行切分,按照3:1的比例划分训练集和测试集。

x_train, x_test, Y_train, Y_test = train_test_split(X_MM, Y_MM, test_size=0.25, random_state=10,shuffle=False)

数据集划分完毕后,对特征数据添加时间步长,由于本数据集采用单步预测,故不用特别定义时间步长函数来构造时间滑窗,直接使用numpy的reshape方法即可。

X_train = x_train.reshape(x_train.shape[0], 1, x_train.shape[1])
X_test= x_test.reshape(x_test.shape[0], 1, x_test.shape[1])

 添加时间步长之后的特征数据形状如下。

 以上完成了对数据的基本处理,数据处理完毕之后,开始模型的搭建。构建一个由一维卷积层和LSTM组合而成的CNN-LSTM神经网络。网络代码如下。

#搭建CNN-LSTM融合神经网络
model = Sequential()
model.add(Conv1D(filters=32, kernel_size=3, padding='same', strides=1,
                     activation='relu', input_shape=(X_train.shape[1], X_train.shape[2])))  # input_shape=(X_train.shape[1], X_train.shape[2])
model.add(MaxPooling1D(pool_size=1))
model.add(LSTM(16, return_sequences=True))
model.add(LSTM(8, return_sequences=False))
model.add(Dense(1))
model.compile(loss='mse', optimizer='adam')

 网络搭建完成之后,对网络进行拟合训练。

# 拟合网络
history = model.fit(X_train, Y_train, epochs=100, batch_size=256, shuffle=False,validation_data=(X_test,Y_test)

可以看到训练过程,还是效果还是非常好的.

 训练完整之后对模型进行测试集和验证集预测。

#在训练集和测试集上的拟合结果
Y_train_predict_CNN_LSTM= model.predict(X_train)
Y_test_predict_CNN_LSTM= model.predict(X_test)
#反归一化
Y_train_predict_CNN_LSTM_inver = X_transfer .inverse_transform(Y_train_predict_CNN_LSTM)
Y_test_predict_CNN_LSTM_inver = X_transfer .inverse_transform(Y_test_predict_CNN_LSTM)
Y_train_inver = transfer_y.inverse_transform(Y_train)
Y_test_inver = transfer_y.inverse_transform(Y_test)

输出模型评价指标。

#输出结果
from sklearn.metrics import mean_absolute_error,mean_squared_error,r2_score
print('CNN-LSTM训练集上的MAE/MSE/r2')
print(mean_absolute_error(Y_train_predict_CNN_LSTM_inver,Y_train_inver))
print(mean_squared_error(Y_train_predict_CNN_LSTM_inver,Y_train_inver) )
print(r2_score(Y_train_predict_CNN_LSTM_inver,Y_train_inver) )
print('CNN-LTSM测试集上的MAE/MSE/r2')
print(mean_absolute_error(Y_test_predict_CNN_LSTM_inver, Y_test_inver))
print(mean_squared_error(Y_test_predict_CNN_LSTM_inver, Y_test_inver))
print(r2_score(Y_test_predict_CNN_LSTM_inver, Y_test_inver))

 绘制训练Loss曲线。

# 绘制图像
plt.figure(1,figsize=(12,6),dpi=80)
plt.plot(history.history['loss'], label='Train')
plt.plot(history.history['val_loss'], label='Vavid')
plt.title('loss curve')
plt.legend()
plt.show()

 绘制真实值和预测值对比图。

plt.figure(2,figsize=(12,6),dpi=80)
plt.plot(range(len(Y_test_inver)),Y_test,color='k',label='真实值')
plt.plot(range(len(Y_test_CNN_LSTM_inver)),Y_test_predict_CNN_LSTM_inver,color='',label='预测值')
plt.xlabel('测试样本数量',fontsize=20)
plt.ylabel('油耗/(L/h)',fontsize=20)
plt.tick_params(labelsize=20)
plt.legend(fontsize=20)
plt.savefig("真实值和预测值对比.svg", dpi=80,format="svg")
plt.show()

 需要完整代码以及咨询问题的加qq:1019312261,智能算法的改进,智能算法与神经网络结合等等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CNN-LSTM回归预测模型 的相关文章

  • 如何从张量流中的RNN模型中提取细胞状态和隐藏状态?

    我是 TensorFlow 新手 很难理解 RNN 模块 我正在尝试从 LSTM 中提取隐藏 单元状态 对于我的代码 我使用的实现https github com aymericdamien TensorFlow Examples http
  • 振动信号数据如何制作特征?

    对振动信号进行特征提取是故障诊断和预测中常见的任务 下面是一些可能对振动信号有用的特征 时域特征 均值 Mean 标准差 Standard Deviation 峭度 Kurtosis 偏度 Skewness 峰值因子 Peak to Pea
  • 卷积神经网络:专门用于图像和语音处理的深度学习模型

    随着人工智能技术的发展和应用 深度学习模型在图像和语音处理领域中扮演着越来越重要的角色 其中 卷积神经网络 Convolutional Neural Network 简称CNN 是一种专门用于图像和语音处理的深度学习模型 本文将介绍卷积神经
  • 卷积神经网络:专门用于图像和语音处理的深度学习模型

    随着人工智能技术的发展和应用 深度学习模型在图像和语音处理领域中扮演着越来越重要的角色 其中 卷积神经网络 Convolutional Neural Network 简称CNN 是一种专门用于图像和语音处理的深度学习模型 本文将介绍卷积神经
  • 毕业设计:基于卷积神经网络的图像分类系统 python人工智能

    目录 前言 设计思路 一 课题背景与意义 二 算法理论原理 2 1 卷积神经网络 2 2 SVM算法 三 检测的实现 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力
  • keras 学习的 LSTM 网络中的前向传递

    我有以下代码 希望能够从 2 层 LSTM 获得前向传递 this is a simple numerical example of LSTM forward pass to allow deep understanding the LST
  • 如何处理极长的LSTM序列长度?

    我有一些数据以非常高的速率 大约每秒数百次 采样 对于任何给定实例 这会导致平均序列长度很大 约 90 000 个样本 整个序列有一个标签 我正在尝试使用 LSTM 神经网络将新序列分类为这些标签之一 多类分类 然而 使用具有如此大序列长度
  • Keras ConvLSTM2D:输出层上的 ValueError

    我正在尝试训练 2D 卷积 LSTM 以根据视频数据进行分类预测 然而 我的输出层似乎遇到了问题 ValueError 检查目标时出错 预期dense 1 有 5 个维度 但得到了形状为 1 1939 9 的数组 我当前的模型基于ConvL
  • 使用 conv1D “检查输入时出错:期望 conv1d_input 有 3 个维度,但得到形状为 (213412, 36) 的数组”

    我的输入只是一个 csv 文件237124行和37列 首先36列作为特征 The last列是一个二进制类标签 我正在尝试在 conv1D 模型上训练我的数据 我尝试过建立一个一层 CNN 但我有一些问题 编译器输出 ValueError
  • Keras One Hot 编码内存管理 - 最好的出路

    我知道这个问题已经以不同的方式得到了解答past https stackoverflow com questions 41058780 python one hot encoding for huge data 但我无法弄清楚并适合我的代码
  • 张量流中 LSTM 的正则化

    Tensorflow 提供了一个很好的 LSTM 包装器 rnn cell BasicLSTM num units forget bias 1 0 input size None state is tuple False activatio
  • 在批次之间传递 LSTM 状态的最佳方式

    我正在尝试找到在批次之间传递 LSTM 状态的最佳方法 我已经搜索了所有内容 但找不到当前实施的解决方案 想象一下我有类似的东西 cells rnn LSTMCell size for size in 256 256 cells rnn M
  • 将 CNN 的输出传递给 BILSTM

    我正在开发一个项目 其中我必须将 CNN 的输出传递给双向 LSTM 我创建了如下模型 但它抛出 不兼容 错误 请让我知道哪里出了问题以及如何解决这个问题 model Sequential model add Conv2D filters
  • Tensorflow将LSTM的最终状态保存在dynamic_rnn中用于预测

    我想保存 LSTM 的最终状态 以便在恢复模型时将其包含在内并可用于预测 如下所述 当我使用时 保护程序仅了解最终状态tf assign 但是 这会引发错误 也将在下面解释 在训练期间 我总是将最终的 LSTM 状态反馈回网络 如中所述这个
  • 尝试理解 Pytorch 的 LSTM 实现

    我有一个包含 1000 个示例的数据集 其中每个示例都有5特征 a b c d e 我想喂7LSTM 的示例 以便它预测第 8 天的特征 a 阅读 nn LSTM 的 Pytorchs 文档 我得出以下结论 input size 5 hid
  • 张量流 LSTM 模型中的 NaN 损失

    以下网络代码应该是经典的简单 LSTM 语言模型 一段时间后开始输出 nan 损失 在我的训练集上 这需要几个小时 而且我无法在较小的数据集上轻松复制它 但在认真的训练中 这种情况总是会发生 Sparse softmax with cros
  • 为什么 Keras 的 train_on_batch 在第二个 epoch 产生零损失和准确率?

    我正在使用一个大数据集 所以我尝试使用 train on batch 或适合 epoch 1 model Sequential model add LSTM size input shape input shape return seque
  • 为什么不使用均方误差来解决分类问题?

    我正在尝试使用 LSTM 解决一个简单的二元分类问题 我正在尝试找出网络的正确损失函数 问题是 当我使用二元交叉熵作为损失函数时 与使用均方误差 MSE 函数相比 训练和测试的损失值相对较高 经过研究 我发现二元交叉熵应该用于分类问题 MS
  • 将 Dropout 与 Keras 和 LSTM/GRU 单元结合使用

    在 Keras 中 您可以像这样指定 dropout 层 model add Dropout 0 5 但对于 GRU 单元 您可以将 dropout 指定为构造函数中的参数 model add GRU units 512 return se
  • CNTK 抱怨 LSTM 中的动态轴

    我正在尝试在 CNTK 中实现 LSTM 使用 Python 来对序列进行分类 Input 特征是固定长度的数字序列 时间序列 标签是 one hot 值的向量 Network input input variable input dim

随机推荐

  • 计算机开机键盘屏幕无反应,电脑开机后键盘显示器无反应怎么解决

    电脑开机后主机灯正常 有风扇和机器声音 但是键盘显示器都没有反应 这是怎么回事呢 电脑开机后键盘显示器无反应怎么解决呢 下面学习啦小编就为大家带来了解决电脑开机后键盘显示器无反应的方法 电脑开机后键盘显示器无反应解决方法一 开机状态下把鼠标
  • 机器学习(五):高斯朴素贝叶斯(基础篇)

    机器学习 五 高斯朴素贝叶斯 基础篇 在高斯朴素贝叶斯中 每个特征都是连续的 并且都呈高斯分布 高斯分布又称为正态分布 图画出来以后像一个倒挂的钟 以均值为轴对称 如下图所示 GaussianNB 实现了运用于分类的高斯朴素贝叶斯算法 特征
  • SQLyog出现错误代码1045

    直接修改mysql的密码即可
  • Elasticsearch 常见的 8 种错误及最佳实践

    Elasticsearch 社区有大量关于 Elasticsearch 错误和异常的问题 深挖这些错误背后的原因 把常见的错误积累为自己的实战经验甚至是工具 不仅可以节省我们的开发和运维时间 而且可以帮助确保 Elasticsearch 集
  • matlab批量读入dat数据,并将dat数据转换为tiff格式

    将dat数据 序号1 1500 读入matlab 并将其转换为 png格式 代码参考如下 clear close all num 1500 待读入的dat数量 addpath K 科目2 2 train dat dat 文件夹 cd K 科
  • Nginx 使用---拒绝指定IP访问

    一 问题描述 服务器可能会受到攻击者的恶意访问 攻击者IP会不断的猜测路径 上传文件 木马 或者进行短信消耗 或者破解密码 等等行为 我们要做的是 对这些恶意的访问IP进行拦截 二 Nginx的日志格式 因为首先一定是要查看日志的 所以首先
  • Oracle入门笔记(六)——多表查询

    多表查询 1 多表查询概览 2 基础多表查询 3 SQL99标准的外连接 4 Oracle自定义的外连接 5 SQL99标准的交叉连接 6 SQL99标准的自然连接 7 SQL99标准的内连接 8 子查询 9 union和intersect
  • 刷爆 LeetCode 双周赛 100,单方面宣布第一题最难

    上周末是 LeetCode 第 100 场双周赛 你参加了吗 这场周赛整体没有 Hard 题 但是也没有 Easy 题 第一题国服前百名里超过一半人 wa 很少见 小彭的技术交流群 02 群来了 公众号回复 加群 加入我们 周赛概览 259
  • Python学习32:计算圆周率——无穷级数法

    描述 是个超越数 圆周率的超越性否定了化圆为方这种尺规作图精确求解问题的可能性 有趣的是 可以用无穷级数表示 左边的展式是一个无穷级数 被称为莱布尼茨级数 Leibniz 这个级数收敛到 4 它通常也被称为格雷戈里 莱布尼茨级数 用以纪念莱
  • RabbitMQ的简单使用、轮询

    视频地址 首先创建一个工程 首先创建一个空的工程 在空的工程里面创建一个maven工程 加入依赖
  • 工具详解-sqlmap使用详解

    sqlmap使用详解 简介 sqlmap是一款基于python编写的渗透测试工具 在sql检测和利用方面功能强大 支持多种数据库 一 SQLMap拖库 SQLMap可以完成注入点的发现 数据库类型的确认 WebShell权限和路径的确认 拖
  • JAVA异常详解

    异常的定义 异常就是有异于常态 和正常情况不一样 有错误出现 在java中 阻止当前方法或作用域的情况 称之为异常 异常的分类 Error 是程序中无法处理的错误 表示运行应用程序中出现了严重的错误 此类错误一般表示代码运行时JVM出现问题
  • java中Collection(集合)

    文章目录 集合 Collection 一 集合的分类 二 集合的特点 三 集合的访问 四 List 1 List 接口方法 2 List的实现方式 1 List接口提供的of 方法 2 ArrayLIst 3 LinkList 3 遍历Li
  • 汇编语言(王爽第三版)实验八

    实验八 题目与个人思路 分析下面的程序 在运行前思考 这个程序可以正确返回吗 运行后再思考 为什么是这种结果 通过这个程序加深对相关内容的理解 assume cs codesg codesg segment mov ax 4c00h int
  • SAP 变更记录表 : CDHDR / CDPOS - 说明及使用

    From 1 http blog sina com cn s blog 7dce1fac01014yp2 html 2 http www cnblogs com cnlmjer archive 2012 04 18 4099808 html
  • 大数据生态组件——Hive安装及配置

    Hive安装与配置 Hive简介 Hive的安装与配置 一 Hive的启动 hive的元数据库 安装配置MySQL MySQL的开机自启操作 配置hive 二 配置hive env sh 配置hive site xml 上传mysql co
  • Android 微信H5支付,无法拉起微信支付页面

    最近我其中一个项目需要接入微信支付 实现方式是在WebView里利用Url拉起微信支付页面 但是实际操作的时候却发现始终无法拉起支付页面 最后排查了一段时间 发现原来是因为一个很简单的问题出错了 于是解决问题以后特意想把这个问题记录下来分享
  • CSS实现文字描边效果

    一 介绍 最近在一个项目的宣传页中 设计师使用了文字描边效果 之前我确实没有实现过文字的描边效果 然后我在查阅资料后 知道了实现方法 文字描边分为两种 内外双描边和单外描边 也就是指在给文字加上描边效果后 描边的方向是向内外同时占用文字空间
  • Bresenham 画圆算法原理

    文章目录 前言 Bresenham 画圆算法原理 两个近似 构造判别式 圆与网格点的关系 关系由来 关系含义 p i p i pi 递推 画圆 程序伪码 圆与网格点的关系图示 前言 首先简要介绍一下生成圆的方法 直接利用圆的方程生成圆 利用
  • CNN-LSTM回归预测模型

    使用CNN LSTM搭建一个简单的回归预测模型 对油耗数据进行预测分析 首先导入必要的包 主要用到numpy pandas matplotlib和tensorflow下面的一些网络模型 import numpy as np import p