随着科学技术的发展,人们渴望对天气有一定的掌握空间,从古代的夜观天象到如今的气象卫星,人类在对天气的预测上不断的进步与发展,本文将运用循环神经网络实现对天气情况的初步预测,循环神经网络是人工智能领域深度学习的一种算法,基于对时间序列事情的处理能达到特别好的效果,而天气影响因素恰恰是基于时间序列的。我们通过神经网络模型对影响天气因素的学习,比如:风速、风向、露点温度、(大气)压力等一系列外观因素可以预测天气的污染程度或者阴晴情况等;

在本实验中,我们采用python语言进行编程且调用了keras神经网络框架利于代码的实现。我们所使用的是北京PM2.5科研共享数据集,做天气污染程度的预测,同样,该模型将普遍适用于各种天气指数的预测与分析。实验第一步,我们将一些非数字化的影响指标进行处理,比如:风向;然后采用数据中心化处理,将比较分散的数据进行中心化,以便更好的放入神经网络进行学习。最后,我们将通过损失函数曲线进行判断模型的学习情况,待达到稳定后,我们将利用此模型进行纯净数据的预测,最后通过与真实值的对比;(大家如果感兴趣可以加深度学习代码实现群:225215316,或者想做此方向的项目加讨论群:457756921)

Python环境

本教程假设你已安装Python SciPy环境,你可以在本教程中使用Python 2或3。你必须使用TensorFlow或Theano后端安装Keras(2.0或更高版本)。本教程还 假设你已经安装了scikit-learn,Pandas,NumPy和Matplotlib。

数据集分析与处理

本数据是国外机器学习网站共享开源的数据集,北京近五年天气情况和污染指数(数据的时间段为2010年1月1日至2014年12月31日,每个一小时记录一次,但是中间有缺失值,在数据处理中去掉了)。原始数据集包含13列,其中四列是对时间的描述,分别为年、月、日、小时;这些时间节点详细的描述了北京的在每天固定时间点的天气指标情况,时间节点的规律性,为后期对此部分是处理提供了方便。

原始数据集如下图所示:(图:)从图中不难看出,原始所统计的数据集一共包含43825条,但是前28条PM2.5值出现了缺失状况,则选择去除,在中间数据部分,同样也有缺失值部分,也选择去除,我们假设样本的局部去除不会影响数据之间特征的连续性。(如若对空值数据采用赋值处理,若处理不当,影响程度将会大于去值处理)

在数据中对风向的表示采用西北、东南等方位术语,为了便于放入神经网络训练,我们将方位分别赋值为1,2,3等个位数字区表示,这样每个方向都将会单独的数据去表示,并不影响数据的真实性,同时,将四列时间属性进行合并,用单一序列号进行表示,初步处理后的数据表示如下图前5行所示(图:)。

数据初步处理后,只是变的更为整洁可视了,这样的数据放入神经网络进行训练将会导致梯度下降求参的误差较大。为了进一步处理数据,我们将数据采用标准化就行进行,通俗的讲就是将数据按照一定的比例进行缩放,或者说缩放到某一空间大小,这样数据之间的差距将会变小,但是他们之间的对应关系将保持不变,即不改变数据的真实性。

在python中,通过从sklearn库调用preprocessing方法即可完成对该数据集的标准化预处理。具体实现语句如下:

train= (train - np.mean(train, axis=0))/np.std(train, axis=0)  # 标准化

train = scale(train)

RNN模型的具体实现

即为train_X和train_y,RNN模型的具体实现核心代码如下所示:

model = Sequential()
model.add(SimpleRNN(10, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))
model.compile(loss='mae', optimizer='adam')

history = model.fit(train_X, train_y, batch_size=X, epochs=X, shuffle=True, verbose=1, validation_split=X)

LSTM模型的具体实现

# design network
model = Sequential()
model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
# fit network

history = model.fit(train_X, train_y, epochs=50, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)

结果展示:

将数据放入传统RNN进行训练,待模型达到稳定时,选定训练次数,可得其损失函数图如下所示(图):

....Epoch 46/50

0s - loss: 0.0143 - val_loss: 0.0133

Epoch 47/50

0s - loss: 0.0143 - val_loss: 0.0133

Epoch 48/50

0s - loss: 0.0144 - val_loss: 0.0133

Epoch 49/50

0s - loss: 0.0143 - val_loss: 0.0133

Epoch 50/50

0s - loss: 0.0144 - val_loss: 0.0133

真实值与预测值结果展示(其为归一化后的结果展示):

从图中预测曲线来看,随着时间的增加,传统RNN模型基本能够预测出未来pm2.5的气象指标,预测长度在本实验中达到了99条数据集的长度(其中LSTM较RNN稍微好那么一点点,具体的在这里不再展示了);完整代码详解及注释将会根据网友意见和建议在后续博客中持续更新;欢迎大家转载和关注!

