首页 > 编程语言 >Python深度学习GRU、LSTM 、BiLSTM-CNN神经网络空气质量指数AQI时间序列预测及机器学习分析

Python深度学习GRU、LSTM 、BiLSTM-CNN神经网络空气质量指数AQI时间序列预测及机器学习分析

时间:2025-01-11 20:10:53浏览次数:1  
标签:GRU 预测 BiLSTM Python 模型 plt 空气质量 数据

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

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

分析师:Zhixiong Weng

 

人们每时每刻都离不开氧,并通过吸入空气而获得氧。一个成年人每天需要吸入空气达6500升以获得足够的氧气,因此,被污染了的空气对人体健康有直接的影响,空气品质对人的影响更是至关重要。每出现一次AQI指数数值过大,可以肯定它都会引起我们足够的重视,提醒我们要保护我们生存的环境,尽可能地减少对环境的破坏与污染。而从更高的层次来说,消除或减少空气污染对人类的危害,唯一可行的就是提高我们的环保理念,并切实在日常生活中对环境加以保护。从机器学习的角度来说,根据已有数据可预测未来AQI浓度,也可以将空气质量分类为优良差等,对提高环境保护有重要意义。

机器学习研究

任务/目标

根据已有AQI数据对其进行简单的聚类、分类、降维、相关性分析、预测、可视化等,对其探索得出相关结论,如使用k-means将数据聚类,将其分成适合的组数探究AQI数据的分布情况;使用回归预测未来的AQI;使用主成分分析对其降维并探究AQI气体的相关性;使用K-NN算法将AQI数据分类,给未来没有分类的数据自动分好类等。

数据源准备

网络爬取别称数据提取,就是从指定的网站上收集数据信息。网络爬虫是一种程序,他可以高效的获取我们想要的数据,主要用于搜索引擎,通过使用request、scrapy、selenium等库获取该案例所需数据。如下图为部分数据:

数据降维

AQI数据有多个变量,为了方便后续计算,使用主成分分析法将多个变量减少到两至三个:

选择两个主成分即可保留数据集的大部分信息。

建模

k均值算法

根据空气质量数据将其分成合适的组数,探索各空气污染气体的分布情况。过程是先收集数据并选择合适的中心点,计算其他数据点到中心点的距离,计算平均值,将数据点分配到给他最近的聚类中心。

线性回归

回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。这种技术通常用于预测分析,时间序列模型以及发现变量之间的因果关系。通常使用曲线/线来拟合数据点,目标是使曲线到数据点的距离差异最小。对大量的观测数据进行处理,从而得到比较符合事物内部规律的数学表达式。也就是说寻找到数据与数据之间的规律所在,从而就可以模拟出结果,也就是对结果进行预测。

k近邻算法

给定一个训练数据集,对新的输入实例,在训练集中找到与该实例最临近,就把这个实例分配到这个类中。

当所预测的空气污染物PM2.5,PM10,O3,No2,Co,So2的含量分别为29,20,50,13,0.88,10μg/m3(CO为mg/m3)时,空气质量为优。空气质量令人满意,基本无空气污染,对健康没有危害,各类人群可多参加户外活动,多呼吸一下清新的空气。

使用此模型,当测量出污染物指数时就可以预测空气的质量等级。每出现一次AQI指数数值过大,可以肯定它都会引起我们足够的重视,提醒我们要保护我们生存的环境,尽可能地减少对环境的破坏与污染。

Python 中深度学习模型(BiLSTM、GRU、LSTM 及 BiLSTM-CNN)的空气质量指数时间序列数据融合预测分析|附数据代码

 

接下来将探讨多种深度学习模型在空气质量指数时间序列预测与分析中的应用,通过对比不同模型的性能,以期找到更优的预测方法。

数据介绍

