首页 > 编程语言 >用python写一段多输入变量卷积神经网络做时间预测的代码

用python写一段多输入变量卷积神经网络做时间预测的代码

时间:2024-12-04 09:57:36浏览次数:8  
标签:plt features python 模型 卷积 神经网络 test timesteps model

为了使用多输入变量的卷积神经网络(CNN)进行时间序列预测,您可以设计一个多通道的CNN模型。每个输入变量(特征)可以作为一个单独的通道,类似于处理彩色图像的RGB通道。

以下是一个完整的示例代码,展示如何构建多输入变量的CNN模型来执行时间序列预测任务。

###示例代码

```python
importnumpyasnp
importpandasaspd
fromsklearn.preprocessingimportMinMaxScaler
fromsklearn.model_selectionimporttrain_test_split
fromkeras.modelsimportModel
fromkeras.layersimportInput,Conv1D,MaxPooling1D,Flatten,Dense,Concatenate
fromkeras.optimizersimportAdam
importmatplotlib.pyplotasplt

#生成模拟的多变量时间序列数据
defgenerate_multivariate_data(n_samples=1000,n_features=5,n_timesteps=100,test_size=0.2):
#创建随机数据,每个样本有n_features个特征,每个特征有n_timesteps个时间步
np.random.seed(42)
data=np.random.rand(n_samples,n_timesteps,n_features)
#假设我们要预测的目标是一个简单的正弦函数值
target=np.sin(np.linspace(0,10,n_samples))

#分割数据集为训练集和测试集
X_train,X_test,y_train,y_test=train_test_split(data,target,test_size=test_size,random_state=42)
returnX_train,X_test,y_train,y_test
#数据生成和预处理
n_timesteps=100
n_features=5
X_train,X_test,y_train,y_test=generate_multivariate_data(n_timesteps=n_timesteps,n_features=n_features)

#归一化数据
scaler=MinMaxScaler(feature_range=(0,1))
X_train=scaler.fit_transform(X_train.reshape(-1,n_features)).reshape(-1,n_timesteps,n_features)
X_test=scaler.transform(X_test.reshape(-1,n_features)).reshape(-1,n_timesteps,n_features)
y_train=scaler.fit_transform(y_train.reshape(-1,1)).reshape(-1)
y_test=scaler.transform(y_test.reshape(-1,1)).reshape(-1)

#构建多输入变量的卷积神经网络模型
defbuild_cnn_model(n_timesteps,n_features):
inputs=[]
conv_layers=[]

#为每个特征创建单独的输入和卷积层
foriinrange(n_features):
input_i=Input(shape=(n_timesteps,1))
inputs.append(input_i)

#卷积层和池化层
conv_i=Conv1D(filters=32,kernel_size=3,activation='relu')(input_i)
pool_i=MaxPooling1D(pool_size=2)(conv_i)
conv_layers.append(pool_i)

#合并所有特征的卷积结果
merged=Concatenate()(conv_layers)

#展平并添加全连接层
flatten=Flatten()(merged)
dense1=Dense(64,activation='relu')(flatten)
output=Dense(1)(dense1)

#构建模型
model=Model(inputs=inputs,outputs=output)
model.compile(optimizer=Adam(learning_rate=0.001),loss='mse')
returnmodel

#构建模型
model=build_cnn_model(n_timesteps,n_features)
model.summary()

#训练模型
history=model.fit(x=[X_train[:,:,i][:,:,np.newaxis]foriinrange(n_features)],
y=y_train,
epochs=50,
batch_size=32,
validation_split=0.2)

#可视化训练过程
defplot_training_history(history):
plt.figure(figsize=(12,5))

#损失
plt.subplot(1,2,1)
plt.plot(history.history['loss'],label='TrainLoss')
plt.plot(history.history['val_loss'],label='ValidationLoss')
plt.title('TrainingandValidationLoss')
plt.xlabel('Epochs')
plt.ylabel('Loss')
plt.legend()

#准确率(如果存在)
#plt.subplot(1,2,2)
#plt.plot(history.history['accuracy'],label='TrainAccuracy')
#plt.plot(history.history['val_accuracy'],label='ValidationAccuracy')
#plt.title('TrainingandValidationAccuracy')
#plt.xlabel('Epochs')
#plt.ylabel('Accuracy')
#plt.legend()

plt.tight_layout()
plt.show()

plot_training_history(history)

#在测试集上评估模型
loss=model.evaluate([X_test[:,:,i][:,:,np.newaxis]foriinrange(n_features)],y_test)
print(f"TestLoss:{loss}")

#使用模型进行预测
y_pred=model.predict([X_test[:,:,i][:,:,np.newaxis]foriinrange(n_features)])

#绘制真实值与预测值的对比图
defplot_predictions(y_test,y_pred):
plt.figure(figsize=(10,6))
plt.plot(y_test,label='TrueValues')
plt.plot(y_pred,label='PredictedValues')
plt.title('TruevsPredictedValues')
plt.xlabel('Samples')
plt.ylabel('Values')
plt.legend()
plt.show()

plot_predictions(y_test,y_pred)
```

