这个软件包利用每日MODIS卫星数据和气象数据,对北京第二天的污染水平进行了预测。

BeijingTomorrow的Python项目详细描述


北京明天
----


作者:tavis barr,tavisbarr@gmail.com,版权所有2016
根据GNU公共许可证V.2.0获得许可
有关其他许可安排,请与我联系



此程序使用来自美国宇航局modis计划的卫星数据,以及来自美国驻北京大使馆的污染数据来开发预测器。第二天的污染变化基于今天的卫星图像。

--而是演示如何使用caffeonspark执行从下载到训练到预测的完整建模练习。到本文撰写时为止,caffeonspark包还没有很好的文档记录,因此代码可以用来说明它的用法。



setup
----


我使用pydev通过
EclipseIDE执行此操作,但也可以通过命令行执行。要让
pydev使用caffeonspark,需要对
python解释器进行以下更改:

(a)需要将以下内容添加到pythonpath中,实际的绝对路径:${SPARKYHOM}/Python < Br/> ${SpkkOHON}/Python /LIB/PY4J-[YLYORIV] [SIP.BR/> ${SpkkHOM}/Python /LIB/PyScPult.zip < BR/> $FaseOnOnSpult}/咖啡因网格/目标/CopeOn SpkpythOnAPI。Zip
BR/>(b)以下环境变量用${SpkkHouth}和
${FaeleOnOnSpult}替换。需要补充:
Br/> SpkkHoad需要设置为你的星火安装的基础< Br/> PySpkkasPumithARGs需要设置为以下(YMMV):
BR/>主控本地[*]或URL,如果你运行在纱线
上,队列PyDeFask1.1.1可以被称为
任何文件-{FaseOrnOnSpult}/CopePube / Python /Cabe/Office。
${FaffyOnOnSpult}/CopePube /DeB/LIb/LbBaFe.S.1.0.0 RC3
-JAVE${FaeleOnOnSpult}/咖啡因栅格/目标/咖啡GRID-0.1-SNAPHOTH-JAR-FISH。
${FaseOnSnOffice /目标/咖啡-依赖性.jar(Bar)
>驱动程序库路径“${FaffiOnOnSpull}/CopeGrave/Task/Fas-GrID-0.1-SNAPHOTH-JAR-RESIVITY JAR”BR/>驱动程序类路径“${FaffyOnOnSpult}/CaseGrave/目标/Cop-GrID-0.1-SNAPHOT-JAR-RISTION JAR”
-CONF${LD.LoopyActhPix}:${FaelyOnOnSpult}/CopeAuth/Deals/LIB:$FaseOnOnSpult}/CopeDistial/Deals/LIB“Br./>”ReXutoReNv.LD.LoopyLyPATION=“${LyLoopyAyPATION}:$FabeOnOnSpult}/CopePube /Deals/LIB:
$FaseOnOnSpulc}/CopeDisti/Distabor /LIB”驱动程序.ExabyBryPATH =
pyspark shell

如果该程序是从命令行运行的,则这些参数与调用pyspark时所需的参数大致相同。同样,$BR/> $FaseOnOnSpult}应该用它的实际值代替。
BR/> BR/>< BR> >程序运行在四个主要步骤中,每一个步骤都使用它的
自己的模块。这些是:(1)下载数据,(2)构建lmdb
数据库,(3)训练模块,以及(4)预测今天的数据。
此外,还有一个模块使用apache spark上的随机林库来训练标准(非“深度”)模型
。每个
模块都按顺序描述。

(1)下载数据


使用beijingpollutioncompiler模块实时拉取
。这些数据来自美国驻北京大使馆的网站环境保护部也发布了更准确的数据,但这些数据更难获得,而且也不太容易追溯到过去。



(2)建立数据库

lmdb最容易使用,所以我把数据转换成这种格式来使用它们。需要注意的是,图像中的底层BR/>数据的索引顺序需要从CAFE的标准图像格式改变使用。
> BR/>不幸的是,PATHON模块的CAFE也期望结果数据是
整数;修复这是CAFE源代码中的一行变化,但我不想使用非标准版本的caffe,所以我只是将
的变化乘以100。


当没有卫星数据可用时,modis不会抛出异常,而
只返回黑色图像。污染数据可能有几天是空白的。
因为caffeonspark培训师希望所有的观察都是有效的,在建立数据库时,这些数据将被丢弃。


数据在放入数据库之前。


(3)训练模型


必须在.prototxt文件中指定解算器和
网络的配置,而不是在代码中配置为python对象
(在代码中定义它们的caffe接口将工作,但是
它们不容易附加到caffeonspark配置中)。

关键是
我们从资源目录中的一个文件夹
获取模型配置,并在那里交付模型。完成训练后,程序
会在测试样本上报告回归的r平方。无论如何,本节中的大部分工作都涉及调整.prototxt文件以改进模型。


(4)预测


一旦模型经过训练,就可以从常规的caffe
接口调用它,而不需要spark的开销。在检查今天的
图像不是空的之后,我们加载它并以与转换训练
图像相同的方式对其进行转换--交换轴并减去平均值。
最后,测试图像预计是批的一部分,在这种情况下,批是一批,因此我们为图像数组添加了额外的维度。

此外,我们需要对.prototxt文件稍加修改,才能使用此模型预测
。首先,需要将顶层(损失和精度)从模型中取出,否则它们将被返回,而不是预测。
最后,需要将测试模型的批大小设置为1。

有了这些,我们就可以进行预测了。显然,这个模型是相当初级的。


(5)比较


如果不使用“深度”学习,我们可以做得有多好可能会很有趣。
污染学习者将图像缩小到4x4网格,然后在网格上建立一个随机森林。在建立这种现象的任何模型时,明显的挑战是,我们拥有的特征远远多于观察结果,因此我们需要在尝试训练之前智能地简化特征。在
任何情况下,随机森林模型都比“深度”模型稍差,
但实际上并非如此。坦率地说,两种模型都没有很强的预测性。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java比较空对象   JavasocketUDP循环   更改活动时使用java“安卓.view.InflateException:二进制XM文件行”   java可以在EclipseRCP中定义ViewPart或Workbench的最小大小吗?   java试图根据用户输入对列表中的整数进行排序   java如何避免Hibernate在oneToMany关系上创建外键限制   java创建一个简单的字符串解析器,交互式外壳式   java如何解析JSON并将其值转换为数组?   JavaAzure:Image Magick提供0 KB的输出?   使用Azure Event Hubs for Apache Kafka生态系统和OAuth在Java中发送和接收消息   java如何将Oracle的Interval数据类型格式化为HH:MM格式?   java jsoup无法在安卓上正确解析HTML   java如何计算2ndArray中的距离?   java Swing Worker线程说在超类中没有Process()方法   带有内部组件的java单击JPanel   javajsp中的html引号转义   java Maven在打包jar时无法检索buildNumber   Java中的linux八进制转义导致错误的字节值,编码问题?