首先,我们获取了包含空气质量相关指标的数据集,其以表格形式呈现,包含了诸如年份(year)、月份(month)、日(day)、小时(hour)以及多种污染物浓度指标(如 PM2.5、PM10、SO2、NO2、CO、O3 等)以及气象相关数据(如温度 TEMP、气压 PRES、露点 DEWP、降雨量 RAIN、风向 wd、风速 WSPM 等)信息。

通过pandas库的相关函数对数据进行读取,代码如下:

 
  1.   import pandas as pd
  2.   import numpy as np
  3.   import seaborn as sns
  4.   from sklearn import preprocessing
  5.    
 

这段代码的作用是导入所需的库,并将存储空气质量数据的csv文件读取到程序中,形成一个可供后续操作的数据框(DataFrame)对象,方便进行数据处理和分析。
接着,我们可以使用describe函数来查看数据的基本统计信息,比如均值、标准差、最小值、最大值等,代码如下:

data.describe()

这能帮助我们快速了解各指标数据的大致分布情况,为后续的数据预处理和模型构建提供参考依据。

数据预处理

原始数据可能存在一些缺失值等问题,为了保证模型训练的准确性,需要进行预处理。首先,我们使用如下代码去除含有缺失值的行:

data = data.dropna()

然后,针对部分指标计算其特定时间窗口内的平均值等统计量,比如对于PM10PM2.5等污染物指标,计算其 24 小时的平均浓度值,代码示例如下:

data["PM10_24hr_avg"] = data["PM10"].rolling(window = 24, min_periods = 16).mean().values

这些新生成的指标数据可以更好地反映污染物浓度在一定时间范围内的综合情况,有助于提升模型对空气质量变化趋势的捕捉能力。

深度学习模型应用

