1. 原始数据
维基百科:Zachary’s karate club - Wikipedia
原始论文:An Information Flow Model for Conflict and Fission in Small Groups
数据集中只有一张图。
该图描述了一个空手道俱乐部会员的社交关系,以34名会员作为节点,如果两位会员在俱乐部之外仍保持社交关系,则在节点间增加一条边。
每个节点具有一个34维的特征向量,一共有78条边。
在收集数据的过程中,管理人员 John A 和 教练 Mr. Hi(化名)之间产生了冲突,会员们选择了站队,一半会员跟随 Mr. Hi 成立了新俱乐部,剩下一半会员找了新教练或退出了俱乐部。通过收集到的图数据,Zachary 进行了分类,除1名会员外都分类正确。
2. NetworkX中的数据
官方文档:networkx.generators.social.karate_club_graph
无向图。一共有34个节点,78条无向、无权、无特征的边。节点具有club属性,取值为 Mr. Hi 或 Officer。
数据获取代码:G = nx.karate_club_graph()
数据文件来源:UCINET IV Datasets
3. PyG中的数据
官方文档:torch_geometric.datasets.KarateClub
源代码:torch_geometric.datasets.karate — pytorch_geometric 1.7.0 documentation
数据文件来源于NetworkX的karate_club_graph,在其基础上做了修改。也是34个节点,78条无向边(edge_index宽为156)。
(官方文档中说是156条边(指无向图边×2的数目))
基于论文 Kipf, T., & Welling, M. (2017). Semi-Supervised Classification with Graph Convolutional Networks. ArXiv, abs/1609.02907.(就是GCN那篇论文):
用 modularity-based clustering 给每个节点赋予一个四分类的标签(0 1 2 3)。在每一类中选一个节点作为该标签类的真实值节点,是train_mask为True对应索引的节点。(参考源代码:y是通过 community 的 community_louvain 计算出来的。然后将每一类的第一个节点作为真实值节点。)
每个节点有一个34维的特征(x),是独热编码的形式。(node ordering是随机的)
获取数据的方式:
from torch_geometric.datasets import KarateClub dataset = KarateClub() data = dataset[0] print(data)
Data(edge_index=[2, 156], train_mask=[34], x=[34, 34], y=[34])