Python与科学计算课程设计报告———基于LSTM的气候变化预测

一、研究背景

近些年来,受全球气候变化的影响,极端天气事件频发,高温、严寒、干旱、暴雨等天气不断影响人们的生产和生活。国家对气象领域的关注越来越多,人们对天气预测正确率的要求逐渐提高。而气温、风速等要素的预测是国家和民众关注的重点之一,也是气象人员研究的重点课题。
随着人工智能的热潮席卷全球,深度学习方法被运用到各行各业。深度学习用非监督式或半监督式的特征学习和分层特征的方法对输入数据进行表征学习,这种高效率的方法代替原有的人为获取特征,正体现了其“智能”的特点。并且,深度学习具有计算性能强,学习效率高,非线性计算的优势。LSTM神经网络是深度学习方法的一种,它能记忆输入序列的信息,并对输入序列及其上下关系进行深入学习和理解,添加“门”的结构,控制信息的传递,运用非线性的方法从长时间的数据中学习有效信息,所以成为具有连续性的气象要素的预报方法的首选。同时,利用神经网络方法对数值预报产品进行集成,能将数据挖掘的智能算法与气象资料高效融合,尽可能发挥数值预报产品的优势,从大数据角度分析气象要素的变化特征,降低模式的系统误差,提高预报技巧,为社会、农业、公众提供更好的服务。

二、原理分析

1 深度学习模型构建流程
(1)问题定义
在应用深度学习解决实际问题时,首先要明确亟需解决的问题、了解问题背景、问题涉及的相关领域、收集相关专业数据等。通过明确问题方向,构建合适的模型。
(2)数据预处理
在收集数据阶段,由于人为操作、存储丢失、系统故障等原因导致数据缺失、重复异常等情况。模型训练成功与否关键就在于数据来源,因此在训练数据之前,必须提前处理成规范格式的数据,主要包括缺失值填补、重复值删除、标准化等操作。
(3)学习特征
深度学习在学习底层特征之外,还可以对底层特征进行组合来学习到更加抽象的高层表达,因此在学习过程中特征学习步长的设置也至关重要。
(4)模型选择
不同的数据适用于不同的模型,根据解决的问题也要选择合适的模型,在确定模型之后还要对模型的参数例如激活函数、输入输出节点数等进行更加具体的调整。
(5)训练模型
在对构建模型调整参数之后,加入训练数据集训练模型。
(6)模型评估
模型评估可以度量模型训练结果,一般在模型评估阶段选择一个或几个评价函数用于衡量模型的效果。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第1张图片
图 1 深度学习流程示意图
2 长短期记忆神经网络
LSTM神经网络的细胞单元主要由累加器和“门”结构传递自身状态和外部输入信息,将前一时刻的细胞单元信息传递至当前时刻细胞单元,并由另一个单元决定何时保留或消除记忆信息。在天气预报中,LSTM神经网络可以使用过去时刻的历史数据,较好地捕捉序列隐藏的关系的同时并不产生梯度衰减的现象,为预测未来天气要素打下较好的基础。
LSTM神经网络中包含输入门、输出门、遗忘门、候选细胞、隐藏层、细胞单元。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第2张图片
s为当前时刻细胞;f(t)为遗忘门方程;t(i)和g(t)共同构成输入门方程,用来更新细胞状态s;o(t)是输出门方程,与s一起输出隐含层h;输入门、输出门、和遗忘门中每个元素的值域都是[0,1]。候选细胞g(t)的激活函数是双曲正切函数(tanh),值域为(-1,1);重要参数Wf、Wi、Wo、Wg等权重参数需要经过学习得到;bf、bi、bo、bg为可学习的偏移参数。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第3张图片
图 2 LSTM内部细胞单元
3 评价指标
3.1 回归评价指标
我们通常采用MSE、RMSE、MAE、R2来评价回归预测算法。
1、均方误差:MSE
在这里插入图片描述
其中,在这里插入图片描述为测试集上真实值-预测值
2、均方根误差:RMSE
在这里插入图片描述

3、平均绝对误差:MAE

