阿里云天池《“AI Earth”人工智能创新挑战赛》萌新体验

本文记录了一位参赛者首次参加阿里天池大赛的经历,挑战时间序列预测问题——ENSO指数预测。面对数据质量问题、内存限制和模型选择的困难,作者尝试了多种数据处理策略和模型,包括CNN。通过分析CMIP和SODA数据,进行增量学习,最终实现模型训练。尽管遇到诸多bug,但作者决心克服并期待未来进步。

前言

一直都想参加一次阿里天池比赛,看到有公众号提了这次比赛的baseline,果断报名。0基础,开始了第一次数据科学比赛的尝试~

这次比赛遇到了各种各样的问题,几度想放弃,但是不忍心排200多名。来都来了,冲完B榜吧,也算是表明自己第一次参加天池大赛的态度,不能让母校的名字排在最后。

题目

https://tianchi.aliyun.com/competition/entrance/531871/introduction
在这里插入图片描述
发生在热带太平洋上的厄尔尼诺-南方涛动(ENSO)现象是地球上最强、最显著的年际气候信号。通过大气或海洋遥相关过程,经常会引发洪涝、干旱、高温、雪灾等极端事件,对全球的天气、气候以及粮食产量具有重要的影响。准确预测ENSO,是提高东亚和全球气候预测水平和防灾减灾的关键。

本次赛题是一个时间序列预测问题。基于历史气候观测和模式模拟数据,利用T时刻过去12个月(包含T时刻)的时空序列(气象因子),构建预测ENSO的深度学习模型,预测未来1-24个月的Nino3.4指数,如下图所示:

在这里插入图片描述

这题是一个典型的时间序列预测问题,看起来没那么难,但是认真一想还是有很多难点的,比如数据质量,内存限制,模型,都是可以改进的,下面是我的baseline。

数据分析

拿到数据,我都是一股脑往模型里扔,然后开始炼丹,炼着炼着,分数从-6变为-10、-13、-15、-22…最后都到NaN了,平时老师也总是说,不要一上来就上模型,先把数据分析清楚了,于是打算再花几个小时进行数据分析。

CMIP数据分析

CMIP是模拟数据,网友UCDuan说:

CMIP是气候模型的数据
你可以理解为不同情况下(不同的初始场和不同的气候模型)“地球”的真实情况,只是符合大致的‘物理规律’,但不是地球真实的历史情况。所以用CMIP就是想挖掘这个‘物理规律’。

这里我打算拿CMIP数据训练,SODA数据验证。

数据统计

以sst数据为例
在这里插入图片描述

在这里插入图片描述

趋势图

在这里插入图片描述
在这里插入图片描述
可以看出数据是经过处理的,每隔12个月,连续三组数据值是一样的
再加上下个特征,发现他们也是相似的
在这里插入图片描述
另外有些特征数据缺失,需要进行平均填充
在这里插入图片描述
方法如下:

tr_features2 = np.concatenate([sst_CMIP_shaped,t300_CMIP_shaped,va_CMIP_shaped,ua_CMIP_shaped],axis=-1)
tr_features2[np.isnan(tr_features2)] = np.mean(tr_features2)#对NaN值进行均值填充

SODA数据分析

代码

baseline来自这篇文章:https://mp.weixin.qq.com/s/63LPCHNo4zOA_UGDAc2xUQ
这篇文章完成了数据组织、处理、MLP模型构建、本地测试、上传代码,但是有很多问题,我进行了初步修正:

  1. 由于内存限制,CMIP数据只加载1000年==》全部
  2. 前面数据转换为csv文件,后面没有用到==》后面数据加载来源于csv文件
  3. 模型使用MLP==》模型改为3维CNN

代码链接:https://github.com/guhang987/-AI-Earth-
代码解释:

  1. ./ENSO/data文件夹
    存放原始数据与转换后的数据

在这里插入图片描述

  1. data_prepare.py
    将比赛提供的nc文件转换为csv文件
  2. train.ipynb
    训练模型
  3. main.py
    模型打包提交

训练

conda环境:

  • python 3.8
  • tensorflow 2.20

首先进行数据格式转换,提取数据前24个月,以及标签后12个月的数据。

soda_label = pd.read_csv('./ENSO/data/df_SODA_label.csv')['label']
sst_SODA = pd.read_csv('./ENSO/data/df_sst_SODA.csv')
t300_SODA = pd.read_csv('./ENSO/data/df_t300_SODA.csv')
ua_SODA = pd.read_csv('./ENSO/data/df_ua_SODA.csv')
va_SODA = pd.read_csv('./ENSO/data/df_va_SODA.csv')

sst_SODA = np.array(sst_SODA).reshape(100,36,24,72,1)[:,:12,:,:,:]
t300_SODA = np.array(t300_SODA).reshape(100,36,24,72,1)[:,:12
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值