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

人们每时每刻都离不开氧,并通过吸入空气而获得氧。

一个成年人每天需要吸入空气达6500升以获得足够的氧气,因此,被污染了的空气对人体健康有直接的影响,空气品质对人的影响更是至关重要。

Zhixiong Weng撰写

每出现一次AQI指数数值过大,可以肯定它都会引起我们足够的重视,提醒我们要保护我们生存的环境,尽可能地减少对环境的破坏与污染。

而从更高的层次来说,消除或减少空气污染对人类的危害,唯一可行的就是提高我们的环保理念,并切实在日常生活中对环境加以保护。

 从机器学习的角度来说,根据已有数据可预测未来AQI浓度,也可以将空气质量分类为优良差等,对提高环境保护有重要意义。

机器学习研究

任务/目标

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

数据源准备

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

 数据降维

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

​ ​


视频

【视频讲解】Python深度学习股价预测、量化交易策略:LSTM、GRU深度门控循环神经网络附代码数据

探索见解

去bilibili观看

探索更多视频


视频

共享单车使用量预测:RNN, LSTM,GRU循环神经网络和传统机器学习

探索见解

去bilibili观看

探索更多视频


视频

【视频讲解】Python深度学习股价预测、量化交易策略:LSTM、GRU深度门控循环神经网络附代码数据

探索见解

去bilibili观看

探索更多视频


视频

LSTM神经网络架构和原理及其在Python中的预测应用

探索见解

去bilibili观看

探索更多视频


视频

LSTM模型原理及其进行股票收盘价的时间序列预测讲解

探索见解

去bilibili观看

探索更多视频


视频

主成分分析PCA降维方法和R语言分析葡萄酒可视化实例

探索见解

去bilibili观看

探索更多视频

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

建模

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)的空气质量指数时间序列数据融合预测分析|附数据代码

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


Python深度学习股价预测、量化交易策略:LSTM、GRU深度门控循环神经网络

阅读文章


数据介绍

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


随时关注您喜欢的主题


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

import pandas as pd
import numpy as np
import seaborn as sns
from sklearn import preprocessing

这段代码的作用是导入所需的库,并将存储空气质量数据的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)能够同时考虑时间序列数据的正向和反向信息,对于捕捉时间序列中的长期依赖关系有较好的效果。其模型构建代码如下:

import tensorflow as tf
model_BiLSTM = tf.keras.Sequential([
 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)等同时,还可以绘制预测值与真实值的对比图来直观地查看模型的预测效果

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

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

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


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

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

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

plt.plot(hist.history['accuracy'])
plt.plot(hist.history['val_accuracy'])
plt.title('model accuracy')
plt.ylabel('accuracy')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()
plt.plot(hist.history['loss'])
plt.plot(hist.history['val_loss'])
plt.title('model loss')
plt.ylabel('loss')
plt.xlabel('epoch')
plt.legend(['train', 'test'], loc='upper left')
plt.show()

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


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

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

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

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

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

 

​ ​

结果对比与分析

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


关于分析师

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

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498

关注有关新文章的微信公众号


永远不要错过任何见解。当新文章发表时,我们会通过微信公众号向您推送。

技术干货

最新洞察

This will close in 0 seconds