4、决定系数:R2
在这里插入图片描述
根据 R-Squared 的取值,来判断模型的好坏,其取值范围为[0,1]:如果结果是0,说明模型拟合效果很差;如果结果是1,说明模型无错误。一般来说,R-Squared 越大,表示模型拟合效果越好。R-Squared 反映的是大概有多准,因为,随着样本数量的增加,R-Square必然增加,无法真正定量说明准确程度,只能大概定量。
3.2 分类评价指标
对于分类预测算法,通常采用Accuracy、F1-score、AUC等。
1、准确率:Accuracy
在这里插入图片描述

2、精确率:Precision
预测为正类的结果中,正确个数的比例。
在这里插入图片描述

3、召回率:Recall
实际为正类的样本中,正确判断为正类的比例。
在这里插入图片描述

4、F1-score
精确率和召回率是一对矛盾的指标,因此需要放到一起综合考虑。F1-score是精确率和召回率的调和平均值。
在这里插入图片描述
其中,P就是presicion,R就是recall。
5、AUC面积
AUC面积表示ROC曲线下方的面积大小,通过积分就可以计算。AUC越大越好。由于ROC曲线一般在y=x直线的上方,故AUC一般为0.5~1.0。
以上公式中,TP表示将正类预测为正类,TN表示将负类预测为负类,FP表示将负类预测为正类,FN表示将正类预测为负类。

三、程序流程图

1 技术路线图
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第4张图片
图 3 技术路线图
2 模型构建环境
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第5张图片

四、实验结果

