跳转到主要内容

图形机器学习Python库

项目描述

StellarGraph Machine Learning library logo

pypi downloads

StellarGraph机器学习库

StellarGraph是一个用于在图和网络上进行机器学习的Python库。

目录

简介

StellarGraph库提供最先进的图机器学习算法,使您轻松发现模式并回答关于图结构数据的疑问。它可以解决许多机器学习任务

图结构数据将实体表示为节点(或顶点),将它们之间的关系表示为边(或链接),并且可以包括与它们相关的属性。例如,一个图可以包含人作为节点,他们之间的友谊作为链接,以及像一个人的年龄和建立友谊的日期这样的数据。StellarGraph支持分析许多类型的图

  • 同构图(具有一种类型的节点和链接),
  • 异构图(具有多种类型的节点和/或链接)
  • 知识图(具有数千种类型边的极端异构图)
  • 具有或没有与节点相关数据的图
  • 具有边权重的图

StellarGraph建立在TensorFlow 2及其Keras高级API之上,以及PandasNumPy。因此,它易于使用,模块化和可扩展。它与基于这些库的代码(如标准Keras层和scikit-learn)无缝互操作,因此可以轻松扩展StellarGraph提供的核心图机器学习算法。因此,它也易于使用pip或Anaconda进行安装

入门

众多详细且具有叙述的示例是开始使用StellarGraph的好方法。可能有一个与您的数据或问题相似(如果不是,请告诉我们)。

您可以通过点击每个Jupyter笔记本中的徽章立即在Google Colab或Binder中开始使用示例。

或者,您可以通过以下方式运行并下载本地副本的示例:通过克隆此存储库的master分支,或使用下面的curl命令

curl -L https://github.com/stellargraph/stellargraph/archive/master.zip | tar -xz --strip=1 stellargraph-master/demos

运行我们大多数演示笔记本所需的依赖项可以使用以下方法之一安装

  • 使用pippip install stellargraph[demos]
  • 使用condaconda install -c stellargraph stellargraph

(有关更多详细信息和其他选项,请参阅安装部分。)

获取帮助

如果您遇到问题或有问题,有许多方法可以取得进展并获得帮助或支持

示例:GCN

最早的图深度学习算法之一是图卷积网络(GCN)[6]。以下示例使用它进行节点分类:预测节点所属的类别。它展示了如何轻松使用StellarGraph进行应用,并展示了StellarGraph如何与Pandas和TensorFlow及其库无缝集成。

数据准备

StellarGraph的数据可以使用Pandas和scikit-learn等常见库准备。

import pandas as pd
from sklearn import model_selection

def load_my_data():
    # your own code to load data into Pandas DataFrames, e.g. from CSV files or a database
    ...

nodes, edges, targets = load_my_data()

# Use scikit-learn to compute training and test sets
train_targets, test_targets = model_selection.train_test_split(targets, train_size=0.5)

图机器学习模型

这是StellarGraph特有的部分。机器学习模型由一些图卷积层组成,之后是一个计算实际预测的TensorFlow张量的层。StellarGraph通过GCN模型类使构建所有这些层变得简单。它还通过StellarGraph图数据类型和数据生成器使获取正确格式输入数据变得简单。

import stellargraph as sg
import tensorflow as tf

# convert the raw data into StellarGraph's graph format for faster operations
graph = sg.StellarGraph(nodes, edges)

generator = sg.mapper.FullBatchNodeGenerator(graph, method="gcn")

# two layers of GCN, each with hidden dimension 16
gcn = sg.layer.GCN(layer_sizes=[16, 16], generator=generator)
x_inp, x_out = gcn.in_out_tensors() # create the input and output TensorFlow tensors

# use TensorFlow Keras to add a layer to compute the (one-hot) predictions
predictions = tf.keras.layers.Dense(units=len(ground_truth_targets.columns), activation="softmax")(x_out)

# use the input and output tensors to create a TensorFlow Keras model
model = tf.keras.Model(inputs=x_inp, outputs=predictions)

训练和评估

该模型是一个传统的TensorFlow Keras模型,因此训练和评估等任务可以使用Keras提供的功能。StellarGraph的数据生成器使构建所需的Keras Sequences变得简单。

# prepare the model for training with the Adam optimiser and an appropriate loss function
model.compile("adam", loss="categorical_crossentropy", metrics=["accuracy"])

# train the model on the train set
model.fit(generator.flow(train_targets.index, train_targets), epochs=5)

# check model generalisation on the test set
(loss, accuracy) = model.evaluate(generator.flow(test_targets.index, test_targets))
print(f"Test set: loss = {loss}, accuracy = {accuracy}")

该算法在其扩展叙述笔记本中进行了更详细的说明,请参阅其扩展叙述笔记本。我们提供了更多算法,每个算法都有详细的示例

算法

StellarGraph库目前包括以下图机器学习算法