在完成数据预处理后,我们将应用多种深度学习模型来进行空气质量指数的预测,以下是不同模型的构建与训练过程。
(一)双向长短期记忆网络(BiLSTM)模型
双向长短期记忆网络(BiLSTM)能够同时考虑时间序列数据的正向和反向信息,对于捕捉时间序列中的长期依赖关系有较好的效果。其模型构建代码如下:

 
  1.   import tensorflow as tf
  2.   model_BiLSTM = tf.keras.Sequential([
  3.   tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(100, return_sequences=True), input_shape=(n_steps, n_features)),
 

上述代码首先构建了一个包含两层双向 LSTM 层以及相应的Dropout层(用于防止过拟合)和输出层的序列模型,然后对模型进行编译,指定了优化器、损失函数以及评估指标等,最后通过summary函数查看模型的结构和参数信息。
使用tf.kel函数可以可视化模型结构,代码如下:

其生成的模型结构图片(如下所示)能让我们直观地看到各层的输入输出形状等关键信息。

随后对模型进行训练,代码如下:

hist = model_BiLSTM.fit

训练完成后,可以使用训练好的模型进行预测,并计算相关的评估指标,如均方误差(MSE)等同时,还可以绘制预测值与真实值的对比图来直观地查看模型的预测效果

 
  1.   def plot_predicted(predicted_data, true_data):
  2.   fig, ax = plt.subplots(figsize=(17,8))
 

其生成的对比图(如下所示)有助于我们直观判断模型预测的准确性。

(二)门控循环单元(GRU)网络模型
门控循环单元(GRU)网络也是一种常用于处理时间序列数据的深度学习模型,相较于 LSTM 结构相对简单但同样能有效捕捉序列信息。其模型构建与训练过程如下:

 
  1.    
  2.   from sklearn.metrics import mean_squared_error, mean_absolute_error, r2_score
  3.   regressorGRU = Sequential()
  4.   # 第一层 GRU 层并添加 Dropout 正则化
  5.   regressorGRU.add(GRU(units=50, return_sequences=True, input_shape=(X_split_train.shape[1],1), activation='tanh'))
  6.   regressorGRU.add(Dropout(0.2))
  7.   # 第二层 GRU 层
  8.   regressorGRU.add(GRU(units=50, return_sequences=True, input_shape=(X_split_train.shape[1],1), activation='tanh'))
  9.   ......
 

这段代码构建了一个多层的 GRU 网络模型,每一层都设置了相应的参数和激活函数,并添加了Dropout层来防止过拟合,最后进行编译,同样通过summary查看模型结构和参数信息。
 

训练结束后,进行预测并计算诸如均方误差(MSE)、均方根误差(RMSE)、平均绝对误差(MAE)以及 R2 分数等评估指标。同时,也可以绘制预测值与真实值的对比图来直观展示模型效果,代码和前面类似,此处不再赘述。另外,还可以绘制模型训练过程中的损失函数变化曲线以及准确率变化曲线等,代码如下:

 
  1.   plt.plot(hist.history['accuracy'])
  2.   plt.plot(hist.history['val_accuracy'])
  3.   plt.title('model accuracy')
  4.   plt.ylabel('accuracy')
  5.   plt.xlabel('epoch')
  6.   plt.legend(['train', 'test'], loc='upper left')
  7.   plt.show()
  8.   plt.plot(hist.history['loss'])
  9.   plt.plot(hist.history['val_loss'])
  10.   plt.title('model loss')
  11.   plt.ylabel('loss')
  12.   plt.xlabel('epoch')
  13.   plt.legend(['train', 'test'], loc='upper left')
  14.   plt.show()
 

生成的图片(如下所示)可以帮助我们分析模型是否存在过拟合等问题。


长短期记忆网络(LSTM)及其相关变体模型
除了上述的 BiLSTM 和 GRU 模型外,我们还应用了普通的 LSTM 以及 LSTM 与卷积神经网络(CNN)结合的模型(BiLSTM-CNN)来进行预测分析,其模型构建、训练和评估的过程与前面类似,只是在模型结构、参数设置等方面存在差异。

构建好模型后进行训练并在训练过程中记录相关指标,代码如下:

 
  1.   hist = model.fit(train_dataset,
  2.   validation_data = val_dataset,
  3.   epochs=50,
  4.   callbacks=[es,plateau],
  5.   verbose=1)
 

训练完成后同样进行预测以及评估指标计算、绘制对比图等操作,代码与前面类似,不再赘述。
而对于 BiLSTM-CNN 模型,其结合了双向 LSTM 对时间序列的处理能力和卷积神经网络对局部特征提取的优势。

后续同样进行训练、预测以及相关指标评估和结果可视化等操作,通过这些不同模型的对比分析,我们可以更全面地了解各模型在空气质量指数时间序列预测中的表现优劣。

结果对比与分析

通过对上述多种深度学习模型在相同数据集上进行训练、预测,并计算相应的评估指标(如均方误差、均方根误差、平均绝对误差、R2 分数等),我们可以对比不同模型的性能。从不同模型的预测值与真实值对比图以及各项指标数值来看,不同模型在捕捉空气质量指数变化趋势以及预测准确性上各有差异。例如,部分模型在某些时间段的预测值与真实值贴合度较高,而有些模型则可能存在一定偏差。通过分析这些结果,可以为后续进一步优化模型或者选择更合适的预测模型提供参考依据,以便更准确地对空气质量指数进行预测,从而更好地服务于环境保护等相关工作。
总之,深度学习模型在空气质量指数时间序列预测方面有着较大的应用潜力,但不同模型的适用性和性能表现还需要根据具体的数据特点和应用场景等因素综合考量,未来还可以进一步探索模型改进以及融合等方法来提升预测的准确性和可靠性。

关于分析师

在此对 Zhixiong Weng 对本文所作的贡献表示诚挚感谢,他在桂林电子科技大学完成了物流管理(信息化)专业的学习,专注数据采集、数据分析以及机器学习领域。擅长 R 语言、Python、SQL,在利用机器学习对空气质量指数的研究方面颇有建树。

标签:GRU,预测,BiLSTM,Python,模型,plt,空气质量,数据
From: https://www.cnblogs.com/tecdat/p/18666158

相关文章

  • python毕设 新能源汽车租赁系统程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景随着新能源汽车行业的蓬勃发展,汽车租赁业务也逐渐向新能源汽车领域倾斜。关于新能源汽车租赁系统的研究,现有研究主要集中在新能源汽车......
  • Python 常用 150 个英语单词
    一、交互式环境与print输出1、print:打印/输出2、coding:编码3、syntax:语法4、error:错误5、invalid:无效6、identifier:名称/标识符7、character:字符二、字符串的操作1、user:用户2、name:姓名/名称3、attribute:字段/属性4、value:值5、key:键三、重复/转换/替换/原始字符......
  • 我在python上的学习方向
    前言    随着python学习的深入,接触的东西越来越多,要学习的东西也越来越多。但精力有限,必须有所取舍。因此必须追溯过去、立足现在、畅想未来,给自己一个指引。追溯过去        学python前        上学时学的是vb,也仅仅是考过了计算机二级的水平。......
  • 使用Python脚本提取文件中的特定内容
    使用Python脚本提取文件中的特定内容是一个常见的任务,通常可以通过读取文件、处理内容并输出所需的部分来完成。以下是一个示例脚本,展示了如何从一个文本文件中提取特定行或特定模式的内容。假设我们有一个名为example.txt的文件,内容如下:Thisisthefirstline.Thislin......
  • 使用Python和Neo4j驱动程序来实现小规模数据的CSV导入
    要将CSV数据导入到Neo4j数据库中,你可以使用Neo4j提供的工具,比如neo4j-adminimport命令(适用于大规模数据导入),或者使用Python的Neo4j驱动程序通过Cypher查询逐行插入数据(适用于小规模数据导入)。下面我将介绍如何使用Python和Neo4j驱动程序来实现小规模数据的CSV导入。步骤1......
  • 代码点亮夜空:Python制作炫酷烟花与音效大秀
    谁不喜欢烟花呢?它们在夜空中绽放的瞬间,总是能让人瞬间忘记烦恼,沉浸在那片五光十色的绚烂中。而如果你是一个编程爱好者,那就更不能错过这场“数字烟花”的盛宴!通过Python的Pygame库,我们不仅可以让烟花在电脑屏幕上bigbang,还可以随心所欲地控制它们的颜色、爆炸方式,甚至播......
  • 风靡B站的《看漫画学Python》到底是什么来头?
    学习Python的小伙伴大部分应该都知道《看漫画学Python:有趣、有料、好玩、好用(全彩版)》这本书!毕竟,如果在B站搜索“漫画Python”等相关关键词,会看到整个页面都是和这本书相关的视频……这本《看漫画学Python》到底是什么来头,竟然引得B站各位UP主自发地疯传?《看漫画学Pyth......
  • 用Python制作可视化报表,没有比它更快的!
    众所周知,在数据展示中使用图表来分享自己的见解,是个非常常见的方法。这也是Tableau、PowerBI这类商业智能仪表盘持续流行的原因之一,这些工具为数据提供了精美的图形解释。当然了,这些工具也有着不少缺点,比如不够灵活,无法让你自己创建设计。当你对图表展示要求定制化时,编程也......
  • 面向对象分析与设计Python版 面向对象设计方法
    文章目录前言一、职责驱动设计二、职责驱动设计-案例前言面向对象设计目标:在面向对象分析建立的领域模型的基础上,定义对象操作(职责)。为对象分配职责的方法有:职责驱动设计遵循GRASP设计原则(GeneralResponsibilityAssignmentSoftwarePattern通用职责分配软件模......
  • 【Python】输入输出
    控制台这些对于机械的操作面板,就叫控制台。控制台上会有一些按钮、开关、操作杆…后来有了计算机之后,控制台的概念也就延续下来了只不过计算机是通过键盘鼠标等进行操作,把操作结果显示到屏幕上计算机里,就把用户能输入命令,向计算机安排工作,计算机再把结果显示出来这样的......