feat: 论文扩充至52页 — 全部章节深度扩写+20篇参考文献+3附录+致谢

This commit is contained in:
2026-05-28 14:02:14 +08:00
parent cf29da52f7
commit 871ad57bd6
12 changed files with 1017 additions and 3506 deletions
+64 -24
View File
@@ -2,66 +2,106 @@
\section{研究背景}
全球气候变化是21世纪人类面临的最重大公共卫生挑战之一。根据世界气象组织(WMO)2024年发布的报告,2023年全球平均气温较工业化前水平上升约1.45°C,创下有记录以来的最高值。政府间气候变化专门委员会(IPCC)第六次评估报告指出,全球平均气温每升高0.5°C,极端高温事件的频率和强度将呈非线性增长。在此背景下,高温热浪已从偶发性气象事件演变为常态化的公共卫生威胁。
\subsection{全球气候变化与极端高温}
中国是全球受高温热浪影响最为显著的国家之一。中国气象局《2023年中国气候公报》数据显示,2023年全国平均高温日数(日最高气温≥35°C)为11.3天,较常年偏多4.1天,为1961年以来第二多。河南省作为中原腹地,夏季受副热带高压控制,高温天气持续时间长、强度大。2022年6月河南省出现持续性高温天气,多地最高气温突破40°C,郑州、焦作等城市连续高温日数超过10天
全球气候变化是21世纪人类面临的最严峻公共卫生挑战之一。政府间气候变化专门委员会(IPCC)第六次评估报告\cite{ipcc2023ar6}指出,2011-2020年全球地表平均温度较1850-1900年升高了1.09°C,其中陆地升温幅度(1.59°C)显著高于海洋(0.88°C)。在SSP2-4.5(中等排放)情景下,全球平均气温预计在2040年前达到1.5°C阈值;在SSP5-8.5(高排放)情景下,本世纪末升温可能达到3.3-5.7°C
\section{银发群体的高温脆弱性}
极端高温事件是全球变暖最直接的健康效应传导路径。IPCC AR6以中等信度指出,1950年以来全球大部分陆地区域的暖昼和暖夜频率增加、冷昼和冷夜频率减少,热浪事件的持续时间、强度和频率均呈上升趋势。世界气象组织(WMO)2024年报告确认2023年为有气象记录以来最热年份,全球平均气温较工业化前上升约1.45°C,海洋热含量、海平面上升、冰川消融等多项气候指标均创历史极值。
老年群体(65岁及以上)是高温热浪健康效应最敏感的亚群。其脆弱性根植于生理、社会和经济三个层面:
中国是全球气候变化的敏感区和影响显著区。《中国气候变化蓝皮书(2024)》显示,1901-2023年中国地表年平均气温呈显著上升趋势,平均每10年升高0.16°C,高于同期全球平均水平。1951-2023年中国平均年降水量也呈增加趋势。2023年全国平均气温为10.71°C,较常年偏高0.82°C,为1961年以来第二高。
\textbf{生理层面:}老年人皮肤血流量减少、出汗率降低,体温调节功能显著退化;同时心血管疾病、糖尿病、慢性呼吸系统疾病等基础病的患病率随年龄递增,高温应激可诱发或加重这些疾病。研究表明,当体感温度(Heat Index)超过32°C时,65岁以上人群的全因死亡风险开始显著上升;当体感温度超过38°C时,心血管疾病死亡风险增加30\%-50\%
\subsection{中国的高温热浪态势}
\textbf{社会层面:}空巢老人比例持续上升,独居状态下高温防护意识和应对能力不足。第七次全国人口普查数据显示,中国65岁及以上人口已达1.91亿(占比13.5\%),其中独居老人超过3,000万
中国气象局《2023年中国气候公报》指出,2023年全国平均高温日数(日最高气温≥35°C)为11.3天,较常年(7.2天)偏多4.1天。2022年夏季,中国经历了1961年以来最强的高温热浪事件,中央气象台连续41天发布高温预警,其中高温红色预警连续发布了12天。长江流域多地最高气温突破44°C,约5亿人口受到影响
\textbf{经济层面:}老年人收入水平普遍偏低,空调等降温设备的使用率受经济条件制约。农村地区老人面临的降温条件更为有限
河南省处于中国南北气候过渡带,夏季同时受副热带高压和大陆暖高压控制,高温天气频发。郑州、焦作等城市7月平均最高气温超过32°C,极端最高气温超过42°C。2022年6月,河南省出现持续性大范围高温天气,多地连续高温日数超过10天
\subsection{银发群体的高温脆弱性}
老年群体(65岁及以上)是高温热浪健康效应最敏感的亚群。其脆弱性根植于三个层面:
\textbf{生理层面}——老年人皮肤血流量减少、出汗阈值升高、出汗率降低,体温调节功能显著退化。最大皮肤血流量从年轻时的8-10 L/min降至65岁后的4-6 L/min。同时,心血管疾病(中国65+人群患病率约55\%)、糖尿病(患病率约20\%)、慢性阻塞性肺疾病(患病率约14\%)等基础疾病的患病率随年龄递增。高温应激可引起血液浓缩、电解质紊乱和心血管负荷增加,诱发或加重这些基础疾病。多项流行病学研究(Gasparrini等, 2015; Chen等, 2018)一致表明,温度-死亡关联呈J型或V型曲线,65岁以上人群在高温端的相对风险(Relative Risk, RR)显著高于年轻群体。
\textbf{社会层面}——中国空巢老人比例持续上升。第七次全国人口普查(2020年)数据显示,中国65岁及以上人口为1.91亿,占总人口13.5\%,较2010年第六次普查(8.9\%)上升了4.6个百分点。其中独居老人超过3,000万,农村地区空巢老人比例更高。独居和空巢状态削弱了老人在高温期间的应对能力——缺乏照护者提醒补充水分、开启空调或就医。
\textbf{经济层面}——老年人收入水平普遍偏低,空调等降温设备的使用率受经济条件制约。中国健康与养老追踪调查(CHARLS)数据显示,农村地区65岁以上老年人空调拥有率不足50\%,即使在拥有空调的家庭中,电费负担也是限制使用的显著因素。
\section{研究区域选择}
本研究选取焦作市和郑州市作为研究区域,理由如下:
焦作市位于河南省西北部,总面积4,071 km$^2$,常住人口约352万2023年)65岁及以上人口占比约12.8\%。焦作地处太行山南麓,地形以山地丘陵为主,夏季高温叠加地形效应使得城热环境较为复杂。
\textbf{焦作市}位于河南省西北部(35.24°N, 113.22°E,总面积4,071 km$^2$2023年常住人口约352万,65岁及以上人口占比约12.8\%。焦作北依太行山,地形以山地丘陵为主(约占57\%),城区海拔80-120m,夏季高温叠加山区焚风效应使得城热环境较为复杂。2021年城镇化率约64.7\%
郑州市是河南省省会,总面积7,446 km$^2$,常住人口约1,274万2023年)65岁及以上人口占比约11.6\%。郑州作为国家中心城市和重要的交通枢纽,城镇化率超过78\%,城市热岛效应显著。两市的城镇化率均超过65\%,城市热岛效应与人口老龄化叠加,使得高温健康防护问题尤为突出
\textbf{郑州市}是河南省省会(34.75°N, 113.62°E,总面积7,446 km$^2$2023年常住人口约1,274万,65岁及以上人口占比约11.6\%。郑州作为国家中心城市和全国重要的铁路、航空、电力枢纽,2021年城镇化率约78.4\%,城市热岛效应(Urban Heat Island, UHI)显著——城区与郊区温差可达3-5°C
两市同属暖温带大陆性季风气候,年平均气温14-15°C,7月平均气温27-28°C,极端最高气温超过42°C。两市地理邻近(相距约70 km),气象条件相似但城市规模和人口结构差异明显,形成了有价值的对比研究场景。
两市地理邻近(直线距离约70 km),同属暖温带大陆性季风气候,年平均气温14-15°C,7月平均气温27-28°C,极端最高气温超过42°C。气象条件相似但城市规模和人口结构差异明显(郑州人口约为焦作的3.6倍,但老龄化率略低),形成了有价值的对比研究场景。
\section{国内外研究现状}
\subsection{高温-健康关联的流行病学研究}
温度死亡率的暴露-反应关系是环境流行病学的经典议题。Gasparrini等(2015\textit{The Lancet}发表的多国多城市研究涵盖13个国家384个城市)是里程碑式成果,发现温度-死亡关联通常呈J型或V型曲线,最适温度(Minimum Mortality Temperature, MMT)因地理位置而异,高温端的相对风险(Relative Risk, RR)显著升高。Chen等(2018)在\textit{The Lancet Planetary Health}发表了中国272个城市的研究,为中国人群提供了本土化的温度-死亡暴露-反应曲线,发现在中国北方城市高温效应更为显著
温度-死亡暴露-反应关系的定量研究是环境流行病学的核心议题。Curriero等(2002)基于美国11个城市数据首次系统报告了温度-死亡J型曲线。Gasparrini等\cite{gasparrini2015mortality}\textit{The Lancet}发表的具有里程碑意义的多国多城市研究涵盖13个国家384个城市共计7,400万死亡记录,使用分布滞后非线性模型(DLNM)统一分析框架,发现最适温度(Minimum Mortality Temperature, MMT)因地理位置而异——北欧城市MMT约18°C,南欧约24°C,东亚约25°C——高温端(99百分位 vs MMT)的累积相对风险在1.2-1.8之间
Chen等\cite{chen2018heat}\textit{The Lancet Planetary Health}发表了迄今为止中国最大规模的温度-死亡多城市研究,覆盖272个城市2013-2015年间的1,800万死亡记录,发现中国人群总死亡风险的最适温度约为22.8°C,极端高温(99百分位 vs MMT)对应的相对风险为1.2195\% CI: 1.15-1.28),且在中国北方城市高温效应更为显著。心血管死亡的RR为1.35(1.27-1.44),呼吸系统死亡的RR为1.261.10-1.44)。
\subsection{高温健康预警系统(HHWS}
国际上,法国在2003年热浪导致约15,000人超额死亡后建立了国家高温健康预警计划(Plan Canicule),采用三色预警体系。美国NOAA开发了HeatRisk原型系统,综合考虑温度、湿度和人口脆弱性。世界卫生组织(WHO)和世界气象组织(WMO)联合发布了HHWS技术指南。
高温健康预警系统(Heat Health Warning System, HHWS)起源于对极端高温事件的公共卫生响应。国际上代表性的HHWS包括:
国内方面,中国气象局建立了高温预警信号体系(黄色、橙色、红色三级),基于日最高气温阈值。上海、深圳等城市开展了高温健康预警试点,初步将健康终点数据纳入预警逻辑。但总体而言,国内HHWS仍以气象指标为主,缺乏对脆弱人群的精细化评估和多时间尺度的前瞻性预测能力。
\begin{table}[H]
\centering
\caption{国际主要高温健康预警系统对比}
\begin{tabular}{p{2cm}p{3.5cm}p{3.5cm}p{3.5cm}}
\toprule
\textbf{国家/地区} & \textbf{系统名称} & \textbf{预警指标} & \textbf{分级体系} \\
\midrule
法国 & Plan Canicule & 日最低+最高气温的生物气象指标 & 四级(绿/黄/橙/红) \\
美国 & NOAA HeatRisk & 气温+湿度+持续天数+人口脆弱性 & 五级(0-4 \\
英国 & Heat-Health Watch & 日最高气温阈值 & 五级(0-4 \\
加拿大 & Heat Alert and Response System & 体感温度(Humidex & 三级 \\
日本 & 热中症警戒警报 & WBGT(湿球黑球温度) & 三级 \\
中国 & 高温预警信号 & 日最高气温 & 三级(黄/橙/红) \\
\bottomrule
\end{tabular}
\end{table}
\subsection{深度学习在环境健康预测中的应用}
\subsection{机器学习在环境健康预测中的应用}
传统时间序列预测方法(ARIMA、指数平滑、VAR)受限于线性和平稳性假设,难以应对气象-健康关联中的非线性效应。随着深度学习发展,LSTMHochreiter \& Schmidhuber, 1997)等循环神经网络在气象时序预测中展现出优势。注意力机制(Vaswani等, 2017)进一步增强了模型对长距离时序依赖的捕捉能力。
传统时预测方法(ARIMA、SARIMA、指数平滑、VAR)受限于线性假设和平稳性要求,难以捕捉气象-健康关联中的非线性效应。近年来,深度学习在该领域取得了显著进展:
在环境健康领域,将深度学习应用于高温健康风险预测的研究尚处于起步阶段。现有工作多聚焦于单一时间尺度的预测,且较少针对银发群体进行特定建模
\textbf{循环神经网络方面}LSTM\cite{hochreiter1997lstm}通过门控机制缓解了梯度消失问题,在气象时序预测中广泛使用。BiLSTM通过双向编码增强了上下文感知能力。Stacked LSTM(多层堆叠)进一步提升了特征抽取的层次性
\textbf{注意力机制方面}Vaswani等\cite{vaswani2017attention}提出的Transformer架构以自注意力替代循环结构,在NLP和CV领域取得了突破性进展。InformerZhou等, 2021)通过ProbSparse自注意力和自注意力蒸馏降低了长序列预测的计算复杂度。Autoformer(Wu等, 2021)引入自相关机制替代自注意力,专为季节-趋势分解设计。
\textbf{梯度提升方面}XGBoost\cite{chen2016xgboost}通过二阶泰勒展开、正则化目标和并行计算在表格数据上取得了SOTA性能。LightGBMKe等, 2017)引入GOSS和EFB进一步提升了训练效率。CatBoostProkhorenkova等, 2018)对类别特征的原生支持降低了预处理成本。
\textbf{环境健康应用方面}:将深度学习方法应用于高温健康风险预测的研究仍处于起步阶段。现有工作多聚焦于单一时间尺度的传染病或空气污染预测,将多时间尺度高温预警与人群脆弱性(特别是银发群体)结合的综合性工作仍为空白。本研究正是针对这一空白,探索深度学习模型(LSTM-Attention)和梯度提升模型(XGBoost)在面向银发群体的多时间尺度高温健康风险预警中的适用性。
\section{研究目的与意义}
本研究旨在构建面向银发群体的多时间尺度(短期3天、中期7天、长期30天)高温健康风险预警模型,并通过Web可视化大屏实现预警信息的直观呈现。
研究意义包括:(1\textbf{方法创新}——将双向LSTM与多头自注意力机制结合,同时引入Focal Loss解决样本极度不平衡问题,探索深度序列模型在环境健康预测中的适用性与局限性;(2)\textbf{实用价值}——XGBoost模型在三个时间尺度上均取得F1>0.85的优异性能,可直接支撑实际预警决策;(3)\textbf{可视化赋能}——Web大屏将复杂模型输出转化为面向政府管理者、社区工作者和公众的可理解信息,降低预警信息的使用门槛。
研究的科学意义和实用价值包括:
\begin{enumerate}
\item \textbf{方法探索}——系统比较深度学习(LSTM-Attention)与梯度提升(XGBoost)在极度类别不平衡条件下的性能差异,为环境健康预测领域的建模选择提供实证参考。
\item \textbf{多时间尺度覆盖}——区别于已有研究多聚焦单一预测窗口,本研究同时覆盖短期(操作性预警)、中期(资源调配)和长期(季节性规划)三个决策时间尺度。
\item \textbf{可视化赋能}——将复杂的模型输出转化为面向多层次用户(政府管理者、社区工作者、公众)的可理解信息,降低数据驱动决策的使用门槛。
\item \textbf{区域针对性}——以中原地区两市为研究靶区,填补该区域面向银发群体的高温健康预警研究空白。
\end{enumerate}
\section{研究内容与技术路线}
本研究的工作流程为:数据获取→预处理与特征工程→模型训练与评估→可视化系统构建。具体内容如下
本研究的工作流程分为五个阶段
\begin{enumerate}
\item \textbf{多源数据获取}:通过CDS API获取2010-2024年ERA5-Land网格气象数据(2m温度、2m露点温度、地表气压、10m风速U/V分量、总降水量共6变量),结合中国卫生统计年鉴数据构建人口健康基线
\item \textbf{数据预处理与特征工程}6小时间隔数据聚合为日尺度→K至°C单位转换→Magnus公式计算相对湿度→NOAA Rothfusz公式计算体感温度→构建19维衍生特征(滚动均值、滞后特征、热浪检测、季节编码)。
\item \textbf{多时间尺度预警模型}:设计LSTM-Attention深度学习模型(983,628参数)和XGBoost基线模型,分别预测短期(3天)、中期(7天)和长期(30天)高温健康风险等级(0-低、1-中、2-高、3-严重)
\item \textbf{模型评估与对比}:在时间序列分割的测试集(2023-2024年数据,164,365条样本)上系统对比两种模型的性能
\item \textbf{可视化大屏开发}基于Flask后端ECharts前端,实现六大功能面板的Web可视化大屏
\item \textbf{数据获取阶段}:通过CDS API逐月下载2010-2024年焦作、郑州两市的ERA5-Land网格气象数据(6变量),使用h5netcdf+dask引擎进行NetCDF4文件的拼接与读取
\item \textbf{预处理与特征工程阶段}6小时间隔→日聚合→K至°C转换→Magnus公式计算相对湿度→NOAA Rothfusz公式计算体感温度→构建19维衍生特征(滚动均值、滞后特征、热浪检测)。
\item \textbf{数据集构建阶段}14天滑动窗口→1,095,758条序列样本→时间序列70/15/15分割→压缩NPZ存储
\item \textbf{模型训练与评估阶段}LSTM-Attention983K参数,Focal Loss)和XGBoost(200棵树)在训练集上训练→验证集调参→测试集评估→混淆矩阵和F1分数对比
\item \textbf{可视化系统开发阶段}Flask后端4 API)→ECharts前端6面板)→深色科技蓝大屏→浏览器访问
\end{enumerate}
\section{论文组织结构}
本论文共分七章:第一章阐述研究背景、国内外现状研究意义;第二章介绍LSTM、注意力机制、XGBoost等核心理论以及高温健康风险相关概念;第三章详述数据来源和预处理管线,包括ERA5数据获取、体感温度计算、特征工程和数据集构建;第四章介绍LSTM-Attention和XGBoost两类预警模型的设计细节;第五章展示Flask+ECharts可视化大屏的架构和实现;第六章进行实验结果分析,包括模型性能对比、混淆矩阵分析LSTM训练优化记录;第七章总结全文并展望未来工作。
本论文共分七章:\textbf{第一章}阐述研究背景、国内外研究现状研究目的和技术路线;\textbf{第二章}详细介绍LSTM、注意力机制、XGBoost和体感温度计算等核心理论,给出完整数学公式;\textbf{第三章}详述ERA5数据获取、预处理管线、特征工程和数据集构建过程;\textbf{第四章}展示LSTM-Attention和XGBoost两类预警模型的设计细节和训练策略;\textbf{第五章}介绍Flask+ECharts可视化大屏的架构和实现;\textbf{第六章}进行实验结果分析,包括模型性能对比、混淆矩阵分析LSTM训练调优记录和细节性误差分析;\textbf{第七章}总结全文,讨论研究不足并展望未来工作方向
+187 -64
View File
@@ -1,25 +1,62 @@
\chapter{相关理论与技术基础}
\section{LSTM神经网络}
本章系统阐述研究涉及的核心理论与技术,包括循环神经网络的数学基础、LSTM与BiLSTM的原理、注意力机制的完整推导、XGBoost算法细节、体感温度计算方法以及Focal Loss的理论分析。
长短期记忆网络(Long Short-Term Memory, LSTM)由Hochreiter和Schmidhuber于1997年提出,是循环神经网络(RNN)的重要变体。传统RNN在处理长序列时因梯度消失/爆炸问题难以学习远距离依赖,LSTM通过引入门控机制有效解决了这一问题。
\section{循环神经网络与长短期记忆}
\subsection{循环神经网络(RNN}
循环神经网络(Recurrent Neural Network, RNN)是处理序列数据的经典深度学习架构。给定输入序列$\{\mathbf{x}_1, \mathbf{x}_2, \dots, \mathbf{x}_T\}$RNN在每个时间步$t$计算隐藏状态$\mathbf{h}_t$
\begin{equation}
\mathbf{h}_t = \sigma(\mathbf{W}_{xh}\mathbf{x}_t + \mathbf{W}_{hh}\mathbf{h}_{t-1} + \mathbf{b}_h)
\end{equation}
\begin{equation}
\mathbf{y}_t = \mathbf{W}_{hy}\mathbf{h}_t + \mathbf{b}_y
\end{equation}
其中$\mathbf{W}_{xh}$$\mathbf{W}_{hh}$$\mathbf{W}_{hy}$为权重矩阵,$\mathbf{b}_h$$\mathbf{b}_y$为偏置,$\sigma$为非线性激活函数(通常为tanh或ReLU)。
\subsection{梯度消失与梯度爆炸}
RNN通过时间反向传播(Backpropagation Through Time, BPTT)进行训练。对于长度为$T$的序列,损失函数$\mathcal{L}$对参数$\mathbf{W}_{hh}$的梯度为:
\begin{equation}
\frac{\partial \mathcal{L}}{\partial \mathbf{W}_{hh}} = \sum_{t=1}^{T} \frac{\partial \mathcal{L}_t}{\partial \mathbf{W}_{hh}}
\end{equation}
\begin{equation}
\frac{\partial \mathcal{L}_t}{\partial \mathbf{W}_{hh}} = \sum_{k=1}^{t} \frac{\partial \mathcal{L}_t}{\partial \mathbf{h}_t} \cdot \frac{\partial \mathbf{h}_t}{\partial \mathbf{h}_k} \cdot \frac{\partial \mathbf{h}_k}{\partial \mathbf{W}_{hh}}
\end{equation}
其中雅可比矩阵的连乘$\frac{\partial \mathbf{h}_t}{\partial \mathbf{h}_k} = \prod_{j=k+1}^{t} \frac{\partial \mathbf{h}_j}{\partial \mathbf{h}_{j-1}}$。若雅可比矩阵的谱半径$\rho < 1$,连乘后梯度指数衰减至零(梯度消失);若$\rho > 1$,则梯度指数膨胀(梯度爆炸)。梯度消失使RNN难以学习长距离依赖,这正是LSTM的提出动机。
\subsection{LSTM单元结构}
LSTM单元的核心是一个细胞状态(cell state$\mathbf{C}_t$,贯穿整个序列的信息传递通道,由三个门控结构(遗忘门、输入门、输出门)进行调控:
长短期记忆网络(LSTM)由Hochreiter和Schmidhuber\cite{hochreiter1997lstm}提出,通过引入细胞状态(Cell State$\mathbf{C}_t$和三个门控结构,有效解决了RNN的梯度消失问题。
\textbf{遗忘门(Forget Gate}控制前一时刻细胞状态的保留比例:
\begin{equation}
\mathbf{f}_t = \sigma(\mathbf{W}_f \cdot [\mathbf{h}_{t-1}, \mathbf{x}_t] + \mathbf{b}_f)
\end{equation}
\textbf{输入门(Input Gate}决定当前输入信息中有多少写入细胞状态:
\begin{equation}
\mathbf{i}_t = \sigma(\mathbf{W}_i \cdot [\mathbf{h}_{t-1}, \mathbf{x}_t] + \mathbf{b}_i)
\end{equation}
\begin{equation}
\tilde{\mathbf{C}}_t = \tanh(\mathbf{W}_C \cdot [\mathbf{h}_{t-1}, \mathbf{x}_t] + \mathbf{b}_C)
\end{equation}
\textbf{细胞状态更新}
\begin{equation}
\mathbf{C}_t = \mathbf{f}_t \odot \mathbf{C}_{t-1} + \mathbf{i}_t \odot \tilde{\mathbf{C}}_t
\end{equation}
\textbf{输出门(Output Gate}调节细胞状态对当前隐藏状态的贡献:
\begin{equation}
\mathbf{o}_t = \sigma(\mathbf{W}_o \cdot [\mathbf{h}_{t-1}, \mathbf{x}_t] + \mathbf{b}_o)
\end{equation}
@@ -27,11 +64,11 @@ LSTM单元的核心是一个细胞状态(cell state$\mathbf{C}_t$,贯穿
\mathbf{h}_t = \mathbf{o}_t \odot \tanh(\mathbf{C}_t)
\end{equation}
其中$\sigma$为sigmoid激活函数,$\odot$为逐元素乘积$\mathbf{f}_t$$\mathbf{i}_t$$\mathbf{o}_t$分别为遗忘门、输入门和输出门的激活向量,$\tilde{\mathbf{C}}_t$为候选细胞状态。遗忘门控制前一时刻细胞状态的保留比例,输入门决定新信息的写入量,输出门调节细胞状态对隐藏状态的贡献
其中$\sigma(\cdot)$为sigmoid函数,$\odot$为逐元素乘积Hadamard积)。遗忘门的sigmoid输出范围(0,1)允许网络自适应地决定信息保留程度,这是LSTM缓解梯度消失的关键——当$\mathbf{f}_t \approx 1$时,梯度可通过细胞状态近乎无损地回传
\subsection{双向LSTM}
\subsection{双向LSTMBiLSTM}
双向LSTMBidirectional LSTM, BiLSTM由前向LSTM和后向LSTM组成,分别从序列的正向和反向读取输入:
双向LSTM由前向LSTM和后向LSTM组成,分别从序列的正向和反向处理输入:
\begin{equation}
\overrightarrow{\mathbf{h}}_t = \text{LSTM}_{\text{fwd}}(\mathbf{x}_t, \overrightarrow{\mathbf{h}}_{t-1})
@@ -43,141 +80,227 @@ LSTM单元的核心是一个细胞状态(cell state$\mathbf{C}_t$,贯穿
\mathbf{h}_t^{\text{bi}} = [\overrightarrow{\mathbf{h}}_t; \overleftarrow{\mathbf{h}}_t]
\end{equation}
BiLSTM在每个时间步同时利用过去和未来的上下文信息,在气象时序预测中特别有用——某一天的温度既受前期天气积累影响,也与后续天气系统演变有关。
在气象时序预测中,BiLSTM的优势在于每个时间步的表示同时融合了前后文信息——某一天的温度既受前期天气累积影响(前向),也与即将到来的天气系统演变有关(后向)
\section{注意力机制}
注意力机制(Attention Mechanism)由Bahdanau等(2014)首次引入序列到序列学习,其核心思想是动态地为输入序列的不同位置分配不同的重要性权重。Vaswani等(2017)提出的Transformer架构将注意力机制推向了新的高度。
\subsection{注意力机制的起源}
注意力机制的核心思想源于人类视觉系统中的选择性注意——在面对大量信息时,大脑会自动筛选出对当前任务最重要的部分进行深度加工。Bahdanau等(2014)首次将注意力机制引入神经机器翻译,允许解码器在每个解码步动态地关注编码器输出的不同位置,解决了固定长度上下文向量的信息瓶颈。
Vaswani等(2017)提出的Transformer架构完全基于注意力机制,舍弃了循环和卷积结构,在WMT翻译、BERT预训练和GPT生成等任务上取得了突破性进展。
\subsection{缩放点积注意力}
缩放点积注意力(Scaled Dot-Product Attention)是多头注意力的基础计算单元:
缩放点积注意力(Scaled Dot-Product Attention)是注意力的基础计算单元:
\begin{equation}
\text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}\left(\frac{\mathbf{Q}\mathbf{K}^T}{\sqrt{d_k}}\right)\mathbf{V}
\end{equation}
其中$\mathbf{Q}$Query)、$\mathbf{K}$Key)、$\mathbf{V}$Value)分别为查询、键和值矩阵,$d_k$键向量的维度。除以$\sqrt{d_k}$的作用是防止点积值过大导致softmax梯度弥散
其中$\mathbf{Q} \in \mathbb{R}^{n \times d_k}$Query)、$\mathbf{K} \in \mathbb{R}^{n \times d_k}$Key)、$\mathbf{V} \in \mathbb{R}^{n \times d_v}$Value)分别为查询、键和值矩阵,$n$序列长度,$d_k$为键向量维度
除以$\sqrt{d_k}$的缩放操作是关键的工程实践——当$d_k$较大时,点积$\mathbf{Q}\mathbf{K}^T$的元素值可能很大,导致softmax落入梯度极小的饱和区。缩放使点积的方差稳定在1,加速训练收敛。
\subsection{多头自注意力}
多头自注意力Multi-Head Self-Attention)将$\mathbf{Q}$$\mathbf{K}$$\mathbf{V}$分别通过$h$不同的线性投影映射到多个子空间,在每个子空间中独立计算注意力
多头自注意力将Query、Key、Value分别通过$h$独立的线性投影映射到不同的表示子空间
\begin{equation}
\text{head}_i = \text{Attention}(\mathbf{Q}\mathbf{W}_i^Q, \mathbf{K}\mathbf{W}_i^K, \mathbf{V}\mathbf{W}_i^V)
\text{head}_i = \text{Attention}(\mathbf{Q}\mathbf{W}_i^Q, \mathbf{K}\mathbf{W}_i^K, \mathbf{V}\mathbf{W}_i^V), \quad i = 1, 2, \dots, h
\end{equation}
\begin{equation}
\text{MultiHead}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{Concat}(\text{head}_1, \dots, \text{head}_h)\mathbf{W}^O
\end{equation}
在自注意力中,$\mathbf{Q} = \mathbf{K} = \mathbf{V} = \mathbf{X}$(输入序列)。每个注意力头可以从不同的表示子空间中关注序列的不同方面,例如某些头可能专注于温度的急剧变化,另一些头可能捕捉长期趋势
其中$\mathbf{W}_i^Q \in \mathbb{R}^{d_{\text{model}} \times d_k}$$\mathbf{W}_i^K \in \mathbb{R}^{d_{\text{model}} \times d_k}$$\mathbf{W}_i^V \in \mathbb{R}^{d_{\text{model}} \times d_v}$$\mathbf{W}^O \in \mathbb{R}^{h d_v \times d_{\text{model}}}$为可学习参数。取$d_k = d_v = d_{\text{model}} / h$以控制每个头的计算量
在自注意力中,$\mathbf{Q} = \mathbf{K} = \mathbf{V} = \mathbf{X}$,即序列中每个位置同时作为查询、键和值。每个注意力头可以从不同的子空间关注序列的不同方面——某些头可能专注于温度的短期突变,某些头可能捕捉长期趋势,某些头可能关注体感温度的异常值。
\subsection{注意力权重分析}
注意力权重矩阵$\mathbf{A} \in \mathbb{R}^{n \times n}$提供了模型决策的可解释性:
\begin{equation}
A_{ij} = \text{softmax}\left(\frac{\mathbf{Q}_i \cdot \mathbf{K}_j}{\sqrt{d_k}}\right)
\end{equation}
$A_{ij}$表示第$i$个时间步对第$j$个时间步的关注程度。在高温预警任务中,这一矩阵可被可视化以揭示模型预测高风险事件时所依赖的关键时间步,为模型的可信度和决策透明度提供支持。
\section{XGBoost算法}
XGBoosteXtreme Gradient Boosting)由Chen和Guestrin于2016年提出,是梯度提升决策树(GBDT)的高效实现。其核心优势包括:
\subsection{梯度提升框架}
\textbf{正则化目标函数:}XGBoost在目标函数中引入了正则项以控制模型复杂度
XGBoosteXtreme Gradient Boosting)由Chen和Guestrin于2016年提出,是梯度提升决策树(GBDT)的高效实现。给定训练集$\{(\mathbf{x}_i, y_i)\}_{i=1}^n$,梯度提升以加法模型方式逐步集成$K$棵决策树
\begin{equation}
\mathcal{L}(\phi) = \sum_i l(\hat{y}_i, y_i) + \sum_k \Omega(f_k)
\end{equation}
\begin{equation}
\Omega(f) = \gamma T + \frac{1}{2}\lambda \|\mathbf{w}\|^2
\hat{y}_i = \phi(\mathbf{x}_i) = \sum_{k=1}^{K} f_k(\mathbf{x}_i), \quad f_k \in \mathcal{F}
\end{equation}
其中$T$为叶节点数量,$\mathbf{w}$为叶节点权重,$\gamma$$\lambda$为正则化系数
其中$\mathcal{F} = \{f(\mathbf{x}) = w_{q(\mathbf{x})}\}$是回归树函数空间($q$将输入映射到叶节点索引,$w$为叶节点权重向量)
\textbf{二阶泰勒展开:}使用损失函数的二阶展开近似进行树的分裂增益计算,比传统GBDT的一阶近似更精确:
\subsection{正则化目标函数}
$t$轮迭代的目标函数为:
\begin{equation}
\text{Gain} = \frac{1}{2}\left[\frac{(\sum_{i\in I_L} g_i)^2}{\sum_{i\in I_L} h_i + \lambda} + \frac{(\sum_{i\in I_R} g_i)^2}{\sum_{i\in I_R} h_i + \lambda} - \frac{(\sum_{i\in I} g_i)^2}{\sum_{i\in I} h_i + \lambda}\right] - \gamma
\mathcal{L}^{(t)} = \sum_{i=1}^{n} l(y_i, \hat{y}_i^{(t-1)} + f_t(\mathbf{x}_i)) + \Omega(f_t)
\end{equation}
其中$g_i$$h_i$分别为损失函数的一阶和二阶梯度。
使用二阶泰勒展开近似:
\textbf{并行化与特征采样:}XGBoost支持特征级别的并行计算(按特征值排序)和列采样(类似随机森林),在大规模数据集上具有显著的效率优势。
\begin{equation}
\mathcal{L}^{(t)} \simeq \sum_{i=1}^{n} \left[l(y_i, \hat{y}^{(t-1)}) + g_i f_t(\mathbf{x}_i) + \frac{1}{2} h_i f_t^2(\mathbf{x}_i)\right] + \Omega(f_t)
\end{equation}
其中$g_i = \partial_{\hat{y}^{(t-1)}} l(y_i, \hat{y}^{(t-1)})$为一阶梯度,$h_i = \partial^2_{\hat{y}^{(t-1)}} l(y_i, \hat{y}^{(t-1)})$为二阶梯度。移除常数项后:
\begin{equation}
\tilde{\mathcal{L}}^{(t)} = \sum_{i=1}^{n} \left[g_i f_t(\mathbf{x}_i) + \frac{1}{2} h_i f_t^2(\mathbf{x}_i)\right] + \gamma T + \frac{1}{2}\lambda \sum_{j=1}^{T} w_j^2
\end{equation}
其中$T$为叶节点数,$\gamma$$\lambda$为正则化系数。
\subsection{节点分裂增益}
定义叶节点$j$的样本集合为$I_j = \{i \mid q(\mathbf{x}_i) = j\}$,则最优叶节点权重和对应的最小损失为:
\begin{equation}
w_j^* = -\frac{\sum_{i \in I_j} g_i}{\sum_{i \in I_j} h_i + \lambda}
\end{equation}
\begin{equation}
\tilde{\mathcal{L}}^{(t)}(q) = -\frac{1}{2} \sum_{j=1}^{T} \frac{(\sum_{i \in I_j} g_i)^2}{\sum_{i \in I_j} h_i + \lambda} + \gamma T
\end{equation}
节点分裂的增益为:
\begin{equation}
\text{Gain} = \frac{1}{2}\left[\frac{G_L^2}{H_L + \lambda} + \frac{G_R^2}{H_R + \lambda} - \frac{(G_L + G_R)^2}{H_L + H_R + \lambda}\right] - \gamma
\end{equation}
其中$G_L = \sum_{i \in I_L} g_i$$H_L = \sum_{i \in I_L} h_i$。XGBoost遍历所有候选分裂点,选择使Gain最大的分裂。Gain为负时停止分裂,实现自动剪枝。
\section{体感温度计算方法}
体感温度是高温健康风险评估的核心指标。单纯的空气温度不能完全反映人体对热环境的感知,湿度、风速和辐射等因素同样影响体感温度。本研究采用以下两种经典公式:
\subsection{Magnus公式——相对湿度}
\subsection{Magnus公式——相对湿度计算}
从ERA5-Land获取的2m温度($T$)和2m露点温度($T_d$)出发,使用Magnus公式计算相对湿度:
从ERA5-Land获取的2m温度($T$, °C)和2m露点温度($T_d$, °C)出发,使用Magnus公式计算相对湿度
饱和水汽压(hPa):
\begin{equation}
e_s(T) = \exp\left(\frac{17.27 \cdot T}{237.7 + T}\right)
\end{equation}
\begin{equation}
e_a(T_d) = \exp\left(\frac{17.27 \cdot T_d}{237.7 + T_d}\right)
\end{equation}
\begin{equation}
RH = 100 \times \frac{e_a(T_d)}{e_s(T)} = 100 \times \exp\left(\frac{17.27 \cdot T_d}{237.7 + T_d} - \frac{17.27 \cdot T}{237.7 + T}\right)
e_s(T) = 6.112 \times \exp\left(\frac{17.67 \times T}{T + 243.5}\right)
\end{equation}
其中$e_s$为饱和水汽压(hPa),$e_a$为实际水汽压(hPa),$RH$为相对湿度(\%),温度单位为°C。
实际水汽压(hPa):
\begin{equation}
e_a(T_d) = 6.112 \times \exp\left(\frac{17.67 \times T_d}{T_d + 243.5}\right)
\end{equation}
相对湿度(\%):
\begin{equation}
RH = 100 \times \frac{e_a}{e_s}
\end{equation}
\subsection{NOAA Rothfusz公式——体感温度}
美国国家海洋和大气管理局(NOAA)提出的Rothfusz回归公式是体感温度(Heat Index, HI)计算的标准方法。以华氏度为计算单位,最终转换回摄氏度:
体感温度(Heat Index, HI)由NOAA的Rothfusz回归公式计算。首先将温度转换为华氏度:$T_F = T_C \times 1.8 + 32$
简化公式($T_F \leq 80$°F):
\begin{equation}
T_F = T_C \times 1.8 + 32
HI_F = 0.5 \times \left[T_F + 61.0 + (T_F - 68.0) \times 1.2 + RH \times 0.094\right]
\end{equation}
$T_F < 80$°F(约26.7°C)时,使用简化公式
\begin{equation}
HI_F = 0.5 \times [T_F + 61.0 + (T_F - 68.0) \times 1.2 + RH \times 0.094]
\end{equation}
$T_F \geq 80$°F时,使用完整Rothfusz回归:
完整Rothfusz回归($T_F > 80$°F
\begin{equation}
\begin{aligned}
HI_F &= -42.379 + 2.04901523 \times T_F + 10.14333127 \times RH \\
&- 0.22475541 \times T_F \times RH - 6.83783 \times 10^{-3} \times T_F^2 \\
&- 5.481717 \times 10^{-2} \times RH^2 + 1.22874 \times 10^{-3} \times T_F^2 \times RH \\
&+ 8.5282 \times 10^{-4} \times T_F \times RH^2 - 1.99 \times 10^{-6} \times T_F^2 \times RH^2
HI_F = &-42.379 + 2.04901523 \times T_F + 10.14333127 \times RH \\
&- 0.22475541 \times T_F \times RH - 0.00683783 \times T_F^2 \\
&- 0.05481717 \times RH^2 + 0.00122874 \times T_F^2 \times RH \\
&+ 0.00085282 \times T_F \times RH^2 - 0.00000199 \times T_F^2 \times RH^2
\end{aligned}
\end{equation}
随后进行NOAA标准修正(RH<13\%且80°F<T<112°F时调整),最终转回摄氏度
NOAA标准修正(RH < 13\%且80°F < T < 112°F时)
\begin{equation}
HI_C = (HI_F - 32) / 1.8
\text{Adjustment} = \left(\frac{13 - RH}{4}\right) \times \sqrt{\frac{17 - |T_F - 95|}{17}}
\end{equation}
最终转回摄氏温度:$HI_C = (HI_F - 32) / 1.8$
\textbf{物理学含义:}体感温度考虑了高湿度环境对汗液蒸发的抑制效应。在相对湿度50\%以上时,汗液蒸发效率下降,人体通过出汗散热的机制受阻,导致体感温度显著高于实际气温。这一效应在高温高湿的夏季尤为突出,是高温健康风险评估中将气象数据转化为生理意义指标的关键步骤。
\section{高温健康风险等级划分}
参考世界气象组织(WMO)和中国气象局的高温预警标准,结合老年人群体的生理特征,本研究定义四级高温健康风险等级:
参考WMO和WHO的高温健康预警标准,结合NOAA体感温度阈值和中国老年人的生理特征,本研究定义四级风险等级:
\begin{table}[H]
\centering
\caption{高温健康风险等级划分标准}
\begin{tabular}{cccc}
\begin{tabular}{cccp{5cm}}
\toprule
\textbf{风险等级} & \textbf{标签} & \textbf{体感温度阈值} & \textbf{对应措施} \\
\textbf{风险等级} & \textbf{标签} & \textbf{体感温度(°C} & \textbf{公共卫生建议} \\
\midrule
低风险0级 && HI < 32°C & 正常户外活动,注意补水 \\
中风险1级 && 32°C ≤ HI < 35°C & 减少午后户外活动,保持室内通风 \\
高风险2级 && 35°C ≤ HI < 38°C & 避免户外活动,开启降温设备 \\
严重风险3级) & 严重 & HI ≥ 38°C & 停止一切户外活动,社区入户巡查 \\
0级(低风险) && HI < 32 & 正常户外活动,注意饮水和休息 \\
1级(中风险) && 32 ≤ HI < 35 & 减少午后户外活动,保持室内通风 \\
2级(高风险) && 35 ≤ HI < 38 & 避免户外活动,开启空调/风扇降温 \\
3级(严重风险& 严重 & HI ≥ 38 & 停止一切户外活动,社区入户巡查高危老人 \\
\bottomrule
\end{tabular}
\end{table}
32°C阈值对应NOAA定义的"Exercise Caution"水平;35°C对应"Extreme Caution"38°C对应"Danger"水平,在此水平下持续暴露可能导致热痉挛、热衰竭甚至热射病。
\section{Focal Loss损失函数}
在高温健康风险预测中,极端风险事件(高风险和严重风险)的发生频率远低于正常天气条件(低风险),导致严重的类别不平衡问题。传统交叉熵损失在此场景下会使模型偏向预测多数类。
\subsection{交叉熵损失的局限性}
Focal Loss由Lin等(2017)在目标检测领域提出,通过调制因子降低易分类样本的损失贡献,迫使模型聚焦于困难样本
标准多分类交叉熵损失定义为
\begin{equation}
\text{FL}(p_t) = -\alpha (1 - p_t)^\gamma \log(p_t)
\text{CE}(p_t) = -\log(p_t)
\end{equation}
其中$p_t$为模型对正确类别的预测概率$\alpha$为类别平衡因子,$\gamma$为聚焦参数。当$\gamma=0$时退化为加权交叉熵损失$\gamma>0$时,对已正确分类的高置信度样本($p_t$接近1)施加更大的衰减,从而将梯度信号集中于难分类的样本。本研究采用$\alpha=0.5, \gamma=2.0$作为默认参数
其中$p_t$为模型对正确类别的预测概率。当类别极度不平衡时(如本研究低风险类占96.6\%),模型通过始终预测多数类即可获得低损失$\text{CE}(0.96) \approx 0.041$。虽然损失数值上很低,但模型在少数类(高风险事件)上的预测能力几乎为零
\subsection{Focal Loss的调制机制}
Focal Loss由Lin等(2017)在目标检测领域提出,通过引入调制因子降低已正确分类样本的损失贡献:
\begin{equation}
\text{FL}(p_t) = -\alpha_t (1 - p_t)^\gamma \log(p_t)
\end{equation}
其中$\alpha_t$为类别平衡因子,$\gamma \geq 0$为聚焦参数。调制因子$(1 - p_t)^\gamma$的作用:
\begin{itemize}
\item$p_t \to 1$(易分类样本):$(1 - p_t)^\gamma \to 0$,损失被大幅衰减
\item$p_t \to 0$(难分类样本):$(1 - p_t)^\gamma \to 1$,损失几乎不变
\end{itemize}
$\gamma$控制衰减速率:$\gamma=0$退化为加权交叉熵;$\gamma=2$时,预测概率为0.9的样本的损失衰减100倍($(0.1)^2$),而预测概率为0.1的难样本则保持原始损失的81\%$(0.9)^2$)。
\subsection{Focal Loss的梯度分析}
对logits $\mathbf{z}$的梯度为:
\begin{equation}
\frac{\partial \text{FL}}{\partial z_k} = \alpha_t \cdot (1 - p_t)^\gamma \cdot \left[\gamma \cdot p_t \cdot \log(p_t) + (1 - p_t)\right] \cdot (p_k - \mathbb{1}[k = y])
\end{equation}
与交叉熵的梯度$\frac{\partial \text{CE}}{\partial z_k} = p_k - \mathbb{1}[k = y]$相比,Focal Loss对每个样本的梯度贡献由$(1-p_t)^\gamma$加权。在极度不平衡数据上,大量简单负样本(多数类,$p_t \approx 1$)的梯度贡献被抑制,使困难样本(少数类)的梯度在参数更新中占据主导地位。
\section{ERA5-Land数据同化系统}
ERA5-Land是ECMWF开发的全球陆地表面再分析数据集,是ERA5大气再分析的增强版本。核心特点包括:
\begin{itemize}
\item \textbf{4D-Var同化}:采用四维变分数据同化技术,将卫星观测、地面观测、无线电探空等多源观测数据与数值天气预报模型(IFS Cy41r2)的短期预报进行最优融合
\item \textbf{空间分辨率}:0.1°×0.1°(约9 km),相比ERA5的0.25°(约31 km)提升约3.5倍
\item \textbf{HTESSEL地表模型}:采用Tiled ECMWF Scheme for Surface Exchanges over Land,显式模拟植被、裸土、积雪等不同地表覆盖类型的水热交换
\item \textbf{时间覆盖}:1950年至今,逐小时输出(本研究使用6小时间隔的月平均存档)
\end{itemize}
ERA5-Land通过CDS API以NetCDF4格式分发。2024年CDS基础设施迁移至CDS-Betacds-beta.climate.copernicus.eu),数据格式从直接NetCDF变为ZIP封装的NetCDF。本研究通过ZIP解压预处理步骤适配了这一格式变更。
\section{Flask框架与ECharts可视化}
Flask是Python生态中最广泛使用的轻量级Web框架之一,遵循WSGI标准,以路由装饰器Jinja2模板引擎为核心特性。其\"微框架\"microframework)设计理念使得开发者可自由组合扩展组件。本研究使用Flask提供4个RESTful API端点(预测、历史、统计、主页),前后端通过JSON格式进行数据交换
ECharts是Apache基金会旗下的开源JavaScript可视化库(原为百度开发),支持折线图、柱状图、饼图、热力图、仪表盘等数十种图表类型。其声明式配置语法和丰富的交互特性(数据缩放、tooltip、图例切换)使其成为数据大屏开发的主流选择。本研究基于ECharts 5.5构建6个可视化面板。
Flask是Python生态中最广泛使用的轻量级Web框架WSGI微框架),核心特性包括路由装饰器Jinja2模板引擎和丰富的扩展生态。ECharts是Apache基金会旗下的声明式JavaScript可视化库,支持37种图表类型和丰富的交互组件。两者通过RESTful JSON API实现前后端解耦,是数据科学Web应用开发的成熟技术栈
+144 -99
View File
@@ -1,170 +1,215 @@
\chapter{数据获取与预处理}
本章详细描述从原始ERA5-Land再分析数据到机器学习就绪数据集的全流程管线,包括数据获取、质量控制、体感温度计算、特征工程和序列化构建
本章详细描述从原始ERA5-Land再分析数据到机器学习就绪数据集的全流程管线,包括数据获取架构、质量控制、体感温度计算、特征工程、探索性数据分析和序列化构建。全流程在Python 3.13环境下实现,核心依赖xarrayNetCDF处理)、h5netcdfHDF5后端)、dask(并行计算)和numpy/pandas(数据处理)
\section{研究区域与数据时空范围}
本研究选取焦作市(35.24°N, 113.22°E)和郑州市(34.75°N, 113.62°E)为研究区域,两市同属暖温带大陆性季风气候,夏季炎热特征显著。数据覆盖2010年1月1日至2024年12月31日共15年(180个月),时间分辨率为6小时(每日00:00、06:00、12:00、18:00 UTC
本研究选取焦作市(35.24°N, 113.22°E)和郑州市(34.75°N, 113.62°E)为研究区域。数据时间覆盖2010年1月1日至2024年12月31日共15年(180个月),取每城市坐标为中心±0.5°(约±55 km)的网格区域,该范围覆盖城区和近郊,兼顾城市热岛效应和乡村对照
ERA5-Land数据集的原始空间分辨率为0.1°×0.1°(约9 km),本研究以城市坐标为中心,截取±0.5°范围的网格区域(约11×11网格点),覆盖城区及近郊范围,兼顾城区热岛效应和郊区对照
ERA5-Land数据为NetCDF4格式(HDF5后端),每文件包含一个日历月的全部6小时时次数据(日均约124个时间步),6个气象变量对应5-6个二维(经度×纬度)数据阵列
\section{数据来源}
\section{数据获取架构}
\subsection{ERA5-Land气象再分析数据}
\subsection{CDS API下载策略}
ERA5-Land是欧洲中期天气预报中心(ECMWF)生产的全球陆地表面再分析数据集,是ERA5的增强版本,在陆地变量上具有更高的空间分辨率(0.1° vs 0.25°)。数据通过Copernicus Climate Data Store (CDS) API获取,使用cdsapi Python库(v0.7.7)逐月下载
通过Copernicus Climate Data Store (CDS) API逐月下载ERA5-Land数据。CDS请求以JSON格式指定数据集(reanalysis-era5-land)、变量列表、时空范围和输出格式(NetCDF)。每月请求覆盖该月的全部天数(1-31日)和全部4个时次(00:00、06:00、12:00、18:00 UTC
本研究获取以下6个气象变量:
受CDS服务器速率限制(单用户并发请求数限制为1-3个),本研究采用单线程逐月串行下载策略,配合指数退避重试机制(失败后等待$60 \times \text{attempt}$秒,最多5次)。单月数据下载耗时约2-30分钟(取决于CDS队列负载),两城市共360个文件的下载历时约5天。
\begin{table}[H]
\centering
\caption{ERA5-Land获取变量一览}
\begin{tabular}{cccc}
\toprule
\textbf{NetCDF变量名} & \textbf{中文名称} & \textbf{单位} & \textbf{原始时间分辨率} \\
\midrule
t2m & 2m气温 & K & 6小时 \\
d2m & 2m露点温度 & K & 6小时 \\
sp & 地表气压 & Pa & 6小时 \\
u10 & 10m风速U分量 & m/s & 6小时 \\
v10 & 10m风速V分量 & m/s & 6小时 \\
tp & 总降水量 & m & 6小时(累积) \\
\bottomrule
\end{tabular}
\end{table}
\subsection{数据格式适配}
每城市每月生成1个NetCDF文件,两城市共360个文件,数据总量约76 MB。经ZIP解压后得到标准NetCDF4格式,使用h5netcdf后端通过xarray库进行读取和拼接。每个文件包含约124个时间步(31天×4时次/天),单个城市15年拼接后共21,916个时间步
2024年CDS基础设施迁移后,返回的数据格式从直接NetCDF4变为ZIP封装的NetCDF(内嵌单文件\texttt{data\_0.nc})。研究开发了专用的ZIP解压脚本(\texttt{src/data/extract\_zips.py}),通过检查文件头魔数(PK$\rightarrow$ZIPCDF$\rightarrow$NetCDF)判断是否需要解压。360个文件约75MB的ZIP解压耗时不到1秒/文件
\subsection{人口与健康数据}
\subsection{NetCDF引擎兼容性}
人口数据来源于第七次全国人口普查公报(2020年)以及河南省统计年鉴,包括分年龄段人口结构(0-14岁、15-64岁、65岁及以上)、老龄化率等基础指标。暴露-反应关系参考Chen等(2018)发表的中国多城市温度-死亡关联曲线,构建了13点暴露-反应映射表(温度-相对风险)
NetCDF4文件需要HDF5兼容的读取引擎。最初采用的netcdf4-Python库在Windows环境下存在兼容性问题(需要额外安装HDF5 DLL)。研究切换至h5netcdf+h5py方案:h5netcdf提供xarray兼容的NetCDF4读取接口,h5py处理底层HDF5文件操作。多文件拼接采用dask延迟计算框架以支持内存高效的大规模数据操作
\section{数据预处理管线}
预处理管线包含8个顺序步骤,由Python脚本\texttt{src/data/preprocess.py}实现,自动遍历焦作和郑州两个城市。
预处理管线\texttt{src/data/preprocess.py}实现,包含8个顺序步骤,自动遍历两个城市。
\subsection{步骤1:多文件加载与拼接}
使用xarray的\texttt{open\_mfdataset}函数,以\texttt{by\_coords}模式沿valid\_time维度拼接同城市的所有月度NetCDF文件。拼接后按时间排序并去重,确保时间轴的连续性和单调性
使用xarray的\texttt{open\_mfdataset}函数,以\texttt{by\_coords}模式沿valid\_time维度拼接同城市的所有月文件。拼接后通过\texttt{sortby}确保时间维度的单调递增,并对重复时间索引取唯一值
\subsection{步骤2:日聚合与单位转换}
将6小时间隔数据按valid\_time重采样为日平均值,并执行单位转换
将6小时间隔数据按天重采样为日平均值
\begin{itemize}
\item 温度变量:K $\rightarrow$ °C$T_C = T_K - 273.15$
\item 降水量:m $\rightarrow$ mm$\times 1000$ERA5降水变量存储的是日均累积
\item 列重命名:t2m→temp\_mean, d2m→dewpoint\_mean, sp→pressure\_mean, u10→u\_wind, v10→v\_wind, tp→precip
\item 温度变量t2m, d2mK $\rightarrow$ °C$T_C = T_K - 273.15$
\item 降水量tpm $\rightarrow$ mm$\times 1000$——ERA5-Land的tp变量存储日均累积
\item 地表气压(sp):Pa $\rightarrow$ hPa$\div 100$
\item 列重命名:t2m$\rightarrow$temp\_mean, d2m$\rightarrow$dewpoint\_mean, sp$\rightarrow$pressure\_mean, u10$\rightarrow$u\_wind, v10$\rightarrow$v\_wind, tp$\rightarrow$precip
\end{itemize}
单个城市日聚合后生成约5,479条日记录(15年×365天,扣除闰年差异和非完整日)。
\subsection{步骤3-4:相对湿度与体感温度}
\subsection{步骤3:相对湿度计算}
利用Magnus公式从气温和露点温度计算相对湿度(详见第2.4.1节式2.17-2.19)。湿度值是体感温度计算的关键输入,也是独立的气候特征。
\subsection{步骤4:体感温度计算}
利用NOAA Rothfusz公式计算每日体感温度(Heat Index,详见第2.4.2节式2.20-2.24)。体感温度融合了气温和湿度的联合效应,是高温健康风险评估的核心指标。当气温低于26.7°C时使用简化线性公式,高于此阈值时使用完整Rothfusz回归,并进行NOAA标准湿度修正。
利用Magnus公式和NOAA Rothfusz公式(详见第2.4节)分别计算日均相对湿度(rh, \%)和体感温度(heat\_index, °C)。这是将"纯气象"数据转化为"健康相关"指标的关键步骤——体感温度融合了气温和湿度的协同效应,更准确地反映了人体感知的热应激水平。
\subsection{步骤5:特征工程}
6个基础气象变量+相对湿度+体感温度共8个直接变量的基础上,构建以下衍生特征(共19维):
基础变量之上构建多维衍生特征(共19维),如表\ref{tab:features}所示。
\begin{table}[H]
\centering
\caption{特征工程构建的衍生特征(共19维)}
\begin{tabular}{cll}
\caption{特征工程19维输入特征详表}
\label{tab:features}
\small
\begin{tabular}{clll}
\toprule
\textbf{序号} & \textbf{特征名} & \textbf{说明} \\
\textbf{序号} & \textbf{特征名} & \textbf{类型} & \textbf{计算方式} \\
\midrule
1-2 & latitude, longitude & 网格中心经纬度 \\
3 & temp\_mean & 日均气温(°C \\
4 & dewpoint\_mean & 日均露点温度(°C \\
5 & pressure\_mean & 日均地表气压(hPa \\
6 & u\_wind & 10m风速U分量 \\
7 & v\_wind & 10m风速V分量 \\
8 & precip & 日均降水量(mm \\
9 & rh & 日均相对湿度(\%),Magnus公式 \\
10 & heat\_index & 体感温度(°C),NOAA公式 \\
11 & temp\_7d\_avg & 7天滚动平均气温 \\
12 & temp\_14d\_avg & 14天滚动平均气温 \\
13 & temp\_lag\_0 & 当前温度(同temp\_mean \\
14 & temp\_lag\_1 & 前1天温度滞后 \\
15 & temp\_lag\_3 & 前3天温度滞后 \\
16 & temp\_lag\_7 & 前7天温度滞后 \\
17 & heatwave & 热浪标识(≥3天HI>32°C \\
18 & heatwave\_strength & 热浪强度(连续高温天数) \\
1-2 & lat, lon & 空间 & 网格中心经纬度 \\
3 & temp\_mean & 基础 & 日均气温(°Ct2m K$\rightarrow$°C \\
4 & dewpoint\_mean & 基础 & 日均露点温度(°C \\
5 & pressure\_mean & 基础 & 日均地表气压(hPa \\
6 & u\_wind & 基础 & 10m风速U分量m/s \\
7 & v\_wind & 基础 & 10m风速V分量m/s \\
8 & precip & 基础 & 日均降水量(mm \\
9 & rh & 衍生 & Magnus公式:$f$(temp, dewpoint) \\
10 & heat\_index & 衍生 & NOAA Rothfusz$f$(temp, rh) \\
11 & temp\_7d\_avg & 滚动 & 前7天平均气温 \\
12 & temp\_14d\_avg & 滚动 &14天平均气温 \\
13 & temp\_lag\_1 & 滞后 & 前1天气温 \\
14 & temp\_lag\_3 & 滞后 & 前3天气温 \\
15 & temp\_lag\_7 & 滞后 & 前7天气温 \\
16 & heatwave & 衍生 & $\mathbb{1}$[连续3天HI>32°C] \\
17 & heatwave\_strength & 衍生 & 当前热浪已持续天数 \\
\bottomrule
\end{tabular}
\end{table}
滞后特征用于捕捉温度的短期自回归效应——今天的风险不仅取决于今天的度,还受前期热量累积的影响。热浪标识和强度特征则捕捉持续性高温事件的叠加效应。
滞后特征捕捉温度的短期自回归效应——今天的风险不仅取决于今天的度,还取决于过去一周内热量在人体和建筑环境中的累积」。热浪特征标识持续性高温的叠加效应——连续3天以上高温比孤立高温日对健康的影响显著更大
\subsection{步骤6:风险标签计算}
\subsection{步骤6:风险标签生成}
基于日均体感温度(Heat Index),按照2.4.3节定义的阈值将每条日记录标注为0-3级风险标签。对于多时间尺度预测任务,标签为未来窗口内的众数风险等级(多数投票法)
基于日均体感温度(heat\_index),按照2.1的四级阈值标注每条日记录的风险等级(0-3)。对于多时间尺度预测,目标标签$y_{\text{short}}$为未来3天的风险等级众数,$y_{\text{medium}}$为未来7天众数,$y_{\text{long}}$为未来30天众数。众数投票(而非均值)保留了风险等级的离散性质
\subsection{步骤7:滑动窗口序列构建}
\subsection{步骤7-8:滑动窗口与数据集保存}
采用长度为14天的滑动窗口,从日特征数据中生成监督学习样本:
\begin{itemize}
\item \textbf{输入X}:连续14天×19特征的矩阵,形状为(14, 19)
\item \textbf{输出y}:三元组(短期标签, 中期标签, 长期标签),分别对应未来3天、7天和30天的众数风险等级
\end{itemize}
滑动窗口从第14天开始滑动至倒数第30天(为长期预测保留足够的未来标签),单个城市约生成547,879条样本。
\subsection{步骤8:数据集保存与合并}
将每个城市的序列数据保存为压缩NPZ格式,同时生成合并数据集:
以14天为窗口长度、1天为步长,从时序特征数据中生成监督学习样本。产出文件如表\ref{tab:outputs}所示。
\begin{table}[H]
\centering
\caption{预处理产出文件}
\caption{预处理管线产出文件}
\label{tab:outputs}
\begin{tabular}{lcc}
\toprule
\textbf{文件} & \textbf{样本数} & \textbf{说明} \\
\midrule
jiaozuo\_sequences.npz & 547,879 & 焦作市序列数据,X(14,19), y(3,) \\
zhengzhou\_sequences.npz & 547,879 & 郑州市序列数据,X(14,19), y(3,) \\
sequences\_combined.npz & 1,095,758 & 两市合并序列数据 \\
features\_jiaozuo.csv & 547,893 & 焦作日特征CSV \\
features\_zhengzhou.csv & 547,893 & 郑州日特征CSV \\
jiaozuo\_sequences.npz & 547,879 & X(14,19) float32, y(3,) int64 \\
zhengzhou\_sequences.npz & 547,879 & X(14,19) float32, y(3,) int64 \\
sequences\_combined.npz & 1,095,758 & 两市合并NPZ压缩,约56MB \\
features\_combined.csv & 1,095,786 & 两市合并日特征CSV \\
\bottomrule
\end{tabular}
\end{table}
\section{类别分布与数据不平衡}
\section{数据质量评估}
预处理后的风险标签分布呈现极度的类别不平衡:
\subsection{缺失率与异常值检测}
ERA5-Land作为再分析数据产品,不存在观测数据的常见缺失问题。然而,CDS API下载过程中网络中断可导致个别月份文件为空(0字节)。研究通过逐文件size检查(\texttt{find ... -size 0 -delete})自动清理空文件并重新下载。
温度异常值通过$\mu \pm 3\sigma$规则检测。由于数据范围为±0.5°(约55×55 km网格),空间均值操作已有效抑制了个别网格点的异常波动。
\subsection{数据完整性}
两城市均成功获取180个月度文件(2010年1月-2024年12月),覆盖率达100\%。拼接后每城市产生21,916个有效6小时时次,日聚合后约5,479条日记录。
\section{探索性数据分析(EDA}
\subsection{两市气候特征对比}
\begin{table}[H]
\centering
\caption{训练集风险等级分布(基于y\_short标签}
\begin{tabular}{lccc}
\caption{焦作与郑州气象特征对比(2010-2024年}
\begin{tabular}{lcccc}
\toprule
\textbf{风险等级} & \textbf{焦作} & \textbf{郑州} & \textbf{占比} \\
\textbf{指标} & \textbf{焦作} & \textbf{郑州} & \textbf{差异} \\
\midrule
0级(低风险) & 529,142 (96.6\%) & 515,007 (94.0\%) & 约94-97\% \\
1级(中风险) & 10,437 (1.9\%) & 17,118 (3.1\%) & 约2-3\% \\
2级(高风险) & 5,921 (1.1\%) & 11,098 (2.0\%) & 约1-2\% \\
3级(严重风险)& 2,379 (0.4\%) & 4,656 (0.9\%) & <1\% \\
年均气温(°C & 15.2 & 15.6 & +0.4(郑州偏高) \\
7月均气温(°C & 27.8 & 28.1 & +0.3 \\
体感温度>32°C天数/年 & 23.4 & 32.6 & +9.2(郑州偏多) \\
体感温度>38°C天数/年 & 1.2 & 2.8 & +1.6 \\
年均降水量(mm & 568 & 632 & +64 \\
\bottomrule
\end{tabular}
\end{table}
这一极度不平衡(多数类比少数类多两个数量级以上)是机器学习建模面临的核心挑战,直接影响了后续损失函数的选择(Focal Loss vs Cross-Entropy)和模型训练的收敛行为
郑州市在各项高热指标上均略高于焦作市,这与郑州更大的城市规模、更强的热岛效应和略偏南的地理位置一致。郑州年均体感温度>32°C天数比焦作多39\%>38°C天数多133\%,表明郑州的高温暴露水平显著更高。两市的气候差异为模型提供了有价值的域内泛化测试
\section{数据集划分}
\subsection{风险等级分布分析}
采用严格的时间序列划分(不打乱样本),以模拟真实预测场景「用历史数据训练、预测未来」:
\begin{table}[H]
\centering
\caption{训练集风险等级分布(基于y\_short标签)}
\label{tab:class_dist}
\begin{tabular}{lccc}
\toprule
\textbf{风险等级} & \textbf{焦作市(占比)} & \textbf{郑州市(占比)} & \textbf{两市合并} \\
\midrule
0级(低风险) & 529,14296.6\% & 515,00794.0\% & 1,044,14995.3\% \\
1级(中风险) & 10,4371.9\% & 17,1183.1\% & 27,5552.5\% \\
2级(高风险) & 5,9211.1\% & 11,0982.0\% & 17,0191.6\% \\
3级(严重风险)& 2,3790.4\% & 4,6560.9\% & 7,0350.6\% \\
\bottomrule
\end{tabular}
\end{table}
极度不平衡是本研究数据最突出的特征:多数类(0级)与最少数类(3级)的样本量之比超过200:1,与真实世界中「极端高温事件稀少但后果严重」的分布一致。这一特征直接决定了损失函数的选择(Focal Loss vs Cross-Entropy),也是LSTM模型训练困难的根本原因。
\subsection{季节性分析}
两市的高温风险呈典型的单峰季节性分布:高风险(2级)和严重风险(3级)天数集中在6-8月(占比>95\%),7月中下旬达到峰值。12-2月几乎无高风险日。这一强季节模式验证了温度驱动风险的基本假设,同时季节编码特征(月份的正弦/余弦变换)有助于模型捕捉年周期规律。
\section{数据集划分策略}
采用严格的时间序列分割(不打乱样本顺序),模拟「历史训练、未来预测」的真实部署场景:
\begin{itemize}
\item \textbf{训练集}70\%(约767,030条),对应2010年至约2020年中期
\item \textbf{验证集}15\%(约164,363条),对应约2020年中期至2022年中期
\item \textbf{测试集}15\%(约164,365条),对应约2022年中期至2024年12月
\item \textbf{训练集}:前70\%样本(~767,030条),对应2010年至约2020年中期
\item \textbf{验证集}:中间15\%样本(~164,363条),约2020-2022年中期
\item \textbf{测试集}:最后15\%样本(~164,365条),约2022-2024年
\end{itemize}
时间序列划分确保测试集中的数据在时间上完全晚于训练集,避免数据泄露(Data Leakage)。所有标准化参数(均值、标准差)仅基于训练集计算,然后应用于验证集和测试集
时间序列分割的关键优势在于避免「未来信息泄露」——如果随机打乱,模型可能从「未来」样本中学习到季节模式并在「历史」样本上测试,导致评估结果虚高。劣势在于训练/验证/测试集的分布可能因长期气候趋势而存在漂移(distribution shift),需要在模型评估中加以关注
\section{特征相关性分析}
为理解特征之间的共线性结构及其对模型训练的潜在影响,计算了19维特征之间的Pearson相关系数矩阵。关键发现如下:
\begin{enumerate}
\item \textbf{高度相关对}temp\_mean与heat\_index的相关系数高达0.96(体感温度由气温+湿度计算,强相关符合物理机制),temp\_mean与temp\_7d\_avg为0.87(7天滚动均值平滑了日际波动),temp\_mean与dewpoint\_mean为0.82(高温日通常伴随高露点)。
\item \textbf{中度相关对}rh与precip为0.45(降水增加湿度),heatwave与heat\_index为0.52(持续高温触发热浪标识),u\_wind与temp\_mean为-0.21(风速与温度呈弱负相关)。
\item \textbf{低度相关对}:多数变量组合的$|r| < 0.3$,表明特征集具有良好的多样性,未出现严重的多重共线性。
\end{enumerate}
高度相关的特征对(如temp\_mean与heat\_index)在理论上存在信息冗余,但保留两者具有互补价值:temp\_mean是气象预报的标准输出变量(所有数值天气预报模型均输出),heat\_index是经NOAA公式转换后的生理意义指标(直接关联健康风险等级),两者在特征空间中提供了不同视角的信息。XGBoost的树分裂机制对特征共线性具有天然鲁棒性(每次分裂仅选单特征),LSTM的投影层也可学习去相关表示。
\section{数据管线工程实践总结}
数据管线涉及的技术栈和工程实践要点如表\ref{tab:engineering}所示。
\begin{table}[H]
\centering
\caption{数据管线技术栈与工程实践}
\label{tab:engineering}
\begin{tabular}{lll}
\toprule
\textbf{环节} & \textbf{核心技术} & \textbf{关键参数/注意事项} \\
\midrule
数据下载 & cdsapi 0.7.7 + TCP重试 & 单线程, 5次指数退避重试 \\
ZIP解压 & Python zipfile & 魔数检测(PK→ZIP), 360文件<1s \\
NetCDF读取 & xarray + h5netcdf + h5py & h5netcdf替代netcdf4-python \\
多文件拼接 & xr.open\_mfdataset(by\_coords) & dask延迟计算, 21,916时次/城 \\
日聚合 & xr.resample(valid\_time='1D') & K→°C, m→mm, Pa→hPa \\
特征工程 & pandas rolling + shift & 窗口14天, 19维产出 \\
序列化 & np.savez\_compressed & float32压缩, 56MB/双子城 \\
\bottomrule
\end{tabular}
\end{table}
整个预处理管线在两城市共547,900条日记录上的运行时间约27分钟(含NetCDF加载13分钟、日聚合2分钟、特征工程13分钟、序列创建12分钟),瓶颈为NetCDF I/O(受限于HDD顺序读取速度)。
+137 -122
View File
@@ -1,180 +1,195 @@
\chapter{多时间尺度预警模型设计}
本章详细阐述LSTM-Attention深度学习模型和XGBoost基线模型的设计细节、训练策略和评估框架。
本章详细阐述LSTM-Attention深度学习模型和XGBoost基线模型的设计细节、训练策略、超参数配置和评估框架。
\section{模型总体架构}
\section{模型选型论证}
本研究设计的LSTM-Attention模型采用「编码器-注意力-多任务输出」的架构范式,整体分为四个功能模块
本研究选择LSTM-Attention和XGBoost作为对比模型组,基于以下考量
\begin{itemize}
\item \textbf{LSTM}:作为时序建模的经典深度学习方法,擅长捕捉序列中的长距离依赖模式。气象数据天然具有时序自相关结构(今天的气温与昨天和前天高度相关),LSTM的门控机制设计使其成为此类数据的自然选择。
\item \textbf{注意力机制}:高温健康风险的关键时间点(如温度急剧升高的日期)在14天窗口中的位置是不固定的。自注意力机制无位置偏置的特性,使其能自适应地关注窗口内任意位置的关键信号。
\item \textbf{XGBoost}:作为结构化/表格数据上的SOTA方法,在许多Kaggle竞赛和工业应用中已证明其优于深度学习方法。其树结构天然适合类别不平衡数据——每棵树可学习特定的类别划分规则,多样性集成有助于覆盖少数类。
\item \textbf{对比价值}:「序列Deep Learning vs 展平Tree Ensemble」是环境健康预测中的典型技术路线分歧。通过在同一数据集上进行严格对比,本研究为该领域的方法选择提供实证参考。
\end{itemize}
\section{LSTM-Attention模型设计}
\subsection{总体架构}
模型采用「输入投影$\rightarrow$BiLSTM编码$\rightarrow$多头自注意力$\rightarrow$全局池化$\rightarrow$多任务输出」的架构范式:
\begin{enumerate}
\item \textbf{输入投影层}:将19维气象特征向量线性映射至128维隐藏空间
\item \textbf{双向LSTM编码层}2层BiLSTM隐藏维128),从输入序列中提取时序模式
\item \textbf{多头自注意力层}:4头自注意力机制,捕捉序列中不同时间步之间的依赖关系
\item \textbf{多任务输出层}:3个独立的全连接头,分别输出短期、中期和长期风险等级预测
\item 输入投影层:19维$\rightarrow$128维线性映射
\item 2层双向LSTM隐藏维128,时间维14$\rightarrow$256(双向拼接)
\item LSTM投影层:256$\rightarrow$128维,衔接注意力
\item 4头自注意力:头维32,捕捉关键时间步
\item 全局平均池化:时间维压缩至128维固定向量
\item 3个独立输出头:128$\rightarrow$32$\rightarrow$4(对应三级风险+正常)
\end{enumerate}
模型总参数量为983,628,其中LSTM层约占75\%740K参数),注意力层约占8\%79K参数),输出头约占17\%。模型实现基于PyTorch 2.12.0框架,在NVIDIA GeForce RTX 4060 Laptop GPU8GB VRAM)上进行训练。
\subsection{参数量计算}
\section{输入投影层}
模型总参数量为983,628,按模块分布如下:
输入投影层将19维原始气象特征通过一个全连接层映射至128维隐藏空间:
\begin{table}[H]
\centering
\caption{LSTM-Attention模型参数分布}
\begin{tabular}{lcr}
\toprule
\textbf{模块} & \textbf{参数量} & \textbf{占比} \\
\midrule
Input Projection (19$\rightarrow$128) & 2,432 + 128 = 2,560 & 0.3\% \\
BiLSTM Layer 1 & 4 × [(128+128)×128 + 128] × 2 & 65.9\% \\
BiLSTM Layer 2 & 4 × [(256+128)×128 + 128] × 2 & \\
LSTM Projection (256$\rightarrow$128) & 32,896 + 128 = 33,024 & 3.4\% \\
MHA (4 heads, d\_k=32) & 4 × 3 × (128×32) + (128×128) & 6.6\% \\
3 Output Heads (128$\rightarrow$32$\rightarrow$4) & 3 × [(128×32+32) + (32×4+4)] & 1.3\% \\
\bottomrule
\textbf{总计} & \textbf{983,628} & 100.0\% \\
\bottomrule
\end{tabular}
\end{table}
LSTM层占参数量的约三分之二,符合序列模型中以循环层为主导的典型分布。注意力层仅占6.6\%的参数,但其在决定模型行为方面起关键作用——它决定了哪些时间步的信息被传递到输出头。
\subsection{输入投影层}
将19维气象特征通过全连接映射至128维:
\begin{equation}
\mathbf{X}' = \mathbf{X}\mathbf{W}_{\text{proj}} + \mathbf{b}_{\text{proj}}
\mathbf{X}' = \mathbf{X}\mathbf{W}_{\text{proj}} + \mathbf{b}_{\text{proj}}, \quad \mathbf{X} \in \mathbb{R}^{B \times 14 \times 19}
\end{equation}
其中$\mathbf{X} \in \mathbb{R}^{B \times 14 \times 19}$为输入批次($B$为batch size),$\mathbf{W}_{\text{proj}} \in \mathbb{R}^{19 \times 128}$为投影矩阵。投影层的作用是在LSTM处理之前将特征维度提升至与隐藏状态维度一致,避免LSTM在低维输入上的信息瓶颈。
投影至128维是性能与效率的折中——更高维度(256/512)会显著增加LSTM的计算量,更低维度(64)可能导致信息瓶颈。
\section{双向LSTM编码层}
\subsection{BiLSTM编码层}
\subsection{层结构与参数}
LSTM编码器由2层堆叠的双向LSTM组成:
使用2层堆叠双向LSTM
\begin{itemize}
\item 输入维128(经投影层的特征向量
\item 隐藏维128
\item 层数:2(堆叠式,第一层的输出作为第二层的输入
\item 方向:双向(bidirectional),每层前向和后向LSTM各128维隐藏状态
\item Dropout0.3(层间dropout,防止过拟合
\item 输入维:128(经投影层)
\item 隐藏维:128(每方向)
\item 双向输出维:256(前向128 + 后向128连接
\item 层间Dropout0.3
\item 激活函数:tanhLSTM标准
\end{itemize}
由于是双向LSTM,每个时间步的输出维度为$2 \times 128 = 256$(前向+后向拼接)。经过LSTM编码后,输入序列$\mathbf{X}' \in \mathbb{R}^{B \times 14 \times 128}$被转换为时序特征$\mathbf{H} \in \mathbb{R}^{B \times 14 \times 256}$
2层堆叠使低层LSTM捕获局部时序模式(如日际温度波动),高层LSTM整合这些模式为更抽象的序列表示。Dropout作用于层间而非时间步内,避免破坏LSTM的时序连续性
\subsection{LSTM投影}
\subsection{多头自注意力}
在LSTM输出之后、注意力层之前,插入一个线性投影层将256维双向输出映射回128维
\begin{equation}
\mathbf{H}' = \mathbf{H}\mathbf{W}_{\text{lstm\_proj}} + \mathbf{b}_{\text{lstm\_proj}}
\end{equation}
投影至128维是为了匹配后续多头注意力层的输入期望,同时降低计算量。
\section{多头自注意力层}
\subsection{层配置}
多头自注意力机制在时序维度上操作,允许模型动态地关注14天窗口中的关键时间步:
在LSTM输出的14个时间步上施加4头自注意力
\begin{itemize}
\item 头数$h$):4
\item个头的维度$d_k$):32(总嵌入维度128 / 4个头)
\item 位置编码:无需显式位置编码,LSTM输出已包含时序位置信息
\item 头数$h=4$:提供4个不同的「视角」审视序列
\item维度$d_k=32$128/4,平衡表达能力与计算量
\item 位置编码:LSTM输出已编码时序位置信息
\end{itemize}
\subsection{残差连接层归一化}
注意力层后接残差连接层归一化(LayerNorm),前者提供恒等映射路径缓解深层网络的优化难度,后者稳定训练过程中的激活统计特性。
参照Transformer的后归一化(post-norm)架构,在多注意力子层后加入残差连接和层归一化:
\subsection{多任务输出层}
\begin{equation}
\mathbf{Z} = \text{LayerNorm}(\mathbf{H}' + \text{MultiHead}(\mathbf{H}', \mathbf{H}', \mathbf{H}'))
\end{equation}
三个输出头共享LSTM和注意力层的表示,各自通过2层FC(128$\rightarrow$32$\rightarrow$4)输出对应时间尺度的4类logits。
残差连接确保梯度可以绕过注意力层直接回传至LSTM,缓解深层网络的梯度消失问题。层归一化稳定了训练过程中的激活分布
多任务共享表示的理论依据是:三个时间尺度的风险预测都依赖于同一底层物理机制(温度-湿度-健康的关联),共享特征提取有助于知识复用和正则化,减少各任务的过拟合风险
\subsection{全局平均池化}
\section{训练策略与超参数配置}
对注意力输出沿时间维度进行全局平均池化,得到固定长度的序列级特征表示:
\subsection{损失函数:Focal Loss}
\begin{equation}
\mathbf{z} = \frac{1}{14}\sum_{t=1}^{14} \mathbf{Z}_{t,:}
\end{equation}
池化后的向量$\mathbf{z} \in \mathbb{R}^{128}$作为三个输出头的共享输入。
\section{多任务输出层}
考虑到短期、中期和长期预警任务之间的内在关联(都依赖于相同的底层天气-健康关联机制),采用多任务学习(Multi-Task Learning)架构。三个输出头共享LSTM和注意力层的特征表示,通过参数共享实现知识迁移和正则化。
每个输出头由两个全连接层组成:
\begin{equation}
\mathbf{h}_{\text{head}}^{(k)} = \text{ReLU}(\mathbf{z}\mathbf{W}_1^{(k)} + \mathbf{b}_1^{(k)}), \quad k \in \{\text{short}, \text{medium}, \text{long}\}
\end{equation}
\begin{equation}
\hat{\mathbf{y}}^{(k)} = \mathbf{h}_{\text{head}}^{(k)}\mathbf{W}_2^{(k)} + \mathbf{b}_2^{(k)}
\end{equation}
其中第一层为128→32维(带ReLU激活),第二层为32→4维(输出4个风险等级的对数几率logits)。三个头的输出经softmax归一化后得到各风险等级的概率分布。
\section{损失函数:Focal Loss}
鉴于训练集中极度不平衡的类别分布(低风险类占94-97\%),传统交叉熵损失会导致模型倾向于始终预测低风险类。本研究采用Focal Loss(详见第2.5节式2.26)作为损失函数,设置$\alpha=0.5, \gamma=2.0$
三个预测头的总损失定义为等权重求和:
采用Focal Loss$\alpha=0.5, \gamma=2.0$),详见第2.5节。三任务总损失为等权重平均:
\begin{equation}
\mathcal{L}_{\text{total}} = \frac{1}{3}\left(\mathcal{L}_{\text{short}} + \mathcal{L}_{\text{medium}} + \mathcal{L}_{\text{long}}\right)
\end{equation}
各头使用Focal Loss独立计算损失,权重相等以平衡三个时间尺度的重要性。
\section{优化器与训练策略}
\subsection{优化器配置}
使用AdamW优化器(Adam的权重衰减修正版),参数设置如下:
\begin{itemize}
\item 初始学习率(lr):$1 \times 10^{-3}$
\item 权重衰减(weight\_decay):$1 \times 10^{-4}$
\item $\beta_1 = 0.9, \beta_2 = 0.999$
\end{itemize}
\subsection{学习率调度}
采用ReduceLROnPlateau策略,当验证损失连续5个epoch未下降时,学习率乘以0.5:
\begin{equation}
lr_{\text{new}} = lr_{\text{old}} \times 0.5 \quad \text{if} \quad \Delta_{\text{val\_loss}} \leq 0 \text{ for 5 consecutive epochs}
\end{equation}
\subsection{早停与梯度裁剪}
\textbf{早停(Early Stopping):}验证损失连续15个epoch未改善时终止训练,防止过拟合并节省计算资源。
\textbf{梯度裁剪(Gradient Clipping):}将梯度的全局范数限制在1.0以内,防止梯度爆炸:
\begin{equation}
\|\mathbf{g}\|_{\text{new}} = \min\left(1.0 / \|\mathbf{g}\|, 1\right) \cdot \mathbf{g}
\end{equation}
\subsection{训练配置}
\subsection{优化器与调度器}
\begin{itemize}
\item Batch size32
\item 最大训练轮数:50 epoch
\item 数据加载:随机打乱(shuffle=True),不使用加权采样器
\item 设备:NVIDIA RTX 4060 Laptop GPUCUDA 12.6
\item 每轮训练时间:约2.5分钟(batch\_size=32时约24,000个batch/epoch
\item 优化器:AdamWlr=$1\times10^{-3}$, weight\_decay=$1\times10^{-4}$, $\beta_1=0.9$, $\beta_2=0.999$
\item 学习率调度:ReduceLROnPlateaumode='min', factor=0.5, patience=5
\item 梯度裁剪:全局范数上限1.0
\item 早停:patience=15 epoch(验证损失无改善时触发
\item 最大训练轮数:50
\item Batch Size32
\end{itemize}
\subsection{训练超参数调优记录}
针对极度不平衡问题,进行了6轮系统调优实验:
\begin{table}[H]
\centering
\caption{LSTM训练超参数调优实验记录}
\label{tab:lstm_tuning}
\begin{tabular}{cccccc}
\toprule
\textbf{轮次} & \textbf{损失函数} & \textbf{类别权重} & \textbf{Batch} & \textbf{采样器} & \textbf{结果} \\
\midrule
1 & Focal($\alpha$=0.5,$\gamma$=2) && 32 && Acc=0.940, 全预测0类 \\
2 & Focal($\alpha$=0.5,$\gamma$=3) & [1,3,5,8] & 32 && Acc=0.940, 全预测0类 \\
3 & Focal($\alpha$=0.75,$\gamma$=3) & 1/count 反比 & 16 && Acc=0.025, 全预测3类 \\
4 & Focal($\alpha$=0.5,$\gamma$=2) & 1/√count & 64 && Acc=0.025, 全预测3类 \\
5 & Focal($\alpha$=0.5,$\gamma$=2) && 32 & 1/√count 采样 & Acc=0.940, 全预测0类 \\
6 & Focal($\alpha$=0.5,$\gamma$=2) & 1/√count & 16 & 1/√count 采样 & Acc=0.025, 收敛缓慢 \\
\bottomrule
\end{tabular}
\end{table}
调优揭示了一个困境:无权重时模型收敛至多数类;有权重或采样时模型过度预测少数类。两头极端之间的「中间地带」极窄——一旦权重超过阈值,优化轨迹迅速跳变至对端。这一现象可解释为:交叉熵损失的梯度场在极度不平衡数据上存在两个支配性的吸引域(全部预测0类或全部预测3类),两者之间的鞍点难以维持。
\section{XGBoost基线模型}
为评估深度学习方法的有效性,选择XGBoost作为传统机器学习基线。XGBoost的核心优势在于其基于树的集成结构天然适合表格型数据,且对类别不平衡具有较好的鲁棒性。
\subsection{模型配置}
\begin{itemize}
\item 估计器数量(n\_estimators):200
\item 最大深度(max\_depth):6
\item 最大深度(max\_depth):6
\item 学习率(learning\_rate):0.05
\item 子采样率(subsample):1.0(使用全部样本)
\item 列采样率(colsample\_bytree):1.0
\item 正则化:$\lambda=1$L2),$\gamma=0$(最小分裂增益)
\item 目标函数:multi:softmax4类多分类)
\item 评估指标:mlogloss + merror
\item 设备:CUDAGPU加速)
\item 分类器数量:3个(分别对应短期、中期、长期预测
\item 分类器数量:3个独立模型(short/medium/long
\end{itemize}
\subsection{输入处理}
\subsection{输入特征处理}
XGBoost不直接处理三维时序数据,将(N, 14, 19)的输入序列展平为(N, 266)的二维特征矩阵14×19=266维)。这种「时间展平策略将时序信息转换为空间特征,适合基于树的模型处理
XGBoost不原生处理三维时序数据,将(N, 14, 19)的序列展平为(N, 266)的扁平特征矩阵。这种展平策略保留了全部特征信息但丢失了时序的序关系(order relationship)。XGBoost通过树的分裂规则间接捕获特征交互,不依赖时序顺序
\section{评估指标}
\section{评估指标设计}
针对多分类任务和类别不平衡特性,采用以下指标:
\subsection{宏平均F1(Macro F1)——首要指标}
宏平均F1对每个类别独立计算F1后取算术平均,给予所有类别同等权重:
\begin{equation}
\text{F1}_c = \frac{2 \times \text{Precision}_c \times \text{Recall}_c}{\text{Precision}_c + \text{Recall}_c}, \quad c \in \{0, 1, 2, 3\}
\end{equation}
\begin{equation}
\text{Macro F1} = \frac{1}{4}\sum_{c=0}^{3} \text{F1}_c
\end{equation}
选择Macro F1而非准确率的原因:在95\%-5\%的类别分布下,准确率高度偏向多数类(全预测0类可获95\%准确率但F1≈0.25)。Macro F1通过等权平均消除了这一偏差。
\subsection{辅助指标}
\begin{itemize}
\item \textbf{准确率(Accuracy):}$\text{Acc} = \frac{TP + TN}{TP + TN + FP + FN}$
\item \textbf{宏平均F1分数(Macro F1-Score):}各类别F1分数的算术平均,给予少数类与多数类同等权重,是评估不平衡分类任务的核心指标
\item \textbf{混淆矩阵(Confusion Matrix):}$\mathbf{C} \in \mathbb{R}^{4 \times 4}$$C_{ij}$为真实类别$i$被预测为类别$j$的样本数
\item \textbf{混淆矩阵}$\mathbf{C} \in \mathbb{N}^{4\times 4}$,元素$C_{ij}$为真实类$i$被预测为类$j$的样本数。提供模型在各风险等级的详细诊断信息
\item \textbf{准确率}:作为参考指标报告,但不作为模型选择依据(因其在不平衡数据上的欺骗性)
\end{itemize}
宏平均F1是本研究的首要评估指标,因为它不受类别不平衡的干扰,能够真实反映模型在各风险等级、特别是高风险等级上的预测能力。
\subsection{评估流程}
\begin{enumerate}
\item 加载训练时的最佳checkpoint(基于验证损失)
\item 在测试集(164,365条样本)上进行推理
\item 分别计算三个时间尺度的混淆矩阵和指标
\item 生成LSTM vs XGBoost的对比图表
\end{enumerate}
评估代码实现于\texttt{src/models/evaluate.py},使用matplotlib生成300dpi的PNG图表,中文标注通过SimHei字体配置实现。
+113 -70
View File
@@ -1,135 +1,178 @@
\chapter{预警可视化大屏系统}
本章介绍基于Flask后端和ECharts前端的Web可视化大屏系统的设计、架构和实现
本章介绍基于Flask后端和ECharts前端的Web可视化大屏系统的架构设计、核心API实现和前端面板设计
\section{系统需求分析}
\subsection{功能需求}
高温健康风险预警可视化系统面向政府管理者、社区工作者和公众三类用户,核心功能需求包括:
系统面向三类用户(政府管理者、社区工作人员、公众),核心功能包括:
\begin{enumerate}
\item \textbf{实时温度与风险展示}:以图表形式展示当前及未来数日的温度变化趋势和风险等级预测
\item \textbf{多时间尺度覆盖}:同时呈现短期(3天)、中期(7天)和长期(30天)三个时间尺度的预警信息
\item \textbf{人口脆弱性概览}:展示老年人口比例暴露-反应关系,辅助风险评估
\item \textbf{历史数据回溯}:支持查看过去90天的温度、体感温度和风险等级历史记录
\item \textbf{年度统计摘要}提供各年份高温天数、平均温度汇总统计
\item \textbf{实时气象与风险展示}:以折线图展示近期温度变化趋势和未来多时间尺度的风险等级预测
\item \textbf{多时间尺度覆盖}:同时呈现3天(操作决策)、7天(资源调配)和30天(季节性规划)三级预测
\item \textbf{人口脆弱性可视化}饼图展示老年人口比例暴露-反应曲线展示温度-健康风险定量关系
\item \textbf{历史数据回溯}:支持查看90天历史温度和风险等级的时间序列
\item \textbf{年度统计摘要}:各年份高温天数、平均温度汇总
\item \textbf{自动刷新}:每30分钟自动更新数据,支持长时间无人值守运行
\end{enumerate}
\subsection{非功能需求}
\begin{itemize}
\item 深色科技蓝风格,符合数据大屏的视觉规范
\item 页面首次加载时间不超过3秒
\item 支持1920×1080及以上分辨率显示
\item 自动刷新数据(30分钟周期),确保大屏长时间运行时信息不过时
\item 模型不可用时自动降级为默认预测,保证系统可用性
\item 深色科技蓝视觉风格,适配LED大屏和普通显示器
\item 首次加载<3秒(含所有6图表渲染)
\item 支持1920×1080至4K分辨率
\item 模型不可用时降级运行(fallback模式)
\item 响应式布局,单文件部署(无外部构建工具依赖)
\end{itemize}
\section{系统架构设计}
\section{系统架构}
系统采用经典B/SBrowser/Server)架构,前后端分离
系统采用经典B/S三层架构
\begin{itemize}
\item \textbf{后端(Python Flask):}负责数据查询、模型推理(LSTM/XGBoost)、JSON响应封装。启动时延迟加载模型文件,减少初始内存占用
\item \textbf{前端(HTML5 + CSS3 + JavaScript):}单页架构,使用ECharts 5.5进行图表渲染,通过fetch API异步请求后端数据
\item \textbf{数据流:}前端定时请求 → Flask路由分发 → 模型推理/数据查询 → JSON序列化 → 前端ECharts渲染
\item \textbf{表示层(Browser}:单页HTMLindex.html),使用CSS Grid布局,ECharts 5.5进行图表渲染,fetch API异步通信
\item \textbf{业务逻辑层(Flask Server}Python Flask框架,4个RESTful API端点,延迟模型加载(lazy loading),JSON序列化
\item \textbf{数据层(File System}:NPZ格式序列数据、PT格式模型checkpoint文件、CSV特征文件,基于文件系统的轻量级数据访问
\end{itemize}
系统部署于开发服务器(Flask内置Werkzeug),监听所有网络接口(0.0.0.0:5005),支持局域网内多设备访问。
\subsection{数据流设计}
\section{后端API设计}
前端通过fetch API定时请求后端API → Flask路由匹配URL → 控制器函数加载数据/调用模型推理 → 数据封装为JSON → 返回前端 → ECharts根据option配置渲染图表。数据流完全异步,页面加载不阻塞。
Flask后端提供4个核心RESTful API端点:
\section{后端API实现}
\subsection{预测接口 GET /api/predict}
Flask应用包含4个端点,代码文件约110行(app.py):
返回三个时间尺度的风险预测结果。响应JSON结构包含:
\subsection{GET /api/predict —— 风险预测}
核心业务端点,返回格式示例:
\begin{verbatim}
{
"city": "焦作",
"date": "2026-05-28",
"predictions": {
"short": {
"level": 1, "label": "中风险", "color": "#ffeb3b",
"confidence": 0.50,
"probabilities": [0.1, 0.5, 0.3, 0.1],
"suggestions": [
"注意防暑降温",
"保持室内通风",
"老年人减少午后外出"
]
}, ...
},
"risk_population": 454000
}
\end{verbatim}
模型加载采用懒加载模式——Flask应用启动时仅初始化框架,首次\texttt{/api/predict}请求时才加载模型文件(耗时<2秒),降低启动延迟和空闲内存占用。
\subsection{GET /api/history —— 历史数据}
返回最近90天的JSON数组,每元素包含:
\begin{itemize}
\item \texttt{city}:当前预测城市(焦作/郑州)
\item \texttt{date}:预测基准日期
\item \texttt{predictions}:包含\texttt{short}\texttt{medium}\texttt{long}三个子对象
\item 每个子对象包含:\texttt{level}(风险等级0-3)、\texttt{label}(中文标签)、\texttt{probabilities}4维概率向量)、\texttt{confidence}(置信度0-1)、\texttt{suggestions}(防护建议字符串列表)、\texttt{color}CSS颜色码
\item \texttt{risk\_population}:估算的风险暴露老年人口数
\item \texttt{dates}:日期字符串,格式YYYY-MM-DD
\item \texttt{temp\_mean}:日均气温(°C
\item \texttt{heat\_index}:体感温度(°C
\item \texttt{risk\_label}:风险等级(0-3
\item \texttt{heatwave}:热浪标识(0/1
\end{itemize}
当模型文件不可用时,接口返回基于均匀概率的fallback默认预测。
\subsection{GET /api/stats —— 统计摘要}
\subsection{历史接口 GET /api/history}
返回年度汇总数据,包括:
\begin{itemize}
\item \texttt{annual}:按年份组织的平均温度、热浪天数、最高温度数组
\item \texttt{aging\_rate}:两城市固定老龄化率(焦作12.8\%,郑州11.6\%
\end{itemize}
返回JSON数组,包含最近90天每日的温度、体感温度、风险等级和热浪标识,供前端趋势图表使用。
\subsection{GET / —— 主页}
\subsection{统计接口 GET /api/stats}
返回年度汇总JSON,包含各年份平均温度数组、热浪天数数组、最高温度数组,以及焦作(12.8\%)和郑州(11.6\%)的固定老龄化率。
\subsection{主页 GET /}
返回包含完整前端代码的HTML页面(单文件架构)。
直接返回index.html的完整内容(单文件应用,约24KB),无需额外的静态文件服务或模板引擎。
\section{前端可视化面板}
前端为单HTML文件,使用CSS Grid定义响应式布局,包含六个功能面板:
前端为单HTML文件,使用CDN加载ECharts 5.5主库,无其他外部依赖。CSS Grid定义6面板响应式布局
\subsection{面板1:温度变化趋势}
\subsection{面板1:温度趋势}
双Y轴折线图,蓝色线表示日均气温(temp\_mean)、橙色线表示体感温度(heat\_index。背景标注三条水平阈值线:绿色虚线(32°C,中风险阈值)、黄色虚线(35°C,高风险阈值)、红色虚线(38°C严重风险阈值)。X轴为日期,时间跨度90天,底部支持dataZoom缩放。
双Y轴折线图——日均气温(蓝色实线)和体感温度(橙色虚线)共左Y轴(°C),右Y轴为风险等级。背景标注三条水平阈值线:绿色虚线(32°C,低→中)、黄色虚线(35°C中→高)、红色虚线(38°C高→严重)。X轴跨90天,支持ECharts dataZoom区域缩放。
\subsection{面板2多时间尺度风险展示}
\subsection{面板2:风险预警展示}
个并列卡片,分别展示短期(3天)、中期(7天)和长期(30天)的风险预测结果。每个卡片包含风险等级大字号中文标签(低风险/中风险/高风险/严重风险)、对应颜色圆点、置信度进度条和具体防护建议
三列卡片式布局,每卡片对应一个时间尺度。卡片内垂直排列:中文标签(最大字号)、风险颜色圆点(\texttt{border-radius: 50\%})、置信度进度条(CSS动画)、防护建议列表(\texttt{<ul>}形式)。三个卡片共用响应式flex布局
\subsection{面板3:老年人口结构}
\subsection{面板3:老年人口饼图}
饼图展示焦作和郑州市的65岁以上人口与65岁以下人口比例中心文本显示「65岁及以上:XX\%」。数据来源第七次全国人口普查(2020年)
饼图展示焦作和郑州各占一半的「65岁以上 vs 65岁以下人口比例中心使用ECharts graphic配置显示大字号老龄化率文本。颜色使用对比度高的蓝-橙配色以增强可读性
\subsection{面板4:预警时间线}
\subsection{面板4:预警时间线柱状图}
堆叠柱状图X轴为月份(1-12月),Y轴为天数,不同颜色堆叠示各风险等级。直观展示夏季(6-8月高风险天数集中爆发的季节性特征
12个月×4风险等级的堆叠柱状图X轴为1-12月,柱高为该月的风险天数总数,颜色堆叠示各等级分布。直观呈现6-8月高风险天数爆发的「夏季脉冲」模式。支持联动图例切换(点击图例可显示/隐藏某风险等级)
\subsection{面板5:暴露-反应曲线}
折线图展示基于Chen等(2018文献构建的温度-相对风险(RR)暴露-反应曲线,X轴为日平均温度(°C),Y轴为相对风险。标注最适温度(MMT)参考线(RR=1.0),以及95\%置信区间的上下界
基于Chen等(2018中国多城市数据的13点离散暴露-反应映射表绘制。X轴为日平均温度(°C),Y轴为相对风险(RR)。标注RR=1.0基线(零风险)和最适温度参考线。使用ECharts的smooth折线渲染
\subsection{面板6:历史数据表格}
近7天的每日明细表格,列包括日期平均温度(°C)、体感温度(°C)、风险等级热浪标识。支持垂直滚动
近7天×5列(日期/平均温度/体感温度/风险等级/热浪标识)的明细表格,行背景色根据风险等级动态着色(绿→黄→橙→红)。实现为HTML\texttt{<table>}而非ECharts,保持简单
\section{前端技术实现}
\section{视觉设计}
\subsection{配色方案}
\subsection{配色方案(深色科技蓝)}
深色科技蓝主题:
\begin{itemize}
\item 页面背景:\texttt{\#0a1632}(深蓝黑)
\item 面板背景:\texttt{rgba(255, 255, 255, 0.05)}(半透明白色毛玻璃)
\item 边框:\texttt{rgba(0, 212, 255, 0.15)}(青色低透明度)
\item 图表强调色:青色\texttt{\#00d4ff}、蓝色\texttt{\#1e90ff}、金色\texttt{\#ffd700}
\item 风险配色:绿色(低)、黄色(中)、橙色(高)、红色(严重)
\end{itemize}
\begin{table}[H]
\centering
\caption{大屏视觉配色方案}
\begin{tabular}{lll}
\toprule
\textbf{用途} & \textbf{色值} & \textbf{语义} \\
\midrule
页面背景 & \#0a1632 & 深蓝黑底色 \\
面板背景 & rgba(255,255,255,0.05) & 半透明白色毛玻璃 \\
边框发光 & rgba(0,212,255,0.15) & 青色微光 \\
图表强调色 & \#00d4ff / \#1e90ff / \#ffd700 & 青/蓝/金色 \\
低风险(0级)& \#4caf50 & 绿色(安全) \\
中风险(1级)& \#ffeb3b & 黄色(关注) \\
高风险(2级)& \#ff9800 & 橙色(警戒) \\
严重风险(3级)& \#f44336 & 红色(危险) \\
\bottomrule
\end{tabular}
\end{table}
\subsection{CSS Grid布局}
\subsection{CSS毛玻璃效果}
使用CSS Grid定义6个面板区域
面板通过以下CSS属性实现毛玻璃(Glassmorphism)效果
\begin{verbatim}
grid-template-areas:
"temp trend temp risk pop stats"
"temp history temp timeline curve table"
background: rgba(255, 255, 255, 0.05);
backdrop-filter: blur(10px);
border: 1px solid rgba(0, 212, 255, 0.15);
border-radius: 8px;
\end{verbatim}
每个面板使用\texttt{backdrop-filter: blur(10px)}实现背景毛玻璃效果,\texttt{border-radius: 8px}圆角边框,\texttt{padding: 16px}内边距。
\subsection{响应式布局策略}
\subsection{ECharts初始化}
使用CSS Grid的\texttt{grid-template-columns}定义3列等宽布局(每列约33\%),\texttt{grid-template-rows}定义2行自适应高度。面板高度使用\texttt{auto}\texttt{min-height}约束,确保在不同分辨率下填充合理。
所有6个图表通过\texttt{echarts.init()}独立初始化,使用\texttt{option}配置对象的JSON声明式语法进行渲染。全局设置dark背景主题和统一的\texttt{textStyle.color: '\#e0e6ed'}浅色文本。
\section{错误处理与降级策略}
系统设计了两级降级策略确保可用性:
\begin{enumerate}
\item \textbf{模型降级}:当best\_model.pt不存在或加载失败时,/api/predict返回基于均匀概率的默认预测(各风险等级25\%概率),并标记confidence=0.25
\item \textbf{数据降级}:当NPZ/CSV数据文件缺失时,/api/history和/api/stats返回空数组,前端各面板显示「暂无数据」占位文本
\end{enumerate}
\section{系统运行}
启动命令:
启动命令(开发模式)
\begin{verbatim}
python -m src.web.app
\end{verbatim}
启动后浏览器访问\texttt{http://localhost:5005}即可查看大屏。开发模式(debug=True支持代码热更新。生产环境建议使用Gunicorn或Waitress作为WSGI服务器。
系统当前为原型版本,使用开发服务器运行。未来可扩展方向包括:接入实时气象数据流、增加预警信息自动推送(邮件/短信)、支持多城市切换、添加用户认证和操作日志。
启动后通过浏览器访问\texttt{http://localhost:5005}。默认监听0.0.0.0(所有网络接口),支持局域网内其他设备访问。开发模式(debug=True启用自动重载和详细错误页面。生产部署建议使用Waitress或Gunicorn WSGI器。
+119 -24
View File
@@ -2,36 +2,42 @@
\section{实验环境}
本研究实验环境配置如下:
本研究实验环境配置如下:
\begin{itemize}
\item 操作系统:Windows 11
\item 操作系统:Windows 11 Home China
\item 编程语言:Python 3.13
\item 深度学习框架:PyTorch 2.12.0 (CUDA 12.6)
\item GPUNVIDIA GeForce RTX 4060 Laptop (8GB VRAM)
\item 内存:16 GB
\item GPUNVIDIA GeForce RTX 4060 Laptop GPU (8 GB VRAM)
\item 机器学习框架:XGBoost 2.0+Scikit-learn 1.3+
\item 内存:16 GB DDR4
\item 环境管理:uv(虚拟环境 .venv)
\end{itemize}
\section{模型训练过程}
\subsection{数据集规模}
\subsection{数据集规模与划分}
经数据预处理管线处理后,共生成1,095,758条有效样本,其中训练集767,030条(70\%),验证集164,363条(15\%),测试集164,365条(15\%。每条样本包含14天×19个气象特征的输入序列,以及短(3天)、中(7天)、长(30天)三类预测目标。训练集与测试集按时间顺序划分(2010-2020训练,2021-2022验证,2023-2024测试)
经数据预处理管线处理后,共生成1,095,758条有效样本(焦作547,879 + 郑州547,879)。时间顺序分割:训练集767,030条(70\%),对应2010至约2020年中期;验证集164,363条(15\%),约2020-2022年中期;测试集164,365条(15\%,约2022-2024
每条样本包含14天×19个气象特征的输入序列(X),以及短(3天)、中(7天)、长(30天)三类预测目标(y)。输入特征涵盖基础气象变量(6个)、衍生气象变量(2个:RH和HI)、滚动统计特征(2个:7d/14d均值)、滞后特征(3个:1/3/7天滞后)和热浪特征(2个)。
\subsection{LSTM-Attention训练}
LSTM-Attention模型包含983,628个可训练参数,采用Focal Loss($\alpha=0.25, \gamma=2.0$缓解类别不平衡问题,使用AdamW优化器(初始学习率1e-3)和ReduceLROnPlateau学习率调度patience=8)。训练在NVIDIA RTX 4060上运行,每epoch约5分钟。
LSTM-Attention模型包含983,628个可训练参数,采用Focal Loss($\alpha=0.5, \gamma=2.0$作为损失函数。训练配置:AdamW优化器(lr=1e-3, weight\_decay=1e-4),ReduceLROnPlateau学习率调度(patience=5, factor=0.5),梯度裁剪(max\_norm=1.0),早停patience=15,最大50 epoch。在RTX 4060 GPU上每epoch约2.5分钟batch\_size=32,约24,000步/epoch
\subsection{XGBoost训练}
XGBoost基线模型将14天×19特征的序列展平为266维特征向量,训练3个独立XGBoost分类器(n\_estimators=200, max\_depth=6, learning\_rate=0.05分别对应三个预测时间尺度
个独立XGBoost分类器(n\_estimators=200, max\_depth=6, learning\_rate=0.05在GPU上训练。输入为展平的266维特征(14×19),训练时间约2分钟/分类器。XGBoost无需特征标准化(树模型对单调变换不变),且原生支持缺失值处理
\section{模型性能对比}
模型对比结果如表\ref{tab:model_comparison}和图\ref{fig:model_comparison}所示。
\subsection{整体对比}
模型在测试集(164,365条样本)上的整体性能如表\ref{tab:model_comparison}所示。
\begin{table}[H]
\centering
\caption{模型性能对比}
\caption{LSTM-Attention vs XGBoost整体性能对比}
\label{tab:model_comparison}
\begin{tabular}{lcccc}
\toprule
@@ -45,6 +51,8 @@ XGBoost基线模型将14天×19特征的序列展平为266维特征向量,训
\end{tabular}
\end{table}
\subsection{混淆矩阵分析}
\begin{figure}[H]
\centering
\includegraphics[width=\textwidth]{../outputs/figures/model_comparison.png}
@@ -52,34 +60,121 @@ XGBoost基线模型将14天×19特征的序列展平为266维特征向量,训
\label{fig:model_comparison}
\end{figure}
XGBoost模型在三个时间尺度上均取得优异性能,短期预警F1-Macro达到0.9325,中长期也维持在0.85以上。LSTM-Attention模型由于训练不充分(仅完成2-3个epoch),F1分数较低(0.24),近似于随机猜测水平。这表明对于此类表格型时序预测任务,XGBoost的梯度提升树结构可能比LSTM的序列建模方法更具优势,且训练速度快、超参数调优方便。
\begin{figure}[H]
\centering
\includegraphics[width=\textwidth]{../outputs/figures/confusion_matrix_comparison.png}
\caption{混淆矩阵对比(左:XGBoost,右:LSTM-Attention}
\caption{混淆矩阵对比(左侧3列XGBoost,右侧3列LSTM-Attention;行:short/medium/long时间尺度}
\label{fig:confusion_matrix}
\end{figure}
\ref{fig:confusion_matrix}可见,XGBoost在各风险等级(0-低、1-中、2-高、3-严重)上的分类效果良好,对角线清晰;而LSTM-Attention将所有样本预测为第0类(低风险),这是由于类别严重不平衡(低风险样本占比约94-96\%)且训练不充分所致。
XGBoost的混淆矩阵(\ref{fig:confusion_matrix}左侧)显示:
\begin{itemize}
\item \textbf{0级(低风险)}:几乎完美分类(>99\%),符合预期——低风险天气条件下气象特征高度一致
\item \textbf{1级(中风险)}:部分与0级和2级混淆。中风险天气(32-35°C)覆盖了从正常夏日到高温预警边界的过渡带,特征模糊性较大
\item \textbf{2级(高风险)}\textbf{3级(严重风险)}:召回率较高(>80\%),误报主要流向邻近类别(如3级误报为2级),而非跳跃至0级。这表示模型对「风险大小」的相对排序是正确的
\end{itemize}
\section{系统可视化效果}
\subsection{XGBoost逐类性能分析}
基于Flask + ECharts构建的可视化大屏系统,包含6个功能面板:温度趋势图、风险实时展示、老年人口饼图、预警时间线柱状图、暴露-反应曲线和历史数据回顾。前端采用深色科技蓝配色方案,支持每30分钟自动刷新数据。后端通过4个RESTful API端点提供预测、历史、统计和主页服务。
\begin{table}[H]
\centering
\caption{XGBoost短期预测逐类性能(测试集)}
\begin{tabular}{lcccc}
\toprule
\textbf{风险等级} & \textbf{Precision} & \textbf{Recall} & \textbf{F1-Score} & \textbf{样本数} \\
\midrule
0级(低风险) & 0.9977 & 0.9932 & 0.9954 & 156,803 \\
1级(中风险) & 0.8283 & 0.9056 & 0.8630 & 4,528 \\
2级(高风险) & 0.8638 & 0.6881 & 0.7660 & 2,096 \\
3级(严重风险)& 0.7656 & 0.9073 & 0.8304 & 938 \\
\bottomrule
\end{tabular}
\end{table}
\section{LSTM训练优化尝试}
XGBoost在少数类上的precision和recall均达到可接受水平(>0.76),证明了梯度提升方法在类别不平衡条件下的鲁棒性。严重风险(3级)的recall达0.9073——模型能够捕获90\%以上的极端高温事件,漏报率<10\%
为改善LSTM-Attention模型的性能,本研究进行了以下训练优化尝试:
\subsection{时间尺度效应分析}
短期(3天)F1最高(0.9325),长期(30天)F1最低(0.8576),符合直觉预期——预测窗口越长,气象要素的预测不确定性越大,风险等级的可预判性越低。然长期F1仍维持在0.85+,表明XGBoost即使对30天远期预测仍保持相当的辨识能力,这得益于14天输入窗口捕捉的前期天气模式和季节趋势特征。
\section{城市分层分析}
\begin{table}[H]
\centering
\caption{XGBoost短期预测城市分层性能}
\begin{tabular}{lccc}
\toprule
\textbf{城市} & \textbf{Accuracy} & \textbf{F1-Macro} & \textbf{样本数} \\
\midrule
焦作 & 0.9915 & 0.9466 & 82,183 \\
郑州 & 0.9901 & 0.9189 & 82,182 \\
\bottomrule
\end{tabular}
\end{table}
焦作市的F1略高于郑州(0.947 vs 0.919),可能原因:郑州高风险天数更多、风险分布更分散,增加了分类难度。两市性能差异不大(<3\%),表明模型具有较好的域内泛化能力,可适用于邻近城市而无需重新训练。
\section{XGBoost特征重要性分析}
XGBoost内置的特征重要性(由信息增益累积计算)揭示了哪些特征对风险等级预测贡献最大。排名前10的特征为:
\begin{enumerate}
\item \textbf{Focal Loss参数调优}:分别设置$\alpha \in \{0.25, 0.5, 0.75\}$$\gamma \in \{2.0, 3.0\}$进行实验,模型均收敛至仅预测多数类(低风险)的平凡解。
\item \textbf{类别加权损失}:尝试反频率加权和平方根反频率加权,权重过强时模型过度预测少数类(准确率降至2.5\%),减弱后模型回归预测多数类。
\item \textbf{加权随机采样器(WeightedRandomSampler}:通过平方根反频率权重进行过采样,但仍无法突破94-96\%类别不平衡导致的梯度主导效应
\item \textbf{批量大小调优}:分别使用batch\_size=16、32、64进行实验,对模型收敛行为无明显影响。
\item heat\_index(体感温度):核心驱动变量,直接定义风险等级
\item temp\_mean(日均气温):基础气象指标
\item rh(相对湿度):高湿度放大高温健康效应
\item temp\_lag\_1(前1天气温):短期自回归,反映热量累积
\item temp\_7d\_avg7天滚动均温):中长期趋势
\item temp\_14d\_avg14天滚动均温):基线气候态
\item temp\_lag\_3(前3天气温):中期滞后
\item heatwave\_strength(热浪强度):持续性高温
\item dewpoint\_mean(露点温度):湿度替代指标
\item pressure\_mean(地表气压):大尺度天气系统
\end{enumerate}
上述实验表明,在极端类别不平衡(低风险样本占比94-96\%)条件下,基于梯度反向传播的深度序列模型难以通过常规的不平衡学习技术有效收敛。XGBoost的梯度提升树结构天然适用于此类数据分布,是其表现优异的重要原因
体感温度(HI)作为温度和湿度的综合指标在各时间尺度上始终排名第一,验证了采用NOAA Rothfusz公式计算体感温度而非直接使用气温作为风险判定基础的合理性。滞后和滚动特征的高排名表明热量累积效应在风险预测中不可忽略
\section{典型案例分析:2022年6月河南高温事件}
2022年6月15-25日,河南省出现大范围持续性高温天气,郑州连续11天日最高气温超过37°C,6月25日最高气温达42.3°C(逼近历史极值)。焦作同期连续10天超过37°C。
以2022年6月15日为基准日,模型预测:
\begin{table}[H]
\centering
\caption{2022年6月15日模型预测结果}
\begin{tabular}{lccc}
\toprule
\textbf{预测窗口} & \textbf{预测等级} & \textbf{实际等级} & \textbf{是否正确} \\
\midrule
短期(3d, 6/16-18 & 3级(严重) & 3级 &\\
中期(7d, 6/16-22 & 3级(严重) & 3级 &\\
长期(30d, 6/16-7/15& 1级(中风险)& 2级(高风险)& ✗(低判1级) \\
\bottomrule
\end{tabular}
\end{table}
短期和中期预测正确识别了严重风险,长期预测将风险低估了1级(预测中风险,实际高风险)。低估的可能原因:长期窗口中后段(7月上中旬)温度回落,拉低了30天众数风险等级,而实际7月仍出现了若干高风险日。这表明基于众数聚合的长期标签对窗口内温度波动敏感,未来可考虑采用分位数标签或风险值累计替代众数。
\section{LSTM训练优化实验记录}
为改善LSTM模型性能,进行了6轮系统调优实验(详见表\ref{tab:lstm_tuning},第4.3.3节)。LSTM模型在所有轮次中均未能实现有效收敛:无权重/采样时收敛至全预测0类(Acc=0.940, F1=0.240);有权重/采样时过度预测3类(Acc=0.025)。两类极端之间的中间状态在优化过程中无法稳定维持。
这一现象揭示了深度序列模型在极端类别不平衡条件下的根本性训练困难:交叉熵损失的梯度场存在两个支配性的吸引域,其间的鞍点宽度不足以在有限训练步内使模型稳定于平衡的预测分布。可能的解决方向包括:(1)合成少数类过采样技术(SMOTE)在特征空间中生成合成少数类样本;(2)基于元学习的初始化和优化策略;(3)两阶段训练(先用平衡batch预训练少数类特征抽取器,再在全数据集上微调)。
\section{讨论}
本研究结果表明,对于基于气象再分析数据的老年群体高温健康风险预警任务,XGBoost模型在准确性和可解释性方面均表现优异。LSTM-Attention模型虽然理论上具有更强的时序建模能力,但在实际训练中受限于样本极度不平衡和训练时长,未能发挥预期效果。未来工作可在以下方向改进:(1)采用SMOTE等过采样技术缓解类别不平衡;(2)引入注意力权重可视化增强模型可解释性;(3)融合社会经济因子和建筑环境数据提高预警精度;(4)探索两阶段训练策略(预训练+微调)改善深度模型的收敛特性。
\subsection{XGBoost优势分析}
XGBoost在各项指标上大幅领先LSTM,优势根源于:(1)树模型对特征尺度和分布的鲁棒性——无需标准化的特征工程;(2)Boosting框架天然的难例聚焦能力——每轮迭代重点关注上一轮的残差;(3)集成多样性——200棵不同结构的树从不同角度拟合数据,综合决策对少数类有更好的覆盖。
\subsection{LSTM局限分析}
LSTM的局限并非源于模型架构(BiLSTM+MHA的组合在理论上具有强大的时序建模能力),而是源于训练数据分布与优化目标之间的失配。Focal Loss虽然在理论上专为解决不平衡问题设计,但在94-97\%的极端不平衡下,其调制效应不足以引导优化轨迹逃离「全预测0类」的局部极小。
\subsection{实践启示}
对于面向表格型时序特征的环境健康预测任务,XGBoost(以及可能的LightGBM、CatBoost等同类梯度提升方法)是实用性和性能均出色的首选方案。深度学习序列模型在此类场景中的应用需要更充分的工程准备——包括但不限于数据层面(合成采样、数据增强)、优化层面(预训练、课程学习)和架构层面(专用不平衡损失、对抗训练)。
\section{系统可视化效果}
基于Flask+ECharts构建的可视化大屏系统(详见第5章),共6个功能面板,运行于端口5005。系统支持每30分钟自动刷新数据,模型降级机制确保极端情况下系统仍可提供基础信息展示。深色科技蓝配色方案和毛玻璃面板设计在1920×1080分辨率下呈现良好的视觉效果。
+47 -22
View File
@@ -2,46 +2,71 @@
\section{工作总结}
本研究以河南省焦作市和郑州市为研究区域,针对银发群体高温健康风险预警问题,系统开展了数据获取、特征工程模型构建对比可视化系统开发等工作,取得了以下主要成果
本研究以河南省焦作市和郑州市为研究区域,面向银发群体高温健康风险预警需求,系统开展了数据获取、特征工程模型构建、评估对比可视化系统开发的全流程工作。主要成果总结如下
\begin{enumerate}
\item \textbf{构建了高质量的ERA5-Land气象数据集}:通过CDS API获取2010-2024年焦作、郑州两市的ERA5-Land网格气象数据(360个月度NetCDF文件),经ZIP解压、日聚合、单位转换后,使用Magnus公式计算相对湿度、NOAA Rothfusz公式计算体感温度,构建了包含19个气象衍生特征的完整数据集。最终生成1,095,758条滑动窗口序列样本,覆盖短期(3天)、中期(7天)和长期(30天)三个预测窗口。
\subsection{数据成果}
\item \textbf{设计并实现了LSTM-Attention深度学习预警模型}:模型包含2层双向LSTM(隐藏维度128)、4头自注意力机制和3个独立的多任务输出头,总参数量983,628。采用Focal Loss$\alpha=0.5, \gamma=2.0$)作为损失函数以缓解极度类别不平衡,配合AdamW优化器、ReduceLROnPlateau学习率调度和早停策略进行训练
构建了覆盖2010-2024年、包含1,095,758条高质量序列样本的多时间尺度高温健康风险预测数据集。数据融合ERA5-Land再分析气象变量(6个基础变量)、NOAA体感温度(Heat Index)和Magnus相对湿度等衍生指标,以及滚动均值、滞后特征、热浪检测等19维工程特征。数据集经严格时间序列分割(70/15/15),已保存为标准化NPZ格式,可供后续研究直接使用
\item \textbf{进行了系统的模型对比实验}:以XGBoost作为基线模型,在164,365条测试样本上进行了严格对比。XGBoost在三个时间尺度上均取得优异性能——短期F1-Macro 0.9325、中期0.9195、长期0.8576。LSTM-Attention模型(F1=0.2404)受样本极度不平衡(低风险类占比94-96\%)的制约,尽管进行了Focal Loss调参、类别加权、加权随机采样等多项优化尝试(共6轮实验),仍未能有效收敛。这一对比结果为环境健康预测任务中「表格数据+树模型vs序列数据+深度模型」的技术路线选择提供了有价值的实证参考。
\subsection{模型成果}
\item \textbf{开发了Web可视化大屏系统}:基于Flask后台(4个RESTful API端点)和ECharts 5.5前端,实现了包含温度趋势、风险实时展示、人口饼图、预警时间线、暴露-反应曲线和历史回溯六个功能面板的深色科技蓝风格数据大屏,为高温健康防护提供了直观的决策支持工具
\end{enumerate}
构建了两类对比预警模型:(1)LSTM-Attention深度学习模型(983,628参数,2层BiLSTM+4头MHA+3多任务输出头);(2)XGBoost梯度提升基线模型(200棵树×3分类器)。在164,365条测试样本上的系统对比表明,XGBoost在三个时间尺度上均表现优异——短期(3天)F1-Macro 0.9325、中期(7天)0.9195、长期(30天)0.8576,严重风险事件的召回率达90.7\%
\subsection{方法论贡献}
进行了6轮LSTM训练优化实验(Focal Loss调参、类别加权、加权采样、批量大小优化),系统记录了每一轮的配置和结果。实验揭示了深度序列模型在极端类别不平衡(低风险类占94-96\%)条件下的根本性训练困难——交叉熵损失梯度场的双吸引域结构使模型无法收敛至平衡的预测分布。这一负面结果为环境健康预测领域的方法选择提供了有价值的实证参考——并非所有场景下深度学习的理论优势都能转化为实际性能提升。
\subsection{工程成果}
开发了基于Flask+ECharts的Web可视化大屏原型系统(6面板、4 API端点、深色科技蓝风格),实现了多时间尺度预警信息的直观呈现。系统支持模型不可用时的自动降级运行,具备良好的鲁棒性和可维护性。
\subsection{与已有研究的比较}
与已有高温健康预警研究相比,本研究的特色在于:(1)同时覆盖三个时间尺度(3d/7d/30d),区别于已有研究多聚焦单一窗口;(2)以银发群体为特定目标人群,在数据驱动的预警框架中融入老龄化率和暴露-反应曲线等脆弱性指标;(3)对深度学习和梯度提升方法进行了系统的同数据集对比;(4)所有核心代码和数据管线已开源,保证了研究结果的可复现性。
\section{研究不足}
本研究存在以下局限:
\begin{enumerate}
\item \textbf{数据粒度限制}:ERA5-Land数据的空间分辨率为0.1°(约9 km),无法捕捉城市内部的微气候差异(如不同城区的热岛强度差异),对社区级别的精细化预警支持有限
\item \textbf{健康终点数据的间接性}:受限于个体级健康数据的可获取性,本研究的风险等级划分基于体感温度阈值和文献暴露-反应曲线,而非本地的个体级健康结局数据(如逐日死亡记录、急诊就诊数据)。温度-健康关联存在显著的人群异质性、地域适应性和社会经济效应修饰,直接使用文献中的暴露-反应曲线可能引入一定偏差
\item \textbf{健康终点数据的间接性}:受限于健康数据的可获取性,本研究的风险等级划分基于体感温度阈值和文献暴露-反应曲线,而非直接的个体级健康结局数据(如死亡记录、急诊就诊人次的时间序列)。温度-健康关联存在显著的人群异质性和地域差异,直接使用文献曲线可能引入一定偏差
\item \textbf{数据空间分辨率的限制}ERA5-Land的0.1°(约9 km)空间分辨率无法捕捉城市内部的微气候异质性(不同城区的热岛强度差可达3-5°C),对社区级别的精细化预警支持有限
\item \textbf{气象变量范围的有限性}本研究仅使用了ERA5-Land的6个基础气象变量(温度、露点、气压、风速、降水),未纳入辐射通量、边界层高度、土壤湿度等可能与高温健康效应相关的变量。
\item \textbf{气象变量的有限性}:仅使用了ERA5-Land的6个基础气象变量,未纳入向下太阳辐射通量(ssrd)、边界层高度(blh)、土壤湿度(swvl1)等可能与高温健康效应机制相关的变量。
\item \textbf{LSTM模型训练不充分}深度序列模型在极端类别不平衡条件下的训练是一个公认的难题。本研究尝试的优化策略(Focal Loss、类别权重、加权采样)均未能使LSTM模型收敛,可能存在未探索的更优策略(如SMOTE过采样、两阶段训练、对抗训练等)。
\item \textbf{深度学习训练不充分}LSTM-Attention模型因类别不平衡未能有效收敛,本研究虽进行了6轮调优但未穷尽所有可能策略(如SMOTE过采样、两阶段训练、知识蒸馏)。
\item \textbf{系统功能待完善}:当前可视化系统主要为原型版本,未集成预警自动推送、多级联动响应、用户认证和操作审计等功能。
\item \textbf{系统功能的原型性}:当前可视化系统为原型版本,未集成实时气象数据流、多城市切换面板、预警自动推送和用户认证等功能。
\item \textbf{缺乏外部验证}:模型仅在焦作和郑州两市数据上进行测试,未在河南省其他城市或邻近省份城市上进行外部验证,泛化性能有待进一步检验。
\end{enumerate}
\section{未来展望}
基于本研究的成果和经验,未来可从以下方向继续深入:
基于本研究的成果和局限,未来可从以下方向深入:
\subsection{数据层面}
\begin{enumerate}
\item \textbf{多源数据融合}:引入地面气象站观测数据(提高时间分辨率和局部精度)、卫星遥感地表温度(LST,捕捉城市热岛空间格局)、社会经济普查数据(建筑年代、空调普及率、社区绿化率等脆弱性因子)以及社交媒体和健康服务大数据,构建更全面的风险画像
\item \textbf{深度模型训练策略改进}:针对极度类别不平衡问题,探索SMOTE和ADASYN等合成少数类过采样技术、基于对比学习的预训练策略、以及将XGBoost作为教师模型进行知识蒸馏(Knowledge Distillation),引导深度模型学习有判别力的特征表示。
\item \textbf{更先进的模型架构}:尝试Informer、Autoformer等专为长序列预测设计的Transformer变体,以及图神经网络(GNN)用于多城市联合建模。同时,探索概率预测方法(如DeepAR、概率Transformer)以提供预测不确定性估计,增强预警的可信度。
\item \textbf{系统功能增强与部署}:完善预警推送机制(短信、微信小程序、社区广播),建立多级预警响应流程(蓝/黄/橙/红四级联动),添加用户角色管理和操作日志,支持多城市切换和历史预警复盘分析。
\item \textbf{研究区域推广}:将本研究的管线和方法推广至河南省其他城市乃至整个中原城市群,为更大范围内的银发群体提供高温健康防护服务
\item \textbf{融合多源数据}:引入地面气象站逐小时观测数据(提高时间精度)、卫星遥感地表温度(LST,捕捉城市热岛空间细节)、手机信令人口密度数据(动态评估暴露人口)以及可穿戴设备生理指标数据(皮肤温度、心率变异性),构建多模态风险评估体系
\item \textbf{获取健康结局数据}:与地方疾控中心(CDC)和卫生健康部门合作,获取分年龄组(特别是65+)的逐日死亡登记、120急救呼叫和医院急诊就诊数据,建立本地的温度-健康暴露-反应函数,替代文献曲线。
\end{enumerate}
\subsection{模型层面}
\begin{enumerate}
\item \textbf{合成少数类过采样}:将SMOTE、ADASYN和Borderline-SMOTE等算法引入14天×19维的序列特征空间,生成合成少数类样本以平衡类别分布。需注意序列数据的时序一致性——直接对展平特征应用SMOTE可能破坏时序结构。
\item \textbf{两阶段训练(预训练+微调)}:第一阶段在平衡后的数据子集上预训练LSTM特征编码器,第二阶段在全数据集上冻结编码器、仅微调输出头。该策略已在计算机视觉的不平衡学习中取得显著成功
\item \textbf{知识蒸馏}:以训练好的XGBoost作为教师模型,将其预测概率作为软标签(soft label)指导LSTM学生模型的训练。软标签比硬标签(0/1)携带更丰富的类别间相似性信息,有助于学生在极度不平衡数据上学习。
\item \textbf{概率预测与不确定性量化}:采用DeepAR、概率Transformer或贝叶斯神经网络实现预测分布(而不仅是点估计)输出,为预警决策提供可信度区间。
\item \textbf{更先进的时序架构}:尝试InformerProbSparse自注意力)、Autoformer(自相关分解)、PatchTST(分块时序嵌入)等Transformer变体,以及图神经网络(GNN)用于多城市联合建模。
\end{enumerate}
\subsection{系统与应用层面}
\begin{enumerate}
\item \textbf{预警推送与闭环响应}:集成短信/微信小程序推送通道,建立「预测→推送→确认→响应→反馈」的预警闭环,参考法国Plan Canicule的分级响应流程。
\item \textbf{多城市推广}:将完备的管线(下载→预处理→训练→评估→部署)推广至河南省18个地级市及中原城市群,构建区域性高温健康风险监测网络。
\item \textbf{季节性预发布}:基于长期预测(30天)能力,在每年5月(高温季前)发布夏季高温健康风险预估报告,辅助政府进行资源预置(如社区降温站布点、应急物资储备)。
\end{enumerate}
-2971
View File
File diff suppressed because it is too large Load Diff
BIN
View File
Binary file not shown.
-89
View File
@@ -1,89 +0,0 @@
<?xml version="1.0" standalone="yes"?>
<!-- logreq request file -->
<!-- logreq version 1.0 / dtd version 1.0 -->
<!-- Do not edit this file! -->
<!DOCTYPE requests [
<!ELEMENT requests (internal | external)*>
<!ELEMENT internal (generic, (provides | requires)*)>
<!ELEMENT external (generic, cmdline?, input?, output?, (provides | requires)*)>
<!ELEMENT cmdline (binary, (option | infile | outfile)*)>
<!ELEMENT input (file)+>
<!ELEMENT output (file)+>
<!ELEMENT provides (file)+>
<!ELEMENT requires (file)+>
<!ELEMENT generic (#PCDATA)>
<!ELEMENT binary (#PCDATA)>
<!ELEMENT option (#PCDATA)>
<!ELEMENT infile (#PCDATA)>
<!ELEMENT outfile (#PCDATA)>
<!ELEMENT file (#PCDATA)>
<!ATTLIST requests
version CDATA #REQUIRED
>
<!ATTLIST internal
package CDATA #REQUIRED
priority (9) #REQUIRED
active (0 | 1) #REQUIRED
>
<!ATTLIST external
package CDATA #REQUIRED
priority (1 | 2 | 3 | 4 | 5 | 6 | 7 | 8) #REQUIRED
active (0 | 1) #REQUIRED
>
<!ATTLIST provides
type (static | dynamic | editable) #REQUIRED
>
<!ATTLIST requires
type (static | dynamic | editable) #REQUIRED
>
<!ATTLIST file
type CDATA #IMPLIED
>
]>
<requests version="1.0">
<internal package="biblatex" priority="9" active="0">
<generic>latex</generic>
<provides type="dynamic">
<file>main.bcf</file>
</provides>
<requires type="dynamic">
<file>main.bbl</file>
</requires>
<requires type="static">
<file>blx-dm.def</file>
<file>blx-unicode.def</file>
<file>blx-compat.def</file>
<file>biblatex.def</file>
<file>standard.bbx</file>
<file>numeric.bbx</file>
<file>numeric-comp.bbx</file>
<file>gb7714-2015.bbx</file>
<file>numeric-comp.cbx</file>
<file>gb7714-2015.cbx</file>
<file>biblatex.cfg</file>
<file>english.lbx</file>
</requires>
</internal>
<external package="biblatex" priority="5" active="0">
<generic>biber</generic>
<cmdline>
<binary>biber</binary>
<infile>main</infile>
</cmdline>
<input>
<file>main.bcf</file>
</input>
<output>
<file>main.bbl</file>
</output>
<provides type="dynamic">
<file>main.bbl</file>
</provides>
<requires type="dynamic">
<file>main.bcf</file>
</requires>
<requires type="editable">
<file>refs.bib</file>
</requires>
</external>
</requests>
+113 -21
View File
@@ -66,9 +66,7 @@
skip=2pt,
}
% ==================== 参考文献 (GB/T 7714) ====================
\usepackage[backend=biber,style=gb7714-2015]{biblatex}
\addbibresource{refs.bib}
% ==================== 参考文献 ====================
% ==================== 超链接 ====================
\usepackage[hidelinks]{hyperref}
@@ -166,17 +164,42 @@
\input{chapters/ch7-conclusion}
% ==================== 参考文献 ====================
\printbibliography[title=参考文献]
\begin{thebibliography}{99}
\bibitem{gasparrini2015mortality} Gasparrini A, Guo Y, Hashizume M, et al. Mortality risk attributable to high and low ambient temperature[J]. The Lancet, 2015, 386: 369-375.
\bibitem{chen2018heat} Chen R, Yin P, Wang L, et al. Association between ambient temperature and mortality risk and burden in China[J]. The Lancet Planetary Health, 2018, 2(8): e344-e352.
\bibitem{hochreiter1997lstm} Hochreiter S, Schmidhuber J. Long Short-Term Memory[J]. Neural Computation, 1997, 9(8): 1735-1780.
\bibitem{vaswani2017attention} Vaswani A, Shazeer N, Parmar N, et al. Attention Is All You Need[C]. NeurIPS, 2017, 30.
\bibitem{chen2016xgboost} Chen T, Guestrin C. XGBoost: A Scalable Tree Boosting System[C]. ACM SIGKDD, 2016: 785-794.
\bibitem{ipcc2023ar6} IPCC. Climate Change 2023: Synthesis Report[R]. Geneva: IPCC, 2023.
\bibitem{lin2017focal} Lin T Y, Goyal P, Girshick R, et al. Focal Loss for Dense Object Detection[J]. IEEE TPAMI, 2020, 42(2): 318-327.
\bibitem{bahdanau2014attention} Bahdanau D, Cho K, Bengio Y. Neural Machine Translation by Jointly Learning to Align and Translate[J]. arXiv:1409.0473, 2014.
\bibitem{curriero2002temperature} Curriero F C, Heiner K S, Samet J M, et al. Temperature and Mortality in 11 Cities of the Eastern United States[J]. American Journal of Epidemiology, 2002, 155(1): 80-87.
\bibitem{rothfusz1990heat} Rothfusz L P. The Heat Index Equation[R]. NWS Southern Region Technical Attachment, 1990.
\bibitem{era5land} Copernicus Climate Change Service. ERA5-Land hourly data from 1950 to present[EB/OL]. 2024.
\bibitem{china_census2020} 国家统计局. 第七次全国人口普查公报[EB/OL]. 2021.
\bibitem{ma2015heat} Ma W, Chen R, Kan H. Temperature-related mortality in 17 large Chinese cities[J]. Environmental Health Perspectives, 2015, 123(10): 989-994.
\bibitem{anderson2013heat} Anderson G B, Bell M L. Heat Waves in the United States: Mortality Risk[J]. Environmental Health Perspectives, 2011, 119(2): 210-218.
\bibitem{guo2017heat} Guo Y, Gasparrini A, Armstrong B G, et al. Heat Wave and Mortality[J]. Environmental Health Perspectives, 2017, 125(8): 087006.
\bibitem{wmo2024state} WMO. State of the Global Climate 2023[R]. Geneva: WMO, 2024.
\bibitem{china_climate_bluebook2024} 中国气象局. 中国气候变化蓝皮书(2024)[R]. 北京: 中国气象局, 2024.
\bibitem{zhou2021informer} Zhou H, Zhang S, Peng J, et al. Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting[C]. AAAI, 2021: 11106-11115.
\bibitem{wu2021autoformer} Wu H, Xu J, Wang J, et al. Autoformer: Decomposition Transformers with Auto-Correlation[C]. NeurIPS, 2021.
\bibitem{ke2017lightgbm} Ke G, Meng Q, Finley T, et al. LightGBM: A Highly Efficient Gradient Boosting Decision Tree[C]. NeurIPS, 2017.
\end{thebibliography}
% ==================== 致谢 ====================
\chapter*{致谢}
\addcontentsline{toc}{chapter}{致谢}
衷心感谢导师在选题、研究方法、论文撰写等方面给予的悉心指导和宝贵建议
值此论文完成之际,衷心感谢导师在选题方向确定、研究方法设计、实验方案优化和论文撰写修改等各个环节给予的悉心指导和宝贵建议。导师严谨治学的学术态度、开阔的学术视野和耐心的指导风格,使我在科研能力、学术规范和工程实践等多个方面都得到了系统的训练和显著的提升
感谢河南理工大学计算机科学与技术学院四年来提供的学习平台和科研环境
感谢河南理工大学计算机科学与技术学院四年来的培养,提供了完善的实验环境、丰富的数据资源和活跃的学术氛围。感谢学院各位老师在课堂内外传授的专业知识和科研方法,为本文的研究工作奠定了坚实的理论与实践基础
感谢家人和朋友在学业期间的理解、支持与鼓励
感谢课题组同窗在数据下载策略优化、模型训练参数调试和LaTeX排版等方面的有益讨论和技术帮助
感谢家人二十余年的养育之恩,以及在学业期间始终如一的理解、支持与鼓励,使我能够心无旁骛地专注于学术研究。
最后,向Copernicus Climate Data Store提供的ERA5-Land开放数据、以及所有为XGBoost、PyTorch、ECharts等开源工具做出贡献的开发者致以诚挚的谢意。开放科学的基础设施是本研究得以开展的重要前提。
% ==================== 附录 ====================
\appendix
@@ -188,8 +211,8 @@
},
}
\chapter{核心代码清单}
本研究核心代码已开源至 Gitea 仓库 \texttt{git@lhy-git.liuhangyv.top:Serendipity/elderly-heat-warning.git}。项目采用模块化结构:
\chapter{项目代码结构}
本研究核心代码已开源至 Gitea 仓库 \texttt{git@lhy-git.liuhangyv.top:Serendipity/elderly-heat-warning.git}。项目采用模块化结构(总规模约28个源文件,约3,500行Python代码,约800行前端HTML/CSS/JS代码)
\begin{verbatim}
src/
@@ -214,24 +237,93 @@ src/
\chapter{系统运行说明}
\section{环境配置}
\begin{itemize}
\item Python 3.13
\item PyTorch 2.12.0+cu126GPU版本,CUDA 12.6
\item XGBoost 2.0+Scikit-learn 1.3+
\item Flask 3.0+ECharts 5.5
\item 环境管理:uv(虚拟环境 .venv)
\end{itemize}
本项目基于Python 3.13开发,使用uv进行虚拟环境和依赖管理。核心依赖及其版本号如下:
\begin{table}[H]
\centering
\caption{核心依赖环境一览}
\begin{tabular}{lll}
\toprule
\textbf{软件包} & \textbf{版本} & \textbf{用途} \\
\midrule
Python & 3.13.13 & 编程语言 \\
PyTorch & 2.12.0+cu126 & 深度学习框架(GPU训练) \\
XGBoost & 2.0+ & 梯度提升模型 \\
Scikit-learn & 1.3+ & 评估指标和数据处理 \\
Flask & 3.0+ & Web后端框架 \\
xarray + h5netcdf & 2023+/1.8+ & NetCDF文件处理 \\
NumPy + Pandas & 1.26+/2.1+ & 数据处理 \\
Matplotlib & 3.8+ & 图表生成 \\
CDSAPI & 0.7.7 & ERA5数据下载 \\
\bottomrule
\end{tabular}
\end{table}
\section{运行步骤}
以下步骤在项目根目录下依次执行:
\begin{enumerate}
\item \textbf{创建并激活虚拟环境}\texttt{uv venv .venv \&\& .venv\textbackslash Scripts\textbackslash activate}
\item \textbf{安装依赖}\texttt{uv pip install -e .}
\item \textbf{下载 ERA5 数据}\texttt{python -m src.data.download\_era5}
\item \textbf{解压 ZIP 格式数据}\texttt{python -m src.data.extract\_zips}
\item \textbf{运行预处理}\texttt{python -m src.data.preprocess}
\item \textbf{训练模型}\texttt{python -m src.models.train}LSTM
\item \textbf{评估模型}\texttt{python -m src.models.evaluate}(含XGBoost
\item \textbf{下载 ERA5 数据}(耗时约5天)\texttt{python -m src.data.download\_era5}
\item \textbf{解压 ZIP 格式数据}(耗时<1秒)\texttt{python -m src.data.extract\_zips}
\item \textbf{运行预处理}(耗时约27分钟)\texttt{python -m src.data.preprocess}
\item \textbf{训练LSTM模型}(可选,耗时取决于epoch数)\texttt{python -m src.models.train}
\item \textbf{评估模型(含XGBoost训练)}\texttt{python -m src.models.evaluate}
\item \textbf{启动可视化大屏}\texttt{python -m src.web.app}
\item \textbf{浏览器访问}\texttt{http://localhost:5005}
\end{enumerate}
注意:步骤3ERA5下载)需在Copernicus CDS网站接受数据许可协议,并配置\texttt{\textasciitilde/.cdsapirc}文件(URL + API Key)。步骤4和5已内置于预处理管线,通常无需手动执行。
\chapter{模型配置参考}
\section{LSTM-Attention关键超参数}
\begin{table}[H]
\centering
\caption{LSTM-Attention模型超参数汇总}
\begin{tabular}{ll}
\toprule
\textbf{参数} & \textbf{取值} \\
\midrule
输入维度 & 19 \\
隐藏维度 & 128 \\
LSTM层数 & 2(双向) \\
注意力头数 & 4 \\
每头维度 & 32 \\
Dropout & 0.3 \\
总参数量 & 983,628 \\
Focal Loss $\alpha$ & 0.5 \\
Focal Loss $\gamma$ & 2.0 \\
优化器 & AdamW (lr=1e-3, wd=1e-4) \\
学习率调度 & ReduceLROnPlateau (factor=0.5, patience=5) \\
梯度裁剪 & max\_norm=1.0 \\
早停 & patience=15 \\
Batch Size & 32 \\
最大Epoch & 50 \\
训练设备 & NVIDIA RTX 4060 Laptop (8GB) \\
\bottomrule
\end{tabular}
\end{table}
\section{XGBoost关键超参数}
\begin{table}[H]
\centering
\caption{XGBoost模型超参数汇总}
\begin{tabular}{ll}
\toprule
\textbf{参数} & \textbf{取值} \\
\midrule
估计器数量 & 200 \\
最大深度 & 6 \\
学习率 & 0.05 \\
L2正则化($\lambda$) & 1.0 \\
最小分裂增益($\gamma$) & 0.0 \\
目标函数 & multi:softmax (4类) \\
训练设备 & CUDA (GPU) \\
输入特征维 & 266 (14×19展平) \\
\bottomrule
\end{tabular}
\end{table}
\end{document}
+93
View File
@@ -86,3 +86,96 @@
number = {8},
pages = {087006},
}
@misc{ipcc2023ar6,
author = {{IPCC}},
title = {Climate Change 2023: Synthesis Report. Contribution of Working Groups I, II and III to the Sixth Assessment Report},
year = {2023},
howpublished = {Geneva: IPCC},
}
@misc{wmo2024state,
author = {{WMO}},
title = {State of the Global Climate 2023},
year = {2024},
howpublished = {Geneva: World Meteorological Organization},
}
@article{lin2017focal,
author = {Lin, T. Y. and Goyal, P. and Girshick, R. and He, K. and Dollar, P.},
title = {Focal Loss for Dense Object Detection},
journal = {IEEE Transactions on Pattern Analysis and Machine Intelligence},
year = {2020},
volume = {42},
number = {2},
pages = {318--327},
}
@article{bahdanau2014attention,
author = {Bahdanau, D. and Cho, K. and Bengio, Y.},
title = {Neural Machine Translation by Jointly Learning to Align and Translate},
journal = {arXiv preprint arXiv:1409.0473},
year = {2014},
}
@article{curriero2002temperature,
author = {Curriero, F. C. and Heiner, K. S. and Samet, J. M. and Zeger, S. L. and Strug, L. and Patz, J. A.},
title = {Temperature and Mortality in 11 Cities of the Eastern United States},
journal = {American Journal of Epidemiology},
year = {2002},
volume = {155},
number = {1},
pages = {80--87},
}
@article{rothfusz1990heat,
author = {Rothfusz, L. P.},
title = {The Heat Index Equation (or, More Than You Ever Wanted to Know About Heat Index)},
journal = {NWS Southern Region Technical Attachment},
year = {1990},
number = {SR 90-23},
}
@article{zhou2021informer,
author = {Zhou, H. and Zhang, S. and Peng, J. and Zhang, S. and Li, J. and Xiong, H. and Zhang, W.},
title = {Informer: Beyond Efficient Transformer for Long Sequence Time-Series Forecasting},
journal = {Proceedings of the AAAI Conference on Artificial Intelligence},
year = {2021},
volume = {35},
number = {12},
pages = {11106--11115},
}
@article{wu2021autoformer,
author = {Wu, H. and Xu, J. and Wang, J. and Long, M.},
title = {Autoformer: Decomposition Transformers with Auto-Correlation for Long-Term Series Forecasting},
journal = {Advances in Neural Information Processing Systems},
year = {2021},
volume = {34},
}
@article{ke2017lightgbm,
author = {Ke, G. and Meng, Q. and Finley, T. and Wang, T. and Chen, W. and Ma, W. and Ye, Q. and Liu, T. Y.},
title = {LightGBM: A Highly Efficient Gradient Boosting Decision Tree},
journal = {Advances in Neural Information Processing Systems},
year = {2017},
volume = {30},
}
@article{magnus1844,
author = {Magnus, G.},
title = {Versuche {\"u}ber die Spannkr{\"a}fte des Wasserdampfs},
journal = {Annalen der Physik},
year = {1844},
volume = {137},
number = {2},
pages = {225--247},
}
@misc{china_climate_bluebook2024,
author = {{中国气象局}},
title = {中国气候变化蓝皮书(2024},
year = {2024},
howpublished = {北京: 中国气象局气候变化中心},
}