GeoAI-使用图神经网络创建空间图结构(GIS+GCN)

本文主要介绍了如何初步构建一个地理图神经网络,构建具体的网络结构敬请期待后续的更新!!

1.准备节点和边

1.1准备节点

本文使用的是街景图像(在采集前期已经在GIS中生成了采样点,我采用的是语义分割数据

这里你可是使用任何数据,只要能映射到点中。(说白了GCN就是将不同的内容通过张量进行连接)注:由于一条街道对应多个街景图像(这里取均值),本文构建的是单层网络,多层可以参考论文 http://dx.doi.org/10.1016/j.isprsjprs.2023.03.008

看一下,我的道路有5075条边,要保证无路多少数据,最后都要映射到这些边上面(每条边意味着每个点,所以一共是5075个点

1.2准备边

准备边的方式很多,但最重要的是起点&终点两个参数。你可以使用空间统计工具--空间关系模型--生成空间权重矩阵  进行边的准备。或者参考这一篇帖子↓空间相关分析(一) 空间权重矩阵_皖渝的博客-CSDN博客        之前的博客分享了各行政区shp文件的制作方法,在拿到shp文件后就可以进行空间相关分析啦。今天来介绍一下空间相关分析的第一步——空间权重矩阵的创建。目录定义介绍Geoda创建空间权重矩阵Arcgis创建空间权重矩阵定义介绍      &n...https://blog.csdn.net/shine4869/article/details/105786062

① 使用生成空间权重矩阵寻找道路的邻接内容(你可以尝试不同的邻接方式)

  ② 使用这个工具将权重矩阵转化为表的形式(最后的数据结构如图所示)

 

 

 ③ 将这些数据准备好放在csv文件中(方便下一步操作!!)

 

 Edge_Knear.csv ↓,点与点之间的连接是有距离的,这里将点与点之间的距离之和作为边的权重。我的文件中一共是28543条边(根据你使用的邻接方法,边的数量也不同)

  Node.csv ↓,注意这个文件中的id序号一定是5075个,因为对应着每个点。

2.构建图(DGL库)

2.1构建点(建议先构建点)

先把点特征load进来,转化成tensor

# 点特征
embeddings=pd.read_csv('.....csv').values[:,1:].T    #图嵌入后的点特征
x = torch.tensor(embeddings, dtype=torch.float)

 接着创建一个空的DGL图,把节点利用G.ndata 方法添加节点。

# 创建一个空的 DGL 图
G = dgl.DGLGraph()

# 添加节点并设置节点特征
num_nodes = len(x)
node_features = x
G.add_nodes(num_nodes)
G.ndata['features'] = node_features
G

 打印出图的初步结构,这一步没有边的特征。(注:这里用的是别的数据所以点数量是5458

 如果你有多个点特征,你可以将他们转为字典的形式更新

g.ndata.update({'club' : club, 'club_onehot' : club_onehot})

2.2构建边

# load 边数据
edge_data = pd.read_csv('....csv')
print(edge_data)

# 将数据转化为numpy或者tensor都可以
src = edge_data['src'].to_numpy()
dst = edge_data['dst'].to_numpy()

# 使用 add_edges() 方法向图形对象中添加边缘
G.add_edges(src, dst)
# 添加边的权重信息
edge_weight = torch.tensor(edge_data['Weight'].to_numpy())

# 使用edata添加边的权重
g.edata['weight'] = edge_weight

2.3可视化

可以使用networkx包进行可视化,需要注意的是,当你的图特别大的时候可能要花很长时间才能可视化出来。

# 先可视化一下这张图
import networkx as nx
import matplotlib.pyplot as plt

nx_G = g.to_networkx()  #先把图转成network的格式
pos = nx.spring_layout(nx_G)
nx.draw(nx_G.to_undirected(), pos, with_labels=True, node_size=200)  #把图转化成无向图
plt.show()

更多自学内容可以参考以下:

B站子豪兄的图神经网络讲解:【斯坦福CS224W图机器学习、图神经网络、知识图谱【同济子豪兄】】 https://www.bilibili.com/video/BV1pR4y1S7GA/?share_source=copy_web&vd_source=b1540cf6d9c18239cab6743ed8bd05b2

李沐大佬的讲解:【零基础多图详解图神经网络(GNN/GCN)【论文精读】】 https://www.bilibili.com/video/BV1iT4y1d7zP/?share_source=copy_web&vd_source=b1540cf6d9c18239cab6743ed8bd05b2

关于GeoAI的论文,可以参考以下学者的研究:

https://www.researchgate.net/profile/Yan-Zhang-532

https://www.researchgate.net/profile/Pengyuan-Liu-3

还有distill上面的文章:A Gentle Introduction to Graph Neural Networks

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值