1 数据集介绍
数据集包含了2013年1月1日-2017年12月31日,来自北京、上海、重庆的共58个站点按天记录的逐日天气观测数据,共包含102655条数据。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第6张图片
2 数据可视化
2.1 数据预处理
对于该数据集的初步清洗,主要是对日期格式数据进行处理。本文使用Pandas中的to_datetime()方法将文本格式date属性转换为日期格式,使用dt方法取出年月周日等,使用to_period()方法将日期以季度为单位,最终得到时间单位年、月、周、季度、天,除此之外,将无效数据替换成NAN,并且去掉无关属性,从而方便进行数据可视化。
2.2 可视化结果分析
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第7张图片Python与科学计算课程设计报告———基于LSTM的气候变化预测_第8张图片Python与科学计算课程设计报告———基于LSTM的气候变化预测_第9张图片Python与科学计算课程设计报告———基于LSTM的气候变化预测_第10张图片Python与科学计算课程设计报告———基于LSTM的气候变化预测_第11张图片Python与科学计算课程设计报告———基于LSTM的气候变化预测_第12张图片
图 4某个属性关于季度和地理位置的变化情况
图四中(a)-(f)使用柱状图分别展示了上海市、北京市、重庆市三个城市在每个季度的可见度、温度、湿度、风速、气压、云量变化的对比图。
其一,总体来看北京的可见度相比于重庆上海更好,但是在第三季度上海的可见度最高,重庆的可见度全年都处于一个较差的水平;其二,第三季度夏天三个城市温度都高,第一季度温度都低,整年看,重庆的温度更高;其三,北京的湿度比其他两个城市的湿度明显更低,同时第三季度的湿度相比于其他季度更好,与降水量相匹配,北京市第三季度降水量最高;其四,上海的风速四个季度变化不大,北京第三季度风速较低;其五,对于气压,三个城市在四个季度的基本不变,说明气压与时间关联不大,但是上海的气压一直最高,重庆气压一直最低;其六,重庆的云量高于其他城市,尤其是第一四季度这种情况更加突出。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第13张图片Python与科学计算课程设计报告———基于LSTM的气候变化预测_第14张图片
图 5 降水量关于季度和地理位置的变化情况
上海和重庆在第二季度降水量最高,北京在第三季度的降水量最高,但是总体上进行比较,不管哪个季度上海和重庆的降水量都高于北京,上海的降水量一直比重庆高但是在第二季度基本上达到一个持平状态。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第15张图片图 6 属性相关性
scatter_matrix函数绘制出每个数值属性相对于其他数值属性的相关值,散点图矩阵会构建两种基本图形:直方图和散点图。位于对角线位置的直方图让我们看到了每一个变量的分布,而对角线上下的散点图则展示了变量两两之间的关系。
我们选取风量、温度、湿度、降水量、云量、可见度六个特征研究两两之间的相关性,从图中可以看出湿度和降水量之间存在正相关,也就是湿度越大降水量越大,降水量和云量之间存在正相关,降水量和可见度之间存在负相关,其余散布状态比较杂乱,基本无规律可循,说明各特征之间的关联性不强。
3 数据预测
本文主要实现两种任务:回归任务(多对一)和多标签分类任务(多对多)来实现对数据的预测。
3.1 数据处理
首先,使用drop()去掉数据集中的date、city、county、year、phenomenon属性,再处理数值和文本属性的流水线,包括SimpleImputer()处理缺失值,该列的缺失值使用该列的中位数进行填充,MinMaxScaler()最大最小归一化,list()将数据中的标签转换成列表的形式,OneHotEncoder()将city转换成可直接进行计算的数值,然后按照时间和地区进行排序,按照地市级进行分组,完成数据的处理,得到如图7所示的标签属性,从而方便之后数据集的划分集预测任务的实现。
在这里插入图片描述
图 7 数据列名展示
3.2 数据集划分
数据集的划分方式写在get_data()函数中,主要内容是将表格按照时间和县来排列,切分成57个县的天气情况,然后对每个县选择时间窗口滑动进行分组,最后将所有组垂直拼接并shuffle。按照8:1:1的比例划分为训练集、验证集和测试集。该分法的缺陷是不能单独运行测试函数,因为shuffle的时候,将测试集合破坏了,因此只能在训练之后使用测试函数。
在这里插入图片描述在这里插入图片描述
图 8 数据集展示
最终得到如图8所示数据集,其中(a)展示了回归任务中的数据集的属性、标签、训练集、验证集、测试集的形状,(b)展示了多标签分类任务中的属性、标签、训练集、验证集、测试集的形状,可以更加直观的了解预测任务中所需的数据集。总共有100945条数据,将其划分为训练集80756条,验证集10094条,测试集10095条,数据集的属性为26,两者的主要区别在于多对一的标签数为1,多对多的标签数为11。
3.3 回归任务
回归任务中采用LSTM模型是多对一的形式,即利用处理好的全部26个属性来预测单一属性,如温度,可见度和湿度等。
3.3.1 模型测试
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第16张图片
图 9 多对一模型参数情况
通过这些参数,可以看到模型各个层的组成。也能看到数据经过每个层后,输出的数据维度。还能看到Param,它表示每个层参数的个数。InputLayer表示输入层,Conv1D表示1D卷积层,AveragePooling1D对一维的输入作平均池化,Bidirectional搭建双向模型,包括前向传播、反向传播,dropout 能够避免过拟合,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃,dense表示全连接层,其中包括一个卷积层,一个池化层,五个drop层和四个全连接层。
在训练模型的过程中,为了从根本上加快模型机器的学习速率,收敛速率,并且利用的资源更少,本文加入 Adam 优化器进行优化。另外,为了防止神经网络模型经常会出现的问题,即过拟合现象,本文采用加入 Dropout 层来解决。具体原理是在模型学习训练过程中,依据一定的概率随机将神经网络单元从网络中移除,本文将 Dropout 参数设置为 0.3、0.3、0.3、0.2、0.1,即每一层都以此概率随机舍弃每一层搭建的网络的神经元权重,以提升所搭建模型的泛化能力。
3.3.2 结果展示
(1)预测温度
在这里插入图片描述
通过26个属性来预测温度,得到该模型的评价指标,通常情况下,R2 越大,R2过大则出现过拟合现象,RMSE越小,预测效果越好。该多对一模型预测温度时,RMSE为0.304,R2为0.629,可以看出该模型预测效果在可接受的范围之内。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第17张图片
图 10 损失函数在训练集和测试集上的变化曲线
训练集损失函数曲线呈下降逐渐趋于平缓,测试集损失函数在中间出现波动突然增高,说明该模型出现过拟合现象,因此当测试集上损失函数值达到最小值时,就是参数最优的情况。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第18张图片
图 11 温度值测试值与预测值对比图
在进行预测时将温度进行归一化,其数值范围定在0-1之间,将温度测试值与预测后的值进行可视化。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第19张图片
图 12 还原后温度值测试值与预测值对比图
将归一化后的数据进行还原,温度范围为-20-40之间,通过观察温度值预测值与测试集中的真实值可以看出大多数图像重合,所以该模型对于预测温度的效果良好。
(2)预测可见度
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第20张图片
图 13 可见度与其他属性之间相关性
使用corr()计算列之间的相关性,也就是可见度与其他各变量之间变化趋势的方向以及程度,值范围-1到+1,0表示两个变量不相关,正值表示正相关,负值表示负相关,值越大相关性越强。其中可以看出晴天与可见度相关系数为0.298675呈正相关,相关性最强,也就是晴天的可见度越大,雾天与可见度相关系数为-0.581176呈负相关,相关性最强,也就是雾天的可见度越小。
在这里插入图片描述
该多对一模型预测温度时,RMSE为0.291,R2为-0.823。R2为负数时,回归函数拟合效果差于取平均值,所以相比于预测温度,预测可见度时该模型效果较差。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第21张图片
图 14 可见度测试值与预测值对比图
在进行预测时将可见度进行归一化,其数值范围定在0-1之间,将可视度测试值与预测后的值进行可视化。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第22张图片
图 15 还原后可见度测试值与预测值对比图
将归一化后的数据进行还原,可视度范围为0-50000之间,相比于使用该模型预测温度,可见度预测值与测试集中的真实值的图象相差过大,所以该模型对于预测可视度的效果较差。
3.4 多标签分类任务
多标签分类任务采用LSTM模型是多对多的形式,即利用处理好的全部26个属性来预测气象的11类属性,在进行该任务训练和测试时,需要引入特征列表,也就是最终预测的属性,包括’sunny’, ‘cloudy’, ‘rain’, ‘fog’, ‘haze’, ‘dust’,‘thunder’, ‘lightning’,‘snow’, ‘hail’, ‘wind’。
3.4.1 模型测试
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第23张图片
图 16 多对多模型参数情况
相对于多对一模型的参数,可以发现多对多全连接层4的参数为11,也就是预测天气现象的11个属性。
3.3.2 结果展示
在这里插入图片描述
对该模型进行评价分析,可以发现auc_score为0.83,f1_score为0.68,仍然可以继续改进。
Python与科学计算课程设计报告———基于LSTM的气候变化预测_第24张图片
图 17 每个类的准确率
该图可以看出,使用多标签分类模型预测11种天气现象时,预测值与真实值之间的准确率。

