Intelligent Fire Risk Prediction Platform for Chongqing Based on Multi-Source Data Fusion 研究区域:中国重庆市(29.5°N, 106.5°E)
核心技术:机器学习(KNN/LSTM/Attention-LSTM)+ 地理信息系统(GIS)+ Web 可视化(Flask + Gradio) 核心可以看建模流程.md、说明文档.pdf、智火卫渝说明文档.docx这三个文件
重庆市地处四川盆地东部,地形以丘陵、山地为主,气候湿润多雾,生态环境复杂多变。在全球气候变化背景下,该地区频发的极端高温干旱天气导致森林火险等级升高,植被生长受胁迫程度加剧。
传统的生态要素预测往往依赖单一统计模型或物理模型,难以同时应对火点数据的稀疏突发性与 NDVI 数据的强季节性特征。本项目提出了分而治之的建模框架:
- 火点(Fire Point):采用 KNN 多输出回归 + 状态空间重构 算法,通过捕捉历史高维状态空间的拓扑结构实现对突发火情的非参数化推演,测试集 R² = 0.971
- NDVI 植被指数:采用 "气候态分解 + 线性自回归(Climatology-AR)" 混合模型,有效剥离确定性季节背景与随机性气候异常,测试集 R² = 0.801
- 气象要素:采用 Attention-LSTM 深度学习模型预测未来气温、湿度、气压等气象趋势
平台集成上述多模型预测结果,结合**火险预报指数(FE)**综合评估体系,为防火部门提供科学、准确的火灾风险评估依据。
┌─────────────────────────────────────────────────────────────────┐
│ "智火卫渝" 智能预测平台 │
├─────────────────────────────────────────────────────────────────┤
│ 数据输入层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │ 火点数据 │ │ NDVI数据 │ │ 气象数据 │ │ 地理边界数据 │ │
│ │ (栅格) │ │ (栅格) │ │ (CSV) │ │ (Shapefile) │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └──────┬───────┘ │
│ │ │ │ │ │
│ ┌────▼──────────────▼──────────────▼────────────────▼───────┐ │
│ │ 数据预处理层 │ │
│ │ 栅格重采样 │ 云雾插补 │ 异常值剔除 │ 时空对齐 │ 站点分割 │ │
│ └──────────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────▼───────────────────────────────┐ │
│ │ 模型预测层 │ │
│ │ ┌─────────────┐ ┌──────────────┐ ┌─────────────────┐ │ │
│ │ │ 模型1: FE指数 │ │ 模型2: 火点KNN │ │ 模型2: NDVI-KNN │ │ │
│ │ │ (气象站点级) │ │ (栅格空间级) │ │ (栅格空间级) │ │ │
│ │ └─────────────┘ └──────────────┘ └─────────────────┘ │ │
│ │ ┌─────────────────────────────────────────────────┐ │ │
│ │ │ 模型1: Attention-LSTM (气象时序预测) │ │ │
│ │ └─────────────────────────────────────────────────┘ │ │
│ └──────────────────────────┬───────────────────────────────┘ │
│ │ │
│ ┌──────────────────────────▼───────────────────────────────┐ │
│ │ 结果可视化层 │ │
│ │ 地图绘制(Matplotlib) │ 交互图表(Plotly) │ Web界面(Flask) │ │
│ └───────────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────────┘
Chongqing_fire/
├── fireweb-system/ # Web 可视化系统
│ ├── web_flask.py # Flask 主应用(含所有路由与业务逻辑)
│ ├── web.py # Gradio 界面版本
│ ├── map.py # 地理信息与地图绘制(Folium)
│ ├── vis.py # 静态可视化脚本(Matplotlib)
│ ├── test.py # 测试脚本(MegaDepth 数据预处理)
│ └── templates/ # HTML 模板目录
│
├── hire-foresee/ # 预测建模代码
│ ├── 模型一/ # 气象数据模型(站点级)
│ │ ├── 1获取文件.py # 数据获取
│ │ ├── 2筛选气象要素.py # 特征筛选
│ │ ├── 2预处理.py # 数据清洗
│ │ ├── 3分割文件.py # 按站点分割气象数据
│ │ ├── 4建模气象-BI-LSTM.py # 双指数LSTM建模
│ │ ├── 5统计站点.py # 站点统计分析
│ │ ├── 6站点预测指.py # 站点级预测指标
│ │ ├── 6站点预测指实.py # 预测指标实现
│ │ ├── 7att_lstm分析.py # Attention-LSTM 分析
│ │ ├── 7lstm分析.py # LSTM 分析
│ │ ├── 7lstm实操.py # LSTM 实际操作
│ │ ├── 8-9-12月合并.py # 数据时间范围拼接
│ │ ├── 9FE指数公式.py # FE 指数计算公式
│ │ ├── 9FE指数代码.py # FE 指数代码实现
│ │ ├── 10预测指标可视化.py # 预测指标可视化
│ │ ├── FWI可视化/ # 火险指数可视化输出
│ │ └── 建模/ / 真实/ # 分割后的建模/验证数据
│ │
│ ├── 模型二-栅格/ # 栅格数据模型(空间级)
│ │ ├── 1获取栅格数据.py # 栅格数据下载
│ │ ├── 2裁剪研究区.py # 按重庆边界裁剪
│ │ ├── 3掩膜提取-重庆县域裁剪法.py # 掩膜提取
│ │ ├── 4建模气象-BI-LSTM栅格版.py # 栅格版LSTM
│ │ ├── 5数据的上传使用/ # 数据使用文档
│ │ ├── 6可视化-1图表.py # 图表可视化
│ │ ├── 6可视化-2空间图.py # 空间图可视化
│ │ ├── 栅格目录/ # 核心栅格处理脚本
│ │ │ ├── 1查看栅格数据.py # 栅格数据查看
│ │ │ ├── 2重采样栅格.py # 栅格重采样
│ │ │ ├── 4NDVI栅格-单通道.py # NDVI 单通道处理
│ │ │ ├── 4NDVI栅格-confidence.py # NDVI 置信度处理
│ │ │ ├── 5NDVI预测.py # NDVI 气候态-AR 混合预测
│ │ │ ├── 5火点KNN-单通道.py # 火点 KNN 单通道预测
│ │ │ ├── 5火点KNN-confidence.py # 火点 KNN 置信度预测
│ │ │ ├── 5火点KNN-双通道改进.py # 火点 KNN 双通道改进版
│ │ │ ├── 5火点KNN-双通道改进结果.py # 双通道结果分析
│ │ │ ├── 6局部预测结果.py # 局部预测结果
│ │ │ ├── 栅格点改/ # 预处理后栅格数据
│ │ │ │ ├── fire/ # 火点栅格 (2013-2021)
│ │ │ │ ├── fire-confidence/ # 火点置信度栅格
│ │ │ │ ├── NDVI/ # NDVI 栅格 (2013-2021)
│ │ │ │ └── 预测栅格输出/ # 模型预测输出
│ │ │ └── 区县边界/ # 重庆市区县边界 SHP
│ │ ├── 模型2火点预测结果/ # 火点预测图 (9-12月)
│ │ ├── 模型2预测栅格结果/ # 预测栅格 GeoTIFF
│ │ └── 图表统计/ # 统计图表输出
│ │
│ ├── 重庆市区县边界/ # 重庆市区县行政边界 Shapefile
│ ├── 13-21年气象站点数据/ # 气象站点原始数据
│ │ └── 重庆市气象数据/
│ │ ├── 4整理后的2013年到2021年9月气象数据.csv
│ │ ├── 5重庆所有站点的预测10-12月气象数据.csv
│ │ └── 6整合后的2021年9月到12月气象数据.csv
│ └── 火点shp/ # 火点 Shapefile 格式
│
├── 建模流程.md # 详细建模流程与技术报告(重模式)
├── 智火卫渝说明文档.docx # 完整系统说明文档
└── README.md # 本文件
| 数据类型 | 来源 | 空间分辨率 | 时间分辨率 | 数值范围 | 用途 |
|---|---|---|---|---|---|
| 火点(Fire) | 卫星遥感反演 | ~1km(452×461 栅格) | 月度(2013-2021) | 0-100(置信度) | 火情监测与预测 |
| NDVI | MODIS MOD13A3 | 1km | 月度(2013-2021) | [-1, 1] | 植被健康评估 |
| 气象站点数据 | 重庆市气象局 | 站点级(38个站点) | 日值(2013-2021) | 多种要素 | 火险指数计算 |
| 地理边界 | 国家基础地理信息中心 | 区县级 | 静态 | 矢量多边形 | 空间裁剪与制图 |
气象站点原始数据包含以下字段:
| 字段名 | 说明 | 用途 |
|---|---|---|
| 日期 | 观测日期 | 时间序列索引 |
| 站名 | 站点名称 | 分站建模 |
| 平均气温 / 最高气温 / 最低气温 | 温度指标(℃) | FE 指数的 TE 项 |
| 平均相对湿度 / 最小相对湿度 | 湿度指标(%) | FE 指数的 HE 项 |
| 平均气压 / 最高本站气压 | 气压指标(hPa) | 辅助分析 |
| 平均2分钟风速 / 极大风速 | 风速指标(m/s) | FE 指数的 WE 项 |
| 20-20时降水量 | 日降水量(mm) | FE 指数的 YRE 项 |
原始数据
│
├─ 气象数据:数据清洗 → 缺失值填补 → 按站点分割 → 8:1:1 训练/验证/测试划分
│
├─ 火点栅格:投影转换 → 边界裁剪 → 重采样 → 置信度分级
│
└─ NDVI 栅格:辐射定标 → 大气校正 → 云雾滤波 → 边界裁剪 → 时空对齐
本项目采用双层建模架构——模型一处理站点级气象时序数据,模型二处理栅格级空间分布数据,两层结果最终汇聚于 FE 指数火险评估体系。
用于预测未来气象要素(气温、湿度、降水等)趋势,为火险指数计算提供输入。
架构:在标准 LSTM 基础上融入 Attention 注意力机制,使模型能够自动聚焦于序列中关键时间步的信息:
输入序列 → LSTM 编码 → Attention 加权 → 全连接层 → 气象要素预测值
训练配置:
- 历史数据窗口:2013年1月 ~ 2021年9月(训练集)
- 预测范围:2021年10月 ~ 2021年12月(测试集)
- 训练轮次:100 epochs,Adam 优化器,学习率 0.01
- 损失函数:MSE(均方误差)
将每月的火点栅格展平为高维向量,构建"历史状态空间",用 KNN 回归推演未来状态。
- 训练集:2013-2020 年月度火点栅格(共约 89 个月)
- 测试集:2021 年 1-8 月数据
- 预测对象:2021 年 9-12 月
- K 值:K=5(取 5 个最近邻的均值作为预测)
- 递归策略:多步超前预测,通过非负约束 max(0, x) 控制误差累积
将 NDVI 时间序列分解为气候态基准(多年同期均值)和距平分量(AR 自回归):
- 气候态基准:计算每月在历史年份中的平均 NDVI 值,捕捉确定性季节规律
- 距平 AR 模型:对(实测值 - 气候态基准)的距平序列建立线性自回归:
- 滞后项:t-1, t-2(短期记忆), t-12(年际记忆)
- 参数估计:最小二乘法(OLS)
FE 指数综合五个分项指数:
FE = TE + HE + NRE + WE - YRE
| 分项 | 含义 | 数据来源 | 取值范围 |
|---|---|---|---|
| TE | 日最高温度火险指数 | 最高气温 | 0-20 |
| HE | 14时相对湿度火险指数 | 平均相对湿度 | 0-16 |
| NRE | 连续无降水日数火险指数 | 降水数据累计 | 0-50 |
| WE | 当日风力火险指数 | 平均风速 | 5-40 |
| YRE | 当日降水量火险指数 | 降水量 | 20-40 |
火险等级划分:
| FE 范围 | 等级 | 名称 | 颜色标识 |
|---|---|---|---|
| ≤20 | 1级 | 无火险 | 绿色 |
| 21-40 | 2级 | 低度火险 | 黄色 |
| 41-60 | 3级 | 中度火险 | 橙色 |
| 61-80 | 4级 | 高度火险 | 红色 |
| ≥81 | 5级 | 极度火险 | 紫色 |
将火点分布矩阵
物理约束(非负性):
分解:
-
$C_{m(t)}$ :月份$m(t)$ 的气候态基准(历史同期均值) -
$A_t = Y_t - C_{m(t)}$ :距平分量
AR 预测:
| 功能 | 说明 |
|---|---|
| 登录认证 | 用户名/密码认证,保护平台数据安全 |
| 上传 CSV | 上传气象数据文件(chongqing_hire_filled_date.csv) |
| 数据检索 | 按站点、日期范围查询历史与预测气象数据 |
| 功能 | 说明 |
|---|---|
| 分割气象数据 | 将气象数据按站点分割为独立 CSV 文件 |
| 数据预处理 | 清洗、标准化、缺失值处理 |
| 功能 | 算法 | 输入 | 输出 |
|---|---|---|---|
| 模型2-火点-KNN | KNN 多输出回归 | 历史火点栅格 | GeoTIFF 预测栅格 + MSE/MAE/R² |
| 模型2-NDVI-KNN | 气候态-AR 混合 | 历史 NDVI 栅格 | GeoTIFF 预测栅格 + MSE/MAE/R² |
| LSTM 分析 | Attention-LSTM | 历史气象数据 | 预测折线图 + 评估指标 |
| 火险等级分析 | FE 指数公式 | 气象数据 | 区县火险等级分布地图 |
| 功能 | 技术 | 说明 |
|---|---|---|
| 空间分析 | Matplotlib + GeoPandas | 按年月查看火点空间分布 |
| 地图展示 | Folium 交互地图 | 热力图、散点图、时间轴动画 |
| 图表分析 | Plotly/Matplotlib | 年/季统计柱状图、趋势折线图、置信度分布 |
| 模型2火点预测 | Matplotlib + Shapely | 2021年9-12月火点预测空间分布图 |
平台提供两种前端实现:
- Flask 版本(
web_flask.py):生产级 Web 应用,支持多用户认证、后台线程异步处理、Session 会话管理 - Gradio 版本(
web.py):快速原型展示,简化机器学习模型交互界面
- 操作系统:Windows 10+
- Python:3.8+
- 硬件:推荐 16GB+ RAM,支持 GPU 加速(TensorFlow/PyTorch CUDA)
# 创建 conda 环境(推荐)
conda create -n fire python=3.8
conda activate fire
# 核心依赖
pip install flask
pip install gradio
pip install pandas numpy
pip install scikit-learn
pip install tensorflow # 或 tensorflow-gpu
pip install torch torchvision # PyTorch(用于 Attention-LSTM)
pip install rasterio
pip install geopandas shapely
pip install matplotlib plotly
pip install fuzzywuzzy # 模糊匹配
pip install foliumcd fireweb-system
# 启动 Flask Web 应用
python web_flask.py
# 或启动 Gradio 原型界面
python web.py运行后访问本地链接(默认 http://127.0.0.1:5000),使用以下账号登录:
| 用户名 | 密码 |
|---|---|
| admin | admin123 |
| user1 | password123 |
将以下数据文件放置于 fireweb-system/ 同级目录(或修改 web_flask.py 中的路径配置):
chongqing_hire_filled_date.csv(火点数据)重庆市区县边界/区县.shp(地理边界)6整合后的2021年9月到12月气象数据.csv(气象数据)栅格处理/栅格点改/fire-confidence/(火点栅格)栅格处理/栅格点改/NDVI/(NDVI 栅格)
| 层级 | 技术 | 说明 |
|---|---|---|
| 后端框架 | Flask | 轻量级 Web 框架,路由与模板渲染 |
| 机器学习 | scikit-learn (KNN/LSTM) | KNN 回归、模型评估 |
| 深度学习 | PyTorch (Attention-LSTM) | 带注意力机制的长短期记忆网络 |
| 深度学习 | TensorFlow | 备用 GPU 加速框架 |
| 栅格处理 | Rasterio | 读取/写入 GeoTIFF 栅格数据 |
| 地理信息 | GeoPandas / Shapely | 矢量空间分析与边界处理 |
| 可视化 | Matplotlib | 静态地图与统计图表 |
| 交互图表 | Plotly / Plotly Express | 动态交互图表 |
| 交互地图 | Folium | Web 地图可视化 |
| 原型界面 | Gradio | 机器学习模型快速演示界面 |
| 数据处理 | Pandas / NumPy | 数据清洗与分析 |
| 指标 | 训练集 | 测试集 |
|---|---|---|
| MSE | ~0 | ~0.001 |
| MAE | ~0 | ~0.005 |
| R² | 0.982 | 0.971 |
由于火点数据的高度稀疏性(大部分栅格值为 0),模型能够极好地预测"无火"背景,同时对主要火点聚集区有较好的命中率。
| 模型 | 训练集 R² | 测试集 R² |
|---|---|---|
| 仅气候态基准 | N/A | 0.787 |
| KNN-Anomaly(对比) | 1.000 | 0.764 |
| Climatology-AR 混合 | 0.815 | 0.801 |
气候态基准解释了约 79% 的 NDVI 变异;引入 AR 模型后精度提升约 1.4%,代表了模型对"气候异常"的预测能力。
通过融合注意力机制,LSTM 模型能够自适应地聚焦于历史序列中的关键时间步(如极端高温/干旱事件),提升了对气象异常的捕捉能力。万州站 2021 年 10-12 月气温和湿度预测与实际值整体趋势吻合良好。
简洁的用户名/密码认证界面,支持管理员与普通用户区分。
上传 CSV 数据后自动生成:
- 每年火点数量柱状图
- 每年逐月火点趋势折线图
- 不同置信度火点堆叠柱状图
- 火灾发生趋势 2 年移动平均图
- 火点空间分布交互地图
按年份和月份筛选,生成带区县边界标注的火点空间分布图。
- 火点 KNN:显示 MSE/MAE/R² 指标,输出预测栅格并支持下载
- NDVI KNN:显示训练/测试集指标,输出 NDVI 预测栅格
- LSTM 分析:多站点多要素预测折线图(历史值 vs 预测值)
基于 FE 指数公式计算各站点火险等级,在地图上用绿/黄/橙/红/紫五色标识区县火险等级。
本项目为本科毕业设计作品,感谢重庆市气象局提供的气象站点数据,感谢 MODIS 卫星产品提供的火点与 NDVI 栅格数据支持。