基于RNN(循环神经网络)的北京雾霾天气指数的预测(keras实现RNN,LSTM神经网络算法)相关推荐

  1. 数据分享 | LSTM神经网络架构和原理及其在Python中的预测应用(附视频)

    本文约2800字,建议阅读10+分钟 本文与你分享如何使用长短期记忆网络(LSTM)来拟合一个不稳定的时间序列. 长短期记忆网络--通常称为"LSTM"--是一种特殊的RNN递归神 ...

  2. 【深度学习】LSTM神经网络解决COVID-19预测问题(二)

    [深度学习]LSTM神经网络解决COVID-19预测问题(二) 文章目录 1 概述 2 模型求解和检验 3 模型代码 4 模型评价与推广 5 参考 1 概述 建立一个普适性较高的模型来有效预测疫情的达 ...

  3. layui table动态选中_NeurIPS 2020 | 伯克利新工作: 基于动态关系推理的多智能体轨迹预测问题...

    公众号:将门创投(thejiangmen)作者:加州大学伯克利分校在读博士生 李家琛卡内基梅隆大学在读硕士生 杨帆 NeurlPS 2020系列论文解读 第·1·期 本文将分享来自UC Berkele ...

  4. 《LSTM神经网络和双色球预测例子》

    前言: 书接上回,通过把历年来的双色球蓝球数据爬取,可以看出,每期双色球蓝球之间并无任何关系,但仍存在问题: 决定蓝球数字可能并非取决于上一期蓝球的数据,可能取决于当期红球的数据,我们可能需要通盘考虑 ...

  5. 基于RNN循环神经网络lstm的藏头诗制作

    基于RNN循环神经网络lstm的藏头诗制作 简单介绍 在一次偶然中接触到藏头诗,觉得十分有意思.但是好像都是利用古代本就有的诗句重新组合而成.比如输入清风袭来,结果如下图所示. 之后想到不如利用深度学 ...

  6. RNN循环神经网络的直观理解:基于TensorFlow的简单RNN例子

    RNN 直观理解 一个非常棒的RNN入门Anyone Can learn To Code LSTM-RNN in Python(Part 1: RNN) 基于此文章,本文给出我自己的一些愚见 基于此文 ...

  7. Recurrent Neural Networks(RNN) 循环神经网络初探

    1. 针对机器学习/深度神经网络"记忆能力"的讨论 0x1:数据规律的本质是能代表此类数据的通用模式 - 数据挖掘的本质是在进行模式提取 数据的本质是存储信息的介质,而模式(pat ...

  8. 论文学习——基于循环神经网络的电信行业容量数据预测方法

    文章目录 0 封面 1 标题 title 2 摘要 abstract 3 关键字 keywords 4 总结 conclusion 5 引言 introduction 6 介绍 LSTM 6.1 LS ...

  9. 推荐NLP基础 RNN循环神经网络

    NLP概述 Natural Language Processing(NLP, 自然语言处理) 目的:让计算机处理或"理解"自然语言,以执行语言翻译和问题回答等任务:最终 来讲就是构 ...

最新文章

  1. Struts2入门这一篇就够了
  2. jdbc mysql数据库增删查改_通过JDBC对Mysql数据库进行简单的增删改查
  3. 每天一道LeetCode-----分糖果问题
  4. linux md5加密文件,Linux下对字符串进行MD5加密
  5. FreeRTOS+STM32F103串口通信错误解决方法
  6. 网络广告假流量盛行,查处有妙招
  7. java流程语句_java流程控制语句总结
  8. Taskctl的定时任务调度
  9. android 旋转动画,android 动画rotate实现图片不停旋转的效果
  10. A Few Useful Things to Know About Machine Learning 中英文对比和笔记
  11. sql 查看某个日期字段对应某天的数据
  12. iphone屏幕自定义排版_如何使用小部件和图标自定义iPhone主屏幕
  13. 五个了解自己天赋优势的分析工具(二)盖洛普优势测评
  14. Python和Java哪个好学?
  15. RTKLIB_RTCM解码学习
  16. 如何利用Dpabi,AFNI,FSL软件计算种子点的功能连接?
  17. 【GlobalMapper精品教程】045:空间操作(2)——相交(Intersect)
  18. dayjs 取本周时间段
  19. Java——单例模式和延迟加载
  20. win7计算机静态ip,win7电脑动态IP和静态IP有什么差别?如何区分动态IP和静态IP

热门文章

  1. 【运维面试】面试官: jar包和war包有什么区别?
  2. (2018)建筑物占用率估算与检测综述
  3. 自动seo网站源码_做了利于SEO优化的网站建设,企业的网站就能自动排名靠前?...
  4. neuromaps: structural and functional interpretation of brain maps 多模态、多尺度脑科学数据综合分析的利器
  5. 超高功率光纤激光切割机选购指南
  6. CSS 文字超出部分省略号代替
  7. python手机小游戏刷分器_Python跳一跳刷分辅助下载|python跳一跳刷分安卓版下载V1.0(暂未上线)_预约_飞翔下载...
  8. java导出excel报表工具类
  9. python极简课程系列-控制结构
  10. 【java打地基】之——final修饰字段、方法、类、变量 引用类型变量(附图堆栈)