亚马逊雨林是地球上最大的热带雨林,以其无与伦比的生物多样性和在调节全球气候模式中的关键作用而闻名[1,2]。它占地超过550万平方公里,通过吸收大量大气中的CO₂作为重要的碳汇,从而缓解全球气候变化[2]。然而,近几十年来,亚马逊盆地的温度出现了令人担忧的上升趋势,这主要归因于气候变化[3]。
在这片广阔的雨林中(图1中绿色区域),特定区域的温度上升尤为迅速,导致更频繁和强烈的“热事件”[4]。这些热事件通过增加森林火灾风险威胁当地生态系统,并对全球气候稳定产生更广泛的影响。
亚马逊地区热事件的发生和强度受到调节全球天气模式的大尺度气候驱动因素的影响[5]。特别是四个重要的海洋气候模式:厄尔尼诺-南方涛动(ENSO)、热带南大西洋(TSA)、热带北大西洋(TNA)和北大西洋涛动(NAO),在决定亚马逊地区的温度变化中起着关键作用。这些气候模式分别发生在亚马逊周围的不同海洋区域,如图1所示。
在本作业中,你的任务是使用TensorFlow/Keras构建一个神经模型,预测图1中红色标记的亚马逊特定区域的月度温度和热事件的发生。你将使用1982年至2022年的月度时间序列数据,包括亚马逊的温度观测值和代表ENSO、TSA、TNA和NAO气候模式的指数。
-
温度时间序列数据和气候模式指数(ENSO、NAO、TSA、TNA)的值,如表1所示(Amazon temperature student.csv)。
指数 测量内容 范围 解释 ENSO 尼诺3.4区域的海表温度异常 -3至3°C +表示厄尔尼诺;-表示拉尼娜 NAO 标准化海平面气压差(亚速尔群岛–冰岛) -4至4 +表示更强的西风,更温和的冬季;-则相反 TSA 热带南大西洋的海表温度异常 -1至1°C +表示南大西洋水域更温暖 TNA 热带北大西洋的海表温度异常 -1至1°C +表示北大西洋水域更温暖 -
每年每个月的温度阈值(threshold.csv)。
你的目标是为两个不同的任务构建神经网络模型:
- 任务A(分类):预测热事件的发生。
- 任务B(回归):预测温度。
(a) 定义一个二进制变量Hot:如果一个月的温度超过该特定月份的给定阈值,则该月被分类为Hot。 (i) 若月度温度超过月度阈值,则Hot=1。 (ii) 否则,Hot=0。
(b) 创建一个柱状图,总结每年的热月数量。
(c) 将数据集随机划分为训练集、验证集和测试集。
(d) 预处理:对训练集应用任何必要的转换,然后将相同的转换应用于验证集。记录所有应用的转换。
(e) 构建神经网络分类器以预测热事件的发生:定义架构和超参数(损失函数、优化器、批大小、学习率、epoch数量)。建议可训练参数的总数满足: [N_{params }<\frac{N_{samples }}{10}] 即参数数量低于样本量的十分之一。
(f) 创建一个图,显示训练集和验证集的准确率(y轴)与epoch数量(x轴)的关系。
(g) 对测试集应用与训练集和验证集相同的转换。
(h) 使用模型预测测试集的Hot类别。
(i) 通过绘制混淆矩阵评估性能。注意正类是1。
(j) 计算:平衡准确率、真负率(特异性)和真正率(敏感性)。
对于此任务,直接预测温度值,而不使用二进制Hot变量。
(k) 将数据集随机分为训练集、验证集和测试集。
(l) 预处理:对训练集的输入特征应用任何必要的转换,并将完全相同的转换应用于验证集。不要对真实值(目标)进行缩放、归一化或其他转换。明确记录所应用的每一个转换。
(m) 通过定义架构和训练超参数(损失函数、优化器、批大小、学习率和epoch数量)来构建模型。建议可训练参数的总数少于样本数量的十分之一。
(n) 创建一个图,显示训练集和验证集的损失函数值(y轴)与epoch数量(x轴)的关系。
(o) 通过比较测试集上的真实温度值和预测温度值来评估回归模型。使用皮尔逊相关系数(r)和平均绝对误差(MAE)作为评估指标。这些指标定义为: [r=\frac{\sum_{i=1}^{n}\left(y_{i}-\overline{y}\right)\left(\hat{y}{i}-\overline{\hat{y}}\right)}{\sqrt{\sum{i=1}^{n}\left(y_{i}-\overline{y}\right)^{2}} \sqrt{\sum_{i=1}^{n}\left(\hat{y}{i}-\overline{\hat{y}}\right)^{2}}}] [MAE =\frac{1}{n} \sum{i=1}^{n}\left|y_{i}-\hat{y}{i}\right|] 其中,(y{i})是真实温度,(\hat{y}_{i})是预测温度,n是测试样本的数量。
(p) 按完整日历年划分数据:每一年必须只出现在一个子集中。使用与(k)部分相同的训练/验证/测试比例。为训练集的温度目标拟合一个单独的缩放器,并将其应用于验证集和测试集的目标;不要重用特征缩放器。保持(l)部分指定的特征转换不变。
(q) 使用(p)部分中已建立的训练/验证/测试分区和目标缩放器。现在,对这些相同的拆分应用(l)部分中指定的所有其余特征级预处理步骤。
(r) 在按年份划分的数据上重新训练(m)中定义的相同回归网络和超参数(不使用新架构)。
(s) 创建一个图,显示训练集和验证集的损失函数值(y轴)与epoch数量(x轴)的关系。
(t) 通过比较测试集上的真实温度值和预测温度值来评估回归模型。使用皮尔逊相关系数(r)和平均绝对误差(MAE)作为评估指标。
- 你需要设置随机种子以确保结果可重现。
- 你必须序列化每个训练模型的两个版本,以及相应的特征缩放器对象(适用于随机拆分和按年份拆分的特征缩放器,以及(p)部分中适用的单独目标缩放器)。
- 你不能使用年份作为预测因子。但是,你可以选择是否包含月份作为预测因子。如果包含月份,使用循环编码正确表示它,确保神经网络正确理解12月和1月之间的连续性。实现循环编码的方法:将月份归一化到[0,2π]范围,公式为:(month\ normalised = 2\pi \times \frac{(month-1)}{12})。
- 在按年份划分中,选择用于训练、验证或测试的年份不需要是连续的。例如,1982年的数据可能属于训练集,1983年属于验证集,1984年属于测试集。
你的笔记本将在基于教程的讨论中进行现场演示(共25分);出席是强制性的;未参与讨论的提交将得零分。
你必须为随机拆分和按年份拆分下的分类和回归任务构建并保存神经模型。为获得满分,你必须在同一个Jupyter笔记本中包含一个代码单元格,该单元格: (i) 加载课程导师提供的隐藏测试数据集; (ii) 恢复所有序列化的工件:
- 分类器模型及其特征缩放器,
- 随机拆分回归器及其特征缩放器,
- 按年份拆分回归器及其特征缩放器和单独的目标缩放器; (iii) 评估模型,打印所有所需的指标,以及:
- 分类器的混淆矩阵;
- 随机拆分回归器的“真实值与预测值”散点图;
- 按年份拆分回归器的相同散点图(使用其自己的缩放器对目标进行逆转换后)。
代码可读性占1分。在讨论期间,导师将根据你的理解为每个任务授予最多8分:8分(优秀)、6分(良好)、4分(一般)、2分(较低)、0分(不足/无答案)。
作业必须独立完成。你需要在Moodle上提交你的解决方案。提交内容必须包括:
- 一个Jupyter笔记本(.ipynb)。
- 分类和回归任务的序列化训练模型;
- 所有相关的缩放器对象(每个模型的特征缩放器和按年份回归中使用的单独目标缩放器)。
Jupyter笔记本的第一行应作为注释显示你的全名和zID。笔记本应包含所有必要的代码,用于读取文件、数据预处理、网络架构和结果评估。此外,你的文件应包含简短的文字描述,以帮助评分者更好地理解你的代码。请注意,提供清晰易读的代码是作业的一部分。
在截止日期前,你可以提交任意多次,较晚的提交将覆盖较早的提交。提交文件后,一个好习惯是截取屏幕截图以备将来参考。
迟交惩罚:新南威尔士大学有标准的迟交惩罚,即每天扣5%,从评估截止日期起最多扣5天;之后学生不能提交作业。