• 2019华为杯研究生数学建模竞赛总结(E题 国一)


    赛前

    本科的时候有参加过数学建模的经历,当时为了保研加分临时找的队友组队。虽然最后没有拿到想要的加分,但是在数学建模比赛的过程中学到了很多的知识,也让我对编程产生了兴趣。在研究生阶段数学建模比赛虽然没有本科重要,但是这次拿到一等奖也是非常开心的,算是弥补了本科时的一个遗憾。

    选题及分析

    我们队伍选择的题目为E题,分析气候变化以及全球变暖趋势。这道题是比较开放的,主要涉及到数据处理以及机器学习的知识。我和另外一个队友对这方面还算比较了解,因此选了这道题。这个题主要有四个问题:
    (1)你们能否从加拿大各地天气变化的历史数据中挖掘出该地区温度的时空变化趋势?海洋表面温度历史数据中蕴含着什么样的规律?
    (2)请你们建立一个刻画气候变化的模型对未来25年的气候变化进行预测,该模型至少需要考虑地球的吸热、散热以及海洋的温度变化等要素?
    (3)“极寒天气”是某地的天气现象,这种极端气象的出现,与气候变化有无关系?请建立相应的模型,并利用题目所提供的数据以及你能收集的数据说明:全球变暖和局地极寒现象的出现之间是否矛盾?
    (4)请用通俗易懂的文字解释:“全球变暖了,某地今年的冬天特别冷”之间的关系。请用一个新概念替代“全球变暖”,来反映气候变化的趋势和复杂性?并给予解释。

    主要是前三问,分别是加拿大地区温度时空趋势分析,全球气候模型和极寒现象模型,最后一问是一个总结性质的,不需要建模。

    问题一

    对于第一问,题目给了一些nc文件并且给了matlab代码示例。我对python的使用更熟悉一些,因此在网站上找了一些python代码跑的nc程序。地址在这里:
    https://blog.csdn.net/showpingzhang/article/details/83384780

    观测站点选取

    加拿大气象网站上面可以找到几十年的数据,下载时候发现每年的观测站点都不一样,因此我把近二十年的数据(分析趋势够用了)下载下来,先把每个文件中的观测站点提取出来,先用并集求出观测站总数量,再用交集求出来每年都出现过的观测站作为研究对象,之后数据缺失较多的站点,一共是得到了297个站点。

    之后把297个站点的位置信息做了可视化,发现13个州都有,因此可以比较好的反映加拿大全国的情况。

    缺失值和异常值处理

    有的站点温度的数据有缺失,缺失值我们用的方法就是简单的移动平均补齐,是利用不同年份同一月份的数据进行拟合并补齐的。异常值检测也是Smoothed z-score识别,然后剔除,再用缺失值的方法补齐,这个比较简单,代码就不放了。其实缺失值和异常值检测应该好好做一下的,这样结果更完整一点。

    之后就是对这些站点进行聚类,对每一类进行分析。聚类用的方法是K-means,发现聚类结果与气候分
    布结构保持一致。

    时空趋势分析

    时空趋势这里我们是分时间和空间分析的。时间是分别对时间、突变和周期进行的分析,空间是采用反距离权重法( IDW)对加拿大 299 个观测站温度数据在整个地区进行空间插值,运用 ArcGIS 软件实现每年的平均气温分布图。

    这一问主要是参考一些气象专业的论文,对论文做了复现,由于我们都不是气象专业的,因此也只能这样分析。

    问题二

    问题二需要建立一个刻画气候变化的模型对未来 25 年的气候变化进行预测,题目要求该模型至少需要考虑地球的吸热、散热以及海洋的温度变化等要素。其实吸热散热的数据很难直接拿到,我们就考虑收集一些辐射的数据,并且分了类。这是所有能找到的数据了,我们考虑的是先找相关数据,再进行降维。
    在这里插入图片描述
    数据收集好之后,对数据先进行了相关性的分析,然后用PCA做了降维。当然这个步骤最难的其实是找数据,然后把所有的数据进行清洗,都统一成按年算的数据。方法上其实很简单,就是工作量很大,当时跟队友处理了快一下午。

    我们从 NOAA 等各气象网站下载气象数据,抽取用于预测的要素指标及全球温度数据,建立基于要素维度
    的随机森林回归预测模型,用于对未来 25 年气候变化进行预测。同时在对未来 25 年的要素数据进行预测时。

    为了解决单个时间序列模型无法实现对全部要素数据预测的情况,我们建立 ARIMA 自回归时间序列预测模型和基于 prophet 框架的时间序列预测模型用于对未来 25 年的要素数据进行预测,为对未来 25 年的气候变化的预测提供数据支持。

    预测的话我们使用了三个模型,然后结果进行对比,这样结果的可信度要高一些。

    问题三

    第三问是讨论极寒天气现象,我们把这个问题其实当成一个分类问题来做的。有极寒出现就是1,没有就是0,先对极寒天气进行定义。据气象专业制定的寒冷程度等级表,气温从 9.9℃到零下 40℃以下。极寒程度一共分为八级,其中极寒天气是指零下 40℃以下的天气。目前对极寒天气的讨论主要集中在温带和亚热带,即为中低纬度地区。对于高纬度地区,出现极寒天气是大概率事件,因此分析高纬度地区是没有意义的。所以选取纬度在 40N~60N 的地区。(这里也是偷个懒,没有全部分析。事实证明这样的结果也更加合理一点。)如果该月的最低气温值小于或等于零下 40℃,即出现了极寒天气,则将此月的数值标记为 1;如果该月的最低气温值大于零下 40℃,即没有出现极寒天气,则将此月的数值标记为 0。最后,根据此数值统计全年极寒天气出现频次,并将频次数据作为分类标签。

    之后对数据的处理过程也和前面几乎是一样的,就不再赘述了。用的模型也是随机森林。最后得出的结论是不矛盾。(肯定是不矛盾的,就看怎么解释比较合理了)

    问题四

    问题四其实没啥说的,就是前面的总结,语文建模。

    总结

    其实我们做的并不深,主要还是做的比较仔细,就是把做的工作都做的非常详细,比较完整。代码量也不大,都是一些比较常规的。能拿奖也是非常幸运,最后名次也比较靠前,也比较接近答辩的名次。由于数学建模比赛只有四天的时间,论文还有很多可以完善的地方,但是能做到这样我觉得已经很满意了,毕竟不是大神。下周也要去参加交流分享会,到时候听听其他组的汇报,再来整理一下思路。

  • 相关阅读:
    [题解]小X的液体混合
    [题解]图的遍历
    [模板]基本线段树操作
    C#中 Excel列字母与数字的相互转换
    Oracle 查询数据库表大小
    vi/vim 编辑、搜索、查找、定位
    Linux 中 sqlite3 基本操作
    MessageBox.Show 消息提示框显示到窗口最顶层
    Docker bash: ping: command not found 解决方法
    PLSQL F8执行单条SQL
  • 原文地址:https://www.cnblogs.com/zjkstudy/p/12596273.html
Copyright © 2020-2023  润新知