开源 City2Graph:城市数据转异构图,异构图神经网络聚类效果翻倍

2026-08-13

开源库 City2Graph 把城市数据统一转成异构图对接 GNN;利物浦实测,轮廓系数从同构 0.19 翻倍到 0.39。

这篇在解决什么

城市的数据天生是多类别的:建筑、街道、公交站点、兴趣点(POI)、行政区块,它们之间的连接方式各不相同。图神经网络(GNN)本来就是处理这类关系的利器,而其中能区分「哪一类东西连到哪一类」的异构图模型,比把所有节点当成同一种的同构图模型更贴合城市这种复杂系统。

瓶颈卡在预处理。建图这件事没人爱做:每个数据来源(形态、交通、出行、邻近)都有自己的解析套路,而要把建好的图喂给 PyTorch Geometric 训练,还得再写一套转换代码把它变成张量。更麻烦的是,图一旦从「画地图」用到「算中心性」再用到「训练 GNN」,每种工具要求的格式都不一样,这段胶水代码就得反复重写。结果就是异构图模型这套更强的工具,在真实城市研究里很少被真正用起来。

方法

City2Graph 的贡献是一个库,不是新模型。三个设计选择都直指上面的痛点。

第一,用一套接口覆盖四个数据域:形态域把建筑、街道和镶嵌单元(Tessellation)拼成形态图;交通域吃 GTFS 公交时刻表,产出站点间的旅行时间图;出行域把起讫点(OD)矩阵变成带权流动图;邻近域生成 KNN、Waxman、Delaunay 或邻接图。建图从此只是几行代码,不再是预处理项目。

第二,几何信息全程保留,同一张图可以在 GeoPandas、NetworkX、PyTorch Geometric 的 Data/HeteroData、rustworkx 之间来回转换。在 NetworkX 里探索、在 rustworkx 里跑重算法、在 PyG 里训练、再画回地图,中间不用为每种工具重写一遍转换。这正是人们反复在重写的部分。

第三,提供元路径(Metapath)构造 addmetapaths,把跨类型的复合关系物化成边,比如「区块→公交→区块」这种多模态可达链路。异构图模型 HAN 这类架构正是靠元路径加注意力来学结构的,没有标准化的构造方式,这类模型几乎没法落地。PyTorch 本身是可选依赖,核心建图与分析只靠 GeoPandas 和 NetworkX。

案例验证在利物浦做城市功能聚类,1624 个普查输出区(Output Area)作为节点,用 Overture Maps 的土地利用和 POI 当节点特征。建了三种关系:空间邻接(4782 条边)、步行 15 分钟可达(28265 条边)、多模态 15 分钟可达(69403 条边)。对比的是图自编码器(GAE)框架下的两套编码器:同构的 GAT(只看邻接图)和异构的 HAN(在元路径上做语义注意力、每条关系配一个 DistMult 解码器)。全程在一块 Apple M2 CPU 上跑,没用 GPU。

结果

四组独立指标(均值±标准差,异构都是 HAN-GAE):

模型轮廓系数↑Davies-Bouldin↓Calinski-Harabasz↑邻接模块度↑
PCA 基线0.19 ± 0.011.761390.09
GAT-GAE(同构)0.19 ± 0.011.541780.60
HAN-GAE Walk0.37 ± 0.061.014350.77
HAN-GAE Multi0.39 ± 0.040.907380.75
HAN-GAE All0.38 ± 0.040.936120.79

异构模型在四组指标上全面领先同构:轮廓系数翻倍(0.19 到约 0.39),Davies-Bouldin 几乎砍半,Calinski-Harabasz 涨到约四倍。更关键的是模块度,它衡量聚类与底层空间网络的吻合程度。HAN-GAE All 在多模态可达图上的模块度是 0.28,同构 GAT 只有 0.08。这说明异构图学到的簇不只是「挨得近」,而是顺着步行加公交的可达结构成块,与定义的可达模式更贴合。

一个反向证据:去掉节点特征、只用图结构的「S」变体模块度几乎归零,只能凑出两个簇。城市的功能信号主要来自土地利用和 POI 这些特征,纯拓扑结构分不出功能。

为什么重要

对做 GeoAI 和城市计算的人来说,它把异构图 GNN 的使用门槛从「先写两周预处理」降到几行代码。这是一篇基础设施式的工具论文,价值在标准化和可复现,不是提出新架构。用一台笔记本 CPU 就能复现利物浦全流程,代码 BSD、数据 CC-BY、流程用 uv 锁死依赖并上传 Zenodo。它补的是 OSMnx 的缺:OSMnx 专攻 OpenStreetMap 街道网,City2Graph 把建筑、公交、出行、邻近和异构图工作流接了进来,两者互补。

局限与存疑

验证只覆盖一个城市、一个任务(功能聚类)。指标全是聚类的内部度量,轮廓系数标准差还不小(±0.06)。K 由轮廓系数搜索决定,异构模型挑出的簇数从 22 到 44 不等,同构只有 5 个,这不是同等 K 下的比较,44 个簇对 1624 个区块是否好解释,论文没有展开。机器学习层面没有新东西,用的是现成的 GAT 和 HAN,贡献在工程和流水线。最后,信号主要靠节点特征撑起来,不能算纯粹的图结构胜利。

术语

原文与代码

社区讨论

全部论文解读