利用LSTM进行空气指数预测

毕设终于结束,感谢指导老师以及团队大伙们的辛苦付出,是时候总结一下毕设的内容了。
我们团队的毕业设计是关于利用递归神经网络模型LSTM(long-short-term memory)对中国主要城市的空气质量指数进行预测,并将LSTM与RLS进行比较,论文的主要内容是数据分析,机器学习。

之前对于机器学习一片空白的我在经历了毕业设计之后,接触到了几个比较常见的模型,接触到了tensorflow以及keras库,接触到了神秘的递归神经网络,激励函数,超参数,梯度下降等机器学习中的概念,很有必要做个笔记,形成一套方法论,为后面的学习工作作准备。

经过两三个礼拜的简易研究,个人并没有深入机器学习底层的数学原理研究,更多的是focus在应用板块,也就是利用代码库进行一些简易的模型设计,并训练来得到自己想要的结果。

在机器学习的使用过程中,我认为难度最大的地方在于源数据清理,模型参数的选取。接下来我尝试使用LSTM对中国部分城市的空气质量指数进行简易的预测。

在进行构建模型与预测之前,第一步就是分析数据集合的性质,观察数据集合需不需要归一正则化等等,
源数据
通过观察原数据的格式我们可以发现,这里面的数据只有每一天的空气质量指数,也就是只有一个属性值,那就说明我们不需要去除量纲,进行所谓的归一化操作。

分析完数据之后我们要明白遇到的问题是属于什么类型的学习问题。是无监督的还是有监督的?我们设想的是通过前几天的数据去预测空气指数,那么是否可以抽象成为以下的表格,其中t为我们需要预测的。
监督学习
就拿这表格的例子告诉我们,模型通过读取前4天的数据,尝试去预测第5天(t为预测值),通过计算第5天的预测值与实际值之间的误差来不断修正模型。那就说明模型可以通过源数据获取到真实值,再与预测值进行比较,这种给模型真实值去优化模型的训练方式其实就是监督学习。即通过告知模型预测结果的好坏来使得模型不断优化。

既然明白了该问题的本质,接下来就是将源数据集格式进行转换,将时间序列的问题转化为监督学习问题,这样我们就可以使用Keras的包进行模型构建了。

对于机器学习的模型,我们需要将数据集合划分为三个部分,分别为训练数据集,验证数据集以及预测数据集,我这里将60%的数据作为训练集合,20%验证集合,20%预测集合。如下图所示,将数据切分完毕后传入time_to_supervised()方法进行时间序列转监督学习。
数据转换
数据切割以及格式转换完毕后,就需要设计模型进行训练了。机器学习领域模型没有唯一的设计方式,正因为它的随机性,需要我们使用一些手段去对模型的表现进行评估,在这里使用mean squared error以及预测结果和真实值之间的correlation,spearman correlation来衡量模型的表现。

对于超参数的选定,比如epoch的次数, batch size的大小等都是依据“经验”判断,对于我这种没有经验的只能先依据前人的一些试验结论进行调参。整个调参,优化模型的过程可以抽象为一下的流程图。

模型设计
经过大量的试验与修正参数之后,我们就会得到一个比较好的模型,接下来就是使用模型去进行预测了,当然数据可视化在机器学习与数据分析中是必不可少的。下图是得到的试验结果图。在这里插入图片描述
其中蓝色是原始数据,绿色为训练数据集合的预测结果,黄色为验证数据集合的预测结果,红色为预测数据集合的预测结果。
该模型的预测与实际值之间correlation可以达到0.72,可见这个模型的预测结果是比较准确的。

具体代码已经上传至我的GitHub,代码中已经有比较详细的注释,有兴趣的同学可以自行查看 https://github.com/wzcwzcwzc/LSTM_Prediction

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章