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

news/2025/1/11 20:02:34/文章来源:https://www.cnblogs.com/tecdat/p/18666158

全文链接: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,在利用机器学习对空气质量指数的研究方面颇有建树。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/867886.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何选择和使用专业的代码修改服务?

如果您不具备编程技能,或者项目复杂度较高,选择一家可靠的代码修改服务提供商是明智之举。 解决方案:评估需求:明确您需要修改的具体内容和期望达到的效果。 选择服务商:通过在线平台或口碑推荐寻找信誉良好的服务商。查看他们的案例和客户评价。 沟通需求:与服务商详细沟…

前端加密对抗-1

在实习的时候遇到很多的项目都使用了加密来保护安全性,测试起来非常的费劲;然后最近看到了有这么一个前端加密靶场,利用这个靶场来多学习学习这方面的知识。改包的防范 目前流行的防止改包方式主要是这么几个方面请求参数和路径的加密 如果原始请求是GET请求,或防止访问者获…

如何在CentOS云服务器上一键自动挂载磁盘?

对于新手来说,通过命令行手动挂载磁盘可能会有一定的难度。幸运的是,使用宝塔面板的一键挂载脚本可以简化这个过程。该脚本经过优化,直接绑定UUID以避免分区飘移问题,并能自动将硬盘挂载到/www目录。如果之前已经安装了宝塔面板,脚本会自动迁移数据到新的磁盘并挂载到/www…

WordPress需要在什么环境下运行?

WordPress 是一个基于 PHP 语言和 MySQL 数据库管理系统构建的开源内容管理系统(CMS)。为了确保 WordPress 网站能够稳定、高效地运行,您需要为其提供合适的运行环境。以下是详细的环境要求和建议: 一、WordPress 运行环境要求组件 推荐配置 说明Web服务器 Apache 或 Nginx…

网站SSL证书有什么用?什么情况下需要申请SSL证书?

网站SSL证书在保障网站安全和提升用户体验方面扮演着重要角色。以下是SSL证书的主要用途和申请需求的详细说明。 一、网站SSL证书的作用 1. 数据加密传输作用:SSL证书确保用户浏览器和服务器之间的数据传输是加密的,防止第三方窃取敏感信息,如登录密码、支付数据等。 重要性…

dedecms上传图片附件失败的原因和解决办法

dedecms上传图片附件失败可能是由于以下几个原因导致的:目录权限问题:检查网站目录权限是否可写(uploads目录或后台定义的上传目录)。 文件大小限制:检查上传图片大小是否超过php.ini中定义的大小。 子目录缺失:检查上传图片附件目录中的子目录是否存在,如allimg、flink…

独立IP虚拟主机相较于共享IP虚拟主机有哪些优势?

独立IP虚拟主机与传统共享IP虚拟主机相比,具有显著的优势。在共享IP环境中,多个网站共用一个IP地址,而独立IP虚拟主机为每个网站分配唯一的IP地址。以下是独立IP虚拟主机的主要优势: 1. 更高的稳定性资源独享:由于每个网站拥有独立的IP地址,因此不会受到其他网站的影响。…

虚拟主机打开网站出现403 - 禁止访问:访问被拒绝,如何解决?

当您尝试访问托管在虚拟主机上的网站时,如果遇到“403 - 禁止访问:访问被拒绝”的错误提示,这通常意味着服务器拒绝了您的访问请求。这种错误可能由多种原因引起,包括但不限于权限设置、文件配置或目录结构问题。 以下是详细的排查步骤和解决方案:检查默认首页文件原因分析…

1.11鲜花

感觉这两天停课有点不太对劲…… 本身因为 csp-s 打烂了赛季报销之后就没有什么事了的,车人却还要以 T/P 营赛前要拉进度的理由把我们喊过来停课。 说实话本身还是想停课的,但停了了一天就发现 T 和 P 都去不了,最后车人拉进度又拉的奇快无比(例如放一个一上午的题单有一堆…

电商行业人才加速跑:实战导向型企业员工培训速成策略

随着电商行业的迅猛发展,市场竞争日益激烈,企业对员工的培训需求也愈发迫切。如何在快节奏的市场环境中,快速提升员工的专业技能和服务水平,成为电商企业面临的重大课题。本文将为您介绍一套企业员工培训的速成法,旨在帮助电商企业在竞争中保持领先地位和在培训资源整合中…

教育机构知识管理新纪元:构建高效知识中台实战策略

在当今这个信息爆炸的时代,教育机构面临着前所未有的挑战与机遇。如何高效地整合、管理和传播知识,成为了决定教育机构竞争力的关键因素之一。知识中台作为连接前台业务与后台资源的桥梁,正逐渐成为众多教育机构转型升级的重要抓手。本文将为您提供一份详尽的知识中台搭建指…

23. 对话框控件

一、对话框应用对话框窗口是一个用来完成简单任务或者和用户进行临时交互的顶层窗口,通常用于输入信息、确认信息或者提示信息。QDialog 类是所有对话框窗口类的基类。按照运行时是否可以和其他窗口进行交互操作,对话框分为模式(或模态)对话框和非模式对话框。对于带有模式…