算法 描述
GraphSAGE [1] 支持同构图的有监督和无监督表示学习,节点分类/回归和链接预测。当前实现支持多种聚合方法,包括均值、最大池化、均值池化和注意力聚合器。
HinSAGE GraphSAGE算法的异构图扩展。支持异构图表示学习、节点分类/回归和链接预测/回归。当前实现支持邻居节点的均值聚合,考虑它们类型以及它们之间链接的类型。
attri2vec [4] 支持具有节点属性的同构图节点表示学习、节点分类和样本外节点链接预测。
图注意力网络 (GAT) [5] GAT算法支持同构图表示学习和节点分类。存在支持稀疏和稠密邻接矩阵的图注意力层版本。
图卷积网络 (GCN) [6] GCN算法支持同构图表示学习和节点分类。存在支持稀疏和稠密邻接矩阵的图卷积层版本。
聚类图卷积网络 (Cluster-GCN) [10] GCN算法的扩展,支持同构图表示学习和节点分类。Cluster-GCN可以扩展到更大的图,并可以使用随机梯度下降训练更深的GCN模型。
简化图卷积网络 (SGC) [7] SGC网络算法支持同构图表示学习和节点分类。它是GCN算法的扩展,通过平滑图来引入节点更多远距离的邻居,而不使用多层。
(近似)神经预测的个性化传播 (PPNP/APPNP) [9] (A)PPNP算法支持具有属性的同构图快速和可扩展的表示学习和节点分类。在半监督设置中,首先使用节点属性作为输入训练一个多层神经网络。然后使用基于个性化PageRank的方法在图上传播后者的预测。
Node2Vec [2] Node2Vec和Deepwalk算法在考虑网络结构的同时忽略节点属性,对同构图进行无监督表示学习。node2vec算法通过结合StellarGraph的随机游走生成器与Gensim的word2vec算法实现。学习的节点表示可以用于使用Scikit-learn、Keras、TensorFlow或任何其他Python机器学习库实现的下游机器学习模型。
Metapath2Vec [3] 元路径2向量算法对异构网络进行无监督、元路径引导的表示学习,考虑网络结构而忽略节点属性。实现结合了StellarGraph的元路径引导随机游走生成器和Gensim词向量算法。与节点2向量类似,学习到的节点表示(节点嵌入)可以用于下游机器学习模型,解决节点分类、链接预测等异构网络的任务。
关系图卷积网络[11] RGCN算法在知识图谱上执行半监督学习,用于节点表示和节点分类。RGCN扩展GCN以处理具有多种边类型的有向图,并且与稀疏和稠密邻接矩阵一起工作。
ComplEx[12] ComplEx算法在知识图谱中计算节点(实体)和边类型(关系)的嵌入,并可用于链接预测。
图波[13] GraphWave通过图中的小波扩散计算无监督的结构嵌入。
监督图分类 一个基于GCN[6]层和平均池化读出的监督图分类模型。
Watch Your Step [14] Watch Your Step算法通过使用邻接幂来模拟期望的随机游走来计算节点嵌入。
深度图信息最大化[15] 深度图信息最大化训练无监督GNN以最大化节点级和图级特征之间的共享信息。
连续时间动态网络嵌入(CTDNE)[16] 支持遵守时间尊重的随机游走,可以像Node2Vec一样用于无监督表示学习。
DistMult [17] DistMult算法在知识图谱中计算节点(实体)和边类型(关系)的嵌入,并可用于链接预测。
DGCNN [18] 深度图卷积神经网络(DGCNN)算法用于监督图分类。
TGCN [19] StellarGraph中的GCN_LSTM模型遵循TGCN论文中提出的时序图卷积网络架构,并在层架构中进行了少量改进。

安装

StellarGraph是一个Python 3库,我们推荐使用Python版本3.6。所需的Python版本可以从python.org下载和安装。或者,使用Anaconda Python环境,可从anaconda.com获取。

StellarGraph库可以从PyPI、Anaconda Cloud或直接从GitHub安装,具体方法如下。

使用PyPI安装StellarGraph

要使用pipPyPI安装StellarGraph库,请执行以下命令

pip install stellargraph

一些示例需要安装额外的依赖项以及stellargraph。要使用pip安装这些依赖项以及StellarGraph,请执行以下命令

pip install stellargraph[demos]

社区检测示例需要python-igraph,它仅在某些平台上可用。要安装此软件包以及其他演示需求,请执行以下命令

pip install stellargraph[demos,igraph]

在Anaconda Python中安装StellarGraph

StellarGraph库可在Anaconda Cloud找到,并可以使用conda命令行工具在Anaconda Python中安装,执行以下命令

conda install -c stellargraph stellargraph

从GitHub源安装StellarGraph

首先,使用git克隆StellarGraph存储库

git clone https://github.com/stellargraph/stellargraph.git

然后,cd到StellarGraph文件夹,并执行以下命令安装库