五、结果分析和小结

1 结果分析
由于大气温度时间序列受各种气象因素的影响,只考虑历史气温数据并不能很好地预测出未来气温值,所以本文考虑利用降水量、极大风速等 26个气象影响因子来预测合肥市最高气温,回归任务的准确率使用R2_score来进行评定,预测温度的准确率大约在95%左右。多标签分类任使用f1_score和auc_score来进行评定,最后二者分别为68%和83%,仍然有较大的上升空间。
对于实验中各个步骤的结果在实验结果部分已经进行分析。
2 心得体会
本次课程设计基于LSTM时间序列模型对天气数据进行可视化分析、预测,首先是对于所需库与Python版本之间的对应,以及Python库之间版本的对应关系要进行匹配,必要时还需对Python的版本进行降级。在查看数据结构时,对于太多信息系统默认省略,要想全部显示需要进一步设置。绘图的时候,数据较多容易造成可视化图像的堆叠,需要注意设置图像的透明度从而更好的区分,训练模型时,由于样本数量和迭代次数较多,如果使用CPU来训练所需时间较长,所以最好使用GPU训练,可以很大程度上节约时间,然后不断调整参数,进行优化,训练完成后,将模型保存,下次运行时就不用再次训练,对于一个项目的完成,自己掌握的知识总是有限的,我将本学习学习到的知识进行了一个回顾整合,同时进一步学习了Python库中的函数,评价模型所需的指标以及关于LSTM模型中的层次、参数等。对于本文中建立的模型还可以使用其他数据集进行测试,应用于空气指数的预测上,相信还可以将本文进一步完善,发现更多的结论。在今后,我会勤加练习,希望可以用自己学习到的知识解决生活中的实际问题,对于生产发展起到一定的促进作用。

你可能感兴趣的:(python,lstm,实验报告)