###代码详解

1.**生成多变量时间序列数据**:
-`generate_multivariate_data`函数生成一个包含多个特征的时间序列数据集,并创建一个正弦函数值作为目标变量。

2.**数据预处理**:
-使用`MinMaxScaler`对数据进行归一化处理。
-将数据分割为训练集和测试集。

3.**构建多输入变量的CNN模型**:
-使用`Model`和`Input`构建多输入的卷积神经网络。
-为每个输入特征创建单独的卷积层,然后将它们合并在一起。
-添加全连接层并输出预测结果。

4.**训练模型**:
-使用训练数据训练模型,并记录训练历史。

5.**可视化训练过程**:
-绘制训练过程中的损失曲线,观察模型的收敛情况。

6.**评估和预测**:
-在测试集上评估模型性能。
-使用模型进行预测,并绘制真实值与预测值的对比图。

###运行环境

-**Python版本**:Python3.x
-**依赖库**:
-`numpy`
-`pandas`
-`scikit-learn`
-`keras`(通常安装`tensorflow`时会自动安装`keras`)
-`matplotlib`

可以通过以下命令安装所需的库:

```bash
pipinstallnumpypandasscikit-learntensorflowmatplotlib
```

###进一步优化

1.**调整模型架构**:
-增加更多的卷积层和全连接层。
-尝试不同的激活函数和优化器。

2.**超参数调优**:
-调整学习率、批次大小和epoch数量。

3.**特征工程**:
-添加更多有意义的特征或进行特征选择。

通过这个示例,您可以了解如何使用多输入变量的卷积神经网络进行时间序列预测任务。根据需求,您可以调整模型架构和参数,以适应不同的任务和数据集。

下面是一个使用Python编写的多输入变量卷积神经网络(CNN)进行时间预测的示例代码:

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv1D, MaxPooling1D, Flatten, Dense

# 生成示例数据
num_samples = 1000
num_timesteps = 10
num_features = 3

x1 = np.random.rand(num_samples, num_timesteps, num_features)
x2 = np.random.rand(num_samples, num_timesteps, num_features)

# 生成目标数据
y = np.random.rand(num_samples)

# 构建CNN模型
model = Sequential()
model.add(Conv1D(32, kernel_size=3, activation='relu', input_shape=(num_timesteps, num_features)))
model.add(MaxPooling1D(pool_size=2))
model.add(Flatten())
model.add(Dense(64, activation='relu'))
model.add(Dense(1, activation='linear'))

# 编译模型
model.compile(optimizer='adam', loss='mean_squared_error')

# 训练模型
model.fit([x1, x2], y, epochs=10, batch_size=32)

# 使用模型进行预测
predictions = model.predict([x1, x2])
 

上述代码中,我们首先生成了两个输入特征变量 x1 和 x2,每个特征变量包含了 num_timesteps 个时间步长和 num_features 个特征。然后,我们生成了与输入变量对应的目标数据 y

接下来,我们使用 Sequential 模型构建了一个简单的卷积神经网络模型。该模型包含一个卷积层、一个最大池化层、一个展平层和两个全连接层。最后,我们使用 compile 方法编译模型,并使用 fit 方法训练模型。

最后,我们使用训练好的模型对输入变量进行预测,并将预测结果存储在 predictions 变量中。

标签:plt,features,python,模型,卷积,神经网络,test,timesteps,model
From: https://blog.csdn.net/2301_81121233/article/details/144230616

相关文章

  • python (pip)安装talib报错
    转自:https://www.jianshu.com/p/a9f47597b15d  使用pip直接安装talib扩展会出错,根据报错提示,需要在名字中间添加连接字符ta-lib$pipinstallta-lib 报错信息如下:talib/_ta_lib.c:526:10:fatalerror:'ta-lib/ta_defs.h'filenotfound#includ......
  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
                   摘 要在网络信息的时代,众多的软件被开发出来,给业主带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,智慧小区管理系统只能以业主为导向,以产品的持续创新作为智慧小区管理系统最重要的竞争手段。系统采用了B/S结构,将......
  • (免费源码)计算机毕业设计必学必看 万套实战教程 java、python、php、node.js、c#、APP
    摘要信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对在线考试等问题,对如何通过计算机在线考试进行研究分析,然后开发设计出在线考试系统已解决问......
  • 计算机毕业设计Python+卷积神经网络股票预测系统 股票推荐系统 股票可视化 股票数据分
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • 计算机毕业设计SpringCloud+大模型微服务高考志愿填报推荐系统 高考大数据 SparkML机
    温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!温馨提示:文末有CSDN平台官方提供的学长联系方式的名片!作者简介:Java领域优质创作者、CSDN博客专家、CSDN内容合伙人、掘金特邀作者、阿里云博客专家、51CTO......
  • CryptographyDeprecationWarning: Python 2 is no longer supported by the Python co
    警告CryptographyDeprecationWarning:Python2isnolongersupportedbythePythoncoreteam.Supportforitisnowdeprecatedincryptography,andwillberemovedinthenextrelease.低版本pipinstallcryptography==2.6可能不适......
  • Python中if的基本用法
    Python中if的基本用法在Python中,if语句是用来根据条件执行特定代码块的控制语句。如果条件为真(True),则执行if下面缩进的代码块;如果条件为假(False),则执行else下面缩进的代码块(如果有的话)if基本格式if要判断的条件:​条件成立时,执行的代码ifTure:print('条件成......
  • [免费]基于Python的Django在线(生鲜)商城(电子商城)管理系统【论文+源码+SQL脚本】
    大家好,我是java1234_小锋老师,看到一个不错的基于Python的Django在线(生鲜)商城(电子商城)管理系统,分享下哈。项目视频演示【免费】基于Python的Django在线(生鲜)商城(电子商城)管理系统Python毕业设计_哔哩哔哩_bilibili项目介绍随着电子商务的迅速发展,在线商城作为现代......
  • 《Python基础》之Pandas库
    目录一、简介二、Pandas的核心数据结构1、Series2、DataFrame三、数据读取与写入1、数据读取 2、数据写入四、数据清洗与处理1、处理缺失值2、处理重复值3、数据转换五、数据分析与可视化1、统计描述2、分组聚合3、数据可视化六、高级技巧1、时间序列分析2......
  • Python基于滑动窗口CNN损伤梁桥数据、故宫城墙图像数据分类可视化|附数据代码
    全文链接:https://tecdat.cn/?p=38442原文出处:拓端数据部落公众号分析师:YufeiGuo在现代土木结构工程领域,结构损伤的准确识别与定位对于保障基础设施的安全性和耐久性具有极为关键的意义。传统的人工检查方法,如目视检查以及借助专业设备进行检测,在很长一段时间内占据着主导地位,......