GNNWR(Geographically Neural Network Weighted Regression,地理神经网络加权回归)是一个用于空间回归与时空回归的 Python 库。其目标是在回归建模中引入地理位置因素,使回归系数随空间位置变化,从而刻画空间非平稳性。
用途
GNNWR 用于构建空间变系数回归模型。当数据同时包含自变量、因变量和地理坐标时,可以使用它训练一个以神经网络学习地理权重的回归模型,得到每个样本位置上的回归系数与预测值。库还提供时空版本 GTNNWR,在空间坐标之外加入时间坐标,用于处理时空维度的变系数回归。
主要能力
- 模型:models.GNNWR 提供基于神经网络地理权重的空间回归;models.GTNNWR 在此基础上加入时间加权,用于时空回归。
- 数据处理:datasets.init_dataset 负责数据划分、归一化和距离矩阵构建,支持 test_ratio、valid_ratio、batch_size、sample_seed 等参数,可通过 process_fn 选择 minmax_scale 或 standard_scale,通过 spatial_fun 选择 Euclidean 或 ManhattanDistance。
- 时空支持:在 init_dataset 中传入 temporal_column(如 year、month)并设置 use_model="gtnnwr" 即可启用时空模型。
- 大数据支持:当样本量较大时,可通过 knn_k 参数只计算 k 个最近邻的距离,构建稀疏距离矩阵。资料给出的示例说明 N=100k 时全量矩阵约 55GB,而 knn_k=2000 时约 763MB。
- 训练控制:支持 use_gpu、optimizer(Adam、SGD、AdamW、Adagrad、RMSprop)、start_lr、drop_out、dense_layers、early_stop、batch_norm、use_ols 等超参数。
- 诊断统计:model._test_diagnosis 提供 R2()、RMSE()、AIC()、AICc()、F1_Global()(GNNWR 对比 OLS 的显著性)、F2_Global()(空间权重显著性)、F3_Local()(逐变量显著性,返回两个字典)。当 N>10k 时自动进入 lite 模式,只保留 R²/RMSE,跳过 Hat 矩阵相关诊断。
- 可视化:utils.Visualize 内置基于 folium 的交互式地图,可绘制数据集分布与各系数热力图。
使用方式
基本流程为:读取数据(如 pandas.read_csv),调用 datasets.init_dataset 完成划分与预处理,实例化 models.GNNWR 或 models.GTNNWR,调用 model.run(max_epoch, early_stop) 训练,再用 model.reg_result(only_return=True) 获取系数与预测的 DataFrame(列名形如 coef_x1、coef_x2、Pred_y),用 model.result() 查看 R²、AIC、RMSE、F 检验等汇总。可视化可通过 utils.Visualize 生成 folium 地图,或结合 matplotlib、GeoPandas、contextily 绘制静态出版级图件。
适用场景
- 需要空间变系数且使用神经网络加权的回归分析,尤其是传统 GWR 在计算上难以承受的大数据集。
- 需要在空间维度之外同时考虑时间维度的变系数回归。
- 需要输出系数空间分布图以便解释变量影响随位置变化的研究。
限制与取舍
资料同时列出了与替代工具的比较:若需要成熟推断统计与带宽权重,可考虑 mgwr / GWR4 等经典 GWR;若只需无自变量的空间插值,可使用 verde / scikit-gstat 或克里金;若假设不存在空间非平稳性,可用 statsmodels / scikit-learn 做全局回归基线。
资料列出的常见问题包括:忘记传 spatial_column 会导致模型退化为全局回归;未设置 knn_k 且 N>10k 时距离矩阵可能内存溢出;start_lr 过高会导致损失爆炸;未设置 early_stop 可能导致过拟合;GTNNWR 缺少 temp_column 时会静默回退为 GNNWR;系数尺度问题可通过 reg_result() 获取反归一化预测。
官方文本暂未提供,具体安装方式、版本、许可证与收费信息暂未提供。