Python数据分析案例36——基于神经网络的AQI多步预测(空气质量预测)

这篇具有很好参考价值的文章主要介绍了Python数据分析案例36——基于神经网络的AQI多步预测(空气质量预测)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

案例背景

不知道大家发现了没,现在的神经网络做时间序列的预测都是单步预测,即(需要使用X的t-n期到X的t-1期的数据去预测X的t期的数据),这种预测只能预测一个点,我需要预测X的t+1期的数据就没办法了,有的同学说可以把预测的结果X的t+1拿进来作为新的x去预测。。。我只能说这种情况是有误差的,而且误差会累加,这样效果很差。(看很多ARIMA的预测效果一条直线就知道了)

很多时候需要进行多步预测,即(需要使用X的t-n期到X的t-1期的数据去预测X的t期到t+n期的数据,预测出来的就不止一个点。这种方法,ARIMA这种传统统计学的方法是做不到的了,神经网络可以做到,因为神经网络可以接受一条序列作为y,这样去训练就可以得到多步预测模型了。

本次案例使用某城市的AQI数据,去预测未来一年365天的数据。来看看我怎么完成的。


数据介绍

没啥好介绍的,一般下载城市的数据都是这样的,我们只需要AQI这一列就行。

任务介绍:基于空气质量检测数据,采用人工神经网络对AQI进行回归预测。

  • (1)利用Python实现回归预测并得出2024年的预测结果。
  • (2)展示随迭代次数增加,不同激活函数下的损失函数的变化情况。

Python数据分析案例36——基于神经网络的AQI多步预测(空气质量预测),Python数据分析案例,python,数据分析,神经网络,回归,AQI预测

当然,需要本次演示案例的数据和所有代码文件的同学可以参考: AQI预测 


代码实现

导入包

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus']=False

from keras.models import Sequential
from keras.layers import LSTM, Dense,Flatten
from keras.callbacks import EarlyStopping
from sklearn.preprocessing import MinMaxScaler

读取数据,设置日期索引:

data=pd.read_excel('AQI数据.xlsx')#.set_index('日期')
data['日期']=pd.to_datetime(data['日期'])
data=data.set_index('日期')
data

Python数据分析案例36——基于神经网络的AQI多步预测(空气质量预测),Python数据分析案例,python,数据分析,神经网络,回归,AQI预测

数据跨度从2019-2023年,日度数据。

简单画个图看看

data.aqi.plot(figsize=(10,3))

Python数据分析案例36——基于神经网络的AQI多步预测(空气质量预测),Python数据分析案例,python,数据分析,神经网络,回归,AQI预测

很符合AQI的摸样,波动很大,参差不齐,还有一定的周期性。


数据准备

时间序列做神经网络预测,一般都需要进行三维化,即把数据变为(n,t,p)的形状,n是样本量,t是时间步长,p是特征数量。一般 的表格数据都是(n,p)的结构,时间序列要多一个时间t的维度。

数据构建X和y之前要归一化,神经网络很需要,不然模型会不收敛。

# 数据预处理
scaler = MinMaxScaler(feature_range=(0, 1))
scaled_aqi = scaler.fit_transform(data['aqi'].values.reshape(-1, 1))

# 创建LSTM需要的序列数据
def create_dataset(dataset, start_index, end_index, history_size, target_size):
    data = [] ; labels = []

    start_index = start_index + history_size
    if end_index is None:
        end_index = len(dataset) - target_size

    for i in range(start_index, end_index):
        indices = range(i-history_size, i)
        data.append(np.reshape(dataset[indices], (history_size, 1)))
        labels.append(dataset[i:i+target_size])
    return np.array(data), np.array(labels)

# 用过去的700天数据来预测接下来的365天
past_history = 700
future_target = 365

X_train, y_train = create_dataset(scaled_aqi, 0, None, past_history, future_target)
y_train=y_train.reshape(y_train.shape[0],y_train.shape[1])
X_train.shape, y_train.shape

Python数据分析案例36——基于神经网络的AQI多步预测(空气质量预测),Python数据分析案例,python,数据分析,神经网络,回归,AQI预测

我定义了一个转化时间序列构建X和y的函数,然后采用时间窗口为700,也就是t=700的时间步长,然后去预测未来365天的数据,也就是一年。

为什么是700,,,没有为什么,因为要预测365个点,我需要时间步长大一点,那就大概2倍的数据吧,我就选择了凑个整数700,当然699,701,710,720,730,都是可以的,可以去试试。

是不是时间步长越长越好?不一定,首先看你样本量,我数据只有1500多个点,我选择了700时间步长,其实就损失了700个样本了,可以看到我样本量只有486个,有点少。其次,时间步长过长会造成运行时间过长,你也不想体验等一次运行结果要等上一天的感觉吧。。。

当然大家可以更具自己的需要预测的时间长度,还有样本量来调整自己的时间步长t。


预测2024年数据(默认tanh激活函数)

这里构建的是最简单的神经网络MLP模型,一个小案例,就没使用LSTM,GRU,transform这种序列模型了。大家感兴趣可以自己改一下试试。

# 创建MLP模型
model = Sequential()
model.add(Flatten())
model.add(Dense(512))
model.add(Dense(128))
model.add(Dense(future_target))
model.compile(optimizer='adam', loss='mse')

# 训练模型
early_stop = EarlyStopping(monitor='loss', patience=10)
history=model.fit(X_train, y_train, epochs=50, batch_size=32, callbacks=[early_stop], verbose=1)

Python数据分析案例36——基于神经网络的AQI多步预测(空气质量预测),Python数据分析案例,python,数据分析,神经网络,回归,AQI预测

训练了50轮,loss没怎么变了。

画图看看:

plt.figure(figsize=(7,3))
plt.plot(history.history['loss'], label=f'loss')
plt.legend()
plt.show()

Python数据分析案例36——基于神经网络的AQI多步预测(空气质量预测),Python数据分析案例,python,数据分析,神经网络,回归,AQI预测

基本收敛了,然后我们预测,预测的数据要逆归一化回来,然后加上预测的日期的索引。

# 进行预测
prediction = model.predict(X_train[-1].reshape(1, past_history, 1))
# 逆缩放预测结果
predicted_aqi = scaler.inverse_transform(prediction).flatten()
predicted_aqi.shape

# 创建预测日期的范围
last_date = data.index[-1]
predicted_dates = pd.date_range(start=last_date, periods=future_target+1, closed='right')

# 创建包含预测结果的DataFrame
predicted_df = pd.DataFrame({
    '日期': predicted_dates,
    '预测aqi': predicted_aqi})

画个图看看:

# 绘制预测和实际的AQI值
plt.figure(figsize=(12, 3),dpi=128)
plt.plot(data.index, data['aqi'], label='Actual AQI')
plt.plot(predicted_dates, predicted_aqi, label='Predicted AQI', linestyle='dashed')
plt.title('AQI Prediction')
plt.xlabel('Date')
plt.ylabel('AQI')
plt.legend()
plt.show()

Python数据分析案例36——基于神经网络的AQI多步预测(空气质量预测),Python数据分析案例,python,数据分析,神经网络,回归,AQI预测

后面橙色的虚线就是我预测的数据了。看这效果还不错的样子,波动性学到了,季节性也学到了。

由于目前还没有真实的2024年的AQI数据,也不知道效果好不好。。。也不知道别的LSTM之类的模型效果好不好。。所以没法计算误差去评价。


储存预测结果 

## 储存
predicted_df.to_excel('AQI预测结果.xlsx')

保存了,可以本地excel查看了。 


 不同损失函数

下面是一个其他任务的彩蛋吧,看看不同的激活函数对模型的训练过程是否有影响。

有兴趣的同学可以看看。

展示随迭代次数增加,不同激活函数下的损失函数的变化情况。

- (用了五种激活函数)['relu', 'tanh', 'sigmoid','elu','softplus']

定义和训练:

# Function to create and train LSTM model with different activation functions
def train_lstm_model(X_train, y_train, activation='relu', epochs=100, batch_size=32):
    model = Sequential()
    model.add(Flatten())
    model.add(Dense(512))
    model.add(Dense(128))
    model.add(Dense(future_target))
    model.compile(optimizer='adam', loss='mse')
    # Early stopping to prevent overfitting
    early_stop = EarlyStopping(monitor='loss', patience=10, verbose=1)

    # Train the model
    history = model.fit(X_train, y_train, epochs=epochs, batch_size=batch_size, verbose=0, callbacks=[early_stop])

    return model, history

# Activations to try
activations = ['relu', 'tanh', 'sigmoid','elu','softplus']
# Dictionary to store models and histories
models = {}
histories = {}

# Training models with different activation functions
for activation in activations:
    model, history = train_lstm_model(X_train, y_train, activation=activation)
    models[activation] = model
    histories[activation] = history.history['loss']

画图查看:

## 五种激活函数
plt.figure(figsize=(9, 3),dpi=128)
for activation in activations:
    plt.plot(histories[activation], label=f'Activation = {activation}')
plt.title('Training Loss with Different Activation Functions')
plt.ylabel('Loss')
plt.xlabel('Epoch')
plt.legend()
plt.show()

Python数据分析案例36——基于神经网络的AQI多步预测(空气质量预测),Python数据分析案例,python,数据分析,神经网络,回归,AQI预测

五种激活函数差不多,区别不大。


创作不易,看官觉得写得还不错的话点个关注和赞吧,本人会持续更新python数据分析领域的代码文章~文章来源地址https://www.toymoban.com/news/detail-804789.html

到了这里,关于Python数据分析案例36——基于神经网络的AQI多步预测(空气质量预测)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 数据分析案例-基于PCA主成分分析法对葡萄酒数据进行分析

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 1.项目背景 2.项目简介 2.1分析目标 2.2数据集介绍 2.3技术工具 3.算法理论 4.实验过程

    2024年02月03日
    浏览(45)
  • 36 | 银行贷款数据分析

    本文将以银行贷款数据分析为主题,深入探讨如何运用数据科学的方法,揭示银行贷款领域的内在规律和趋势。通过对贷款数据的分析,我们能够洞察不同类型贷款的分布情况、贷款金额的变化趋势,以及借款人的特征和还款情况等关键信息。 通过运用Python编程语言及相关的

    2024年02月13日
    浏览(81)
  • 数据分析案例-基于亚马逊智能产品评论的探索性数据分析

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、实验背景 1.1背景概述 1.2实验目的 二、数据描述 2.1数据来源 2.2变量介绍 三、实验

    2024年02月22日
    浏览(53)
  • 大数据分析案例-基于随机森林算法构建人口普查分析模型

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 喜欢大数据分析项目的小伙伴,希望可以多多支持该系列的其他文章 大数据分析案例合集

    2024年02月01日
    浏览(42)
  • python数据分析案例——天猫订单综合分析

    前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 什么是数据分析 明确目的–获得数据(爬虫,现有,公开的数据)–数据预处理——数据可视化——结论 准备 环境使用: 在开始写我们的代码之前,我们要准备好运行代码的程序 Anaconda (python3.9) – 识别我们写的代码 开发工

    2024年02月03日
    浏览(50)
  • Python数据分析项目案例

    第一部分:数据类型处理 数据加载 字段含义: user_id:用户ID order_dt:购买日期 order_product:购买产品的数量 order_amount:购买金额 观察数据 查看数据的数据类型 数据中是否存储在缺失值 将order_dt转换成时间类型 查看数据的统计描述 在源数据中添加一列表示月份:astype(\\\'datetime64[M

    2024年02月11日
    浏览(45)
  • 【深度学习&NLP】基于卷积神经网络(CNN)实现中文文本情感分析(分类)附代码以及数据集链接

    【注】:本文所述的实验的完整实现代码包括数据集的仓库链接会在文末给出(建议读者自行配置GPU来加速TensorFlow的相关模型,运行起来会快非常多) 目录 一、研究的背景和目的 二、文本数据集描述 1、数据集来源以及使用目的 2、数据规模、以及如何划分数据集 3、数据集的

    2024年02月04日
    浏览(63)
  • 【大数据优质案例】基于大数据分析的物流数据可视化平台

    前言:我是IT源码社,从事计算机开发行业数年,专注Java领域,专业提供程序设计开发、源码分享、技术指导讲解、定制和毕业设计服务 👉IT源码社-SpringBoot优质案例推荐👈 👉IT源码社-小程序优质案例推荐👈 👉IT源码社-Python优质案例推荐👈 👇👇文末获取源码👇👇 项目

    2024年02月03日
    浏览(54)
  • 数据分析案例-基于因子分析探究各省份中心城市经济发展状况

      🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、实验背景 二、实验内容及数据 2.1 概述 2.2 变量介绍 三、实验步骤 3.1 导入模块

    2023年04月15日
    浏览(46)
  • 数据分析案例-基于snownlp模型的MatePad11产品用户评论情感分析

    🤵‍♂️ 个人主页:@艾派森的个人主页 ✍🏻作者简介:Python学习者 🐋 希望大家多多支持,我们一起进步!😄 如果文章对你有帮助的话, 欢迎评论 💬点赞👍🏻 收藏 📂加关注+ 目录 一、项目介绍 二、数据集介绍 三、实验过程 3.1导入数据() ​3.2数据预处理 3.3数据

    2024年02月07日
    浏览(50)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包