cd stellargraph
pip install .

一些demos目录中的示例需要安装额外的依赖项以及stellargraph。要使用pip安装这些依赖项以及StellarGraph,请执行以下命令

pip install .[demos]

引用

StellarGraph由CSIRO的Data61设计和支持。如果您在研究中使用此库的任何部分,请使用以下BibTex条目引用它

@misc{StellarGraph,
  author = {CSIRO's Data61},
  title = {StellarGraph Machine Learning Library},
  year = {2018},
  publisher = {GitHub},
  journal = {GitHub Repository},
  howpublished = {\url{https://github.com/stellargraph/stellargraph}},
}

参考文献

  1. 大图上的归纳表示学习。W.L. Hamilton, R. Ying, 和 J. Leskovec。神经信息处理系统(NIPS),2017。(链接 网页

  2. Node2Vec:网络的缩放特征学习。A. Grover, J. Leskovec。ACM SIGKDD国际知识发现和数据挖掘会议(KDD),2016。(链接

  3. Metapath2Vec:异构网络的缩放表示学习。Yuxiao Dong, Nitesh V. Chawla, 和 Ananthram Swami。ACM SIGKDD国际知识发现和数据挖掘会议(KDD),2017,第135-144页。(链接

  4. 通过子空间发现进行属性网络嵌入。D. Zhang, Y. Jie, X. Zhu 和 C. Zhang,数据挖掘与知识发现,2019。(链接

  5. 图注意力网络。P. Veličković 等。学习表示国际会议(ICLR),2018。(链接

  6. 图卷积网络(GCN):半监督分类与图卷积网络。Thomas N. Kipf, Max Welling。学习表示国际会议(ICLR),2017。(链接

  7. 简化图卷积网络。F. Wu, T. Zhang, A. H. de Souza, C. Fifty, T. Yu, 和 K. Q. Weinberger。国际机器学习会议(ICML),2019。(链接

  8. 图数据上的对抗样本:攻击与防御的深入洞察。H. Wu, C. Wang, Y. Tyshetskiy, A. Docherty, K. Lu, 和 L. Zhu。IJCAI 2019。(链接

  9. 预测然后传播:图神经网络与个性化PageRank的相遇。J. Klicpera, A. Bojchevski, A.,和 S. Günnemann,ICLR,2019,arXiv:1810.05997。(链接

  10. Cluster-GCN:训练深度和大图卷积网络的效率算法。W. Chiang, X. Liu, S. Si, Y. Li, S. Bengio, 和 C. Hsiej,KDD,2019,arXiv:1905.07953。(链接

  11. 用图卷积网络建模关系数据。M. Schlichtkrull, T. N. Kipf, P. Bloem, R. Van Den Berg, I. Titov, 和 M. Welling,欧洲语义网会议(2018),arXiv:1609.02907。(链接

  12. 简单链接预测的复杂嵌入。T. Trouillon, J. Welbl, S. Riedel, É. Gaussier 和 G. Bouchard,ICML 2016。(链接

  13. 通过扩散小波学习结构节点嵌入。C. Donnat, M. Zitnik, D. Hallac, 和 J. Leskovec,SIGKDD,2018,arXiv:1710.10321。(链接

  14. 注意你的步伐:通过图注意力学习节点嵌入。S. Abu-El-Haija, B. Perozzi, R. Al-Rfou 和 A. Alemi,NIPS,2018。arXiv:1710.09599。(链接

  15. 深度图信息最大化。P. Veličković, W. Fedus, W. L. Hamilton, P. Lio, Y. Bengio, R. D. Hjelm,ICLR,2019,arXiv:1809.10341。(链接

  16. 连续时间动态网络嵌入。Giang Hoang Nguyen, John Boaz Lee, Ryan A. Rossi, Nesreen K. Ahmed, Eunyee Koh, 和 Sungchul Kim。第三届国际大网络表示学习研讨会(WWW BigNet)2018。(链接

  17. 为知识库中的学习和推理嵌入实体和关系。Bishan Yang, Wen-tau Yih, Xiaodong He, Jianfeng Gao, 和 Li Deng,ICLR,2015。arXiv:1412.6575。(链接

  18. 用于图分类的端到端深度学习架构。Muhan Zhang, Zhicheng Cui, Marion Neumann, 和 Yixin Chen,AAAI,2018。(链接

  19. 时序图卷积网络交通预测:T-GCN。作者:Ling Zhao,Yujiao Song,Chao Zhang,Yu Liu,Pu Wang,Tao Lin,Min Deng,和Haifeng Li。IEEE智能运输系统学报,2019。(链接

项目详情


下载文件

下载适用于您的平台文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分布

stellargraph-1.2.1.tar.gz (324.4 KB 查看哈希值

上传时间 源代码

构建版本

stellargraph-1.2.1-py3-none-any.whl (435.2 KB 查看哈希值

上传时间 Python 3

由以下机构支持