图网络入门

article/2025/6/20 6:55:30

目录

图网络基础知识

Graph Embedding

基础图网络模型

GCN

GraphSAGE

GAT

其他图网络模型


图网络基础知识

图网络的应用场景有很多,目前在工业界的主要应用是在推荐和风控领域,其他包括社交网络、交通网络、化学分子、3D点云等也都有一些应用。

关于图这种数据结构的基础知识:

一张图又节点和边组成,边可以是有方向的,也可是无方向的,因此图可以分为有向图和无向图。

图的基本属性:度(degree),连通分量,图直径,度中心性,特征向量中心性,节点连接性(betweenness),节点中心性(closeness),pagerank,HITS

邻接矩阵 A

图网络的计算是直接基于图进行的,整个计算是沿着图结构进行的,能够有效保留和利用图上的结构信息。图网络的主要优点有:利于端到端的学习、擅长推理、可解释性强。

定义一张图的方法:

import numpy as np
import pandas as pd
import networkx as nx  # 复杂网络建模的一个工具包edges = pd.DataFrame()
edges['sources'] = [1,1,1,2,2,3,3,4,4,5,5,5]  # 起始节点,(每条边)
edges['targets'] = [2,4,5,3,1,2,5,1,5,1,3,4]  # 终止节点,(每条边的终点)
edges['weights'] = [1,1,1,1,1,1,1,1,1,1,1,1]  # 每条边的权重# 定义一张图
G = nx.from_pandas_edgelist(edges, source='sources', target='targets', edge_attr='weights')

Graph Embedding

前面的代码用于定义一张图结构,在实际场景中,直接这样使用会比较低效,因此会像NLP中将每个单词由 one-hot 编码转换成词向量一样,我们希望获取图中每个节点的表征向量,这种方法成为graph embedding,即基于图结构的数据挖掘。

graph embedding 的目的是获取图的每个节点的表征,理解为自然语言处理中每个词向量的表征。经典的 graph embedding 方法有以下几种。

DeepWalk

论文:DeepWalk: Online Learning of Social Representations KDD 2014 (星标)

LINE

论文:Line: Large-scale information network embedding WWW 2015 (星标)

SDNE

论文:Structural Deep Network Embedding  KDD 2016

Node2vec

论文: node2vec: Scalable Feature Learning for Networks KDD 2016 (星标)

Struc2vec

论文:struc2vec: Learning Node Representations from Structural Identity  KDD 2017

github 链接:https://github.com/shenweichen/GraphEmbedding 这个链接里面有以上5种方法的代码整理。

基础图网络模型

基础图网络模型主要有三个,分别是GCN、GAT、GraphSAGE。

目前,基础图网络模型主要分为基于频谱域模型和基于时空域的图网络模型。其中图卷积网络属于频谱域图网络,图注意力网络GAT和GraphSAGE属于时空域图网络模型。

GCN

论文:SEMI-SUPERVISED CLASSIFICATION WITH GRAPH CONVOLUTIONAL NETWORKS  ICLR 2017

图卷积网络GCN 是频谱域的方法,过程是不断聚合邻居节点和自己本身。图网络用在分类任务中,给每个节点进行分类,GCN 的整个过程是为了学习每个节点的 embedding 表示。

GCN(频谱域图网络模型)涉及到的数学基础知识较多一些,理解起来相对麻烦一些。主要的思想是需要通过图谱的邻接矩阵A和度矩阵D获得图谱的拉普拉斯矩阵L,然后对图谱的拉普拉斯矩阵进行特征值分解,并得到特征值对应的特征向量。此外还涉及到傅里叶变换、图信号的频谱分解、频率、基波等与特征值、特征向量之间的关系等等。图卷积网络涉及的数学知识更为繁多,也更具数学上的美感,由于笔者目前的水平有限,本文中暂时不对GCN进行更详细的介绍。(先挖一个坑,以后有机会来填)

GraphSAGE

论文:Inductive Representation Learning on Large Graphs  NIPS 2017

主要思想:采样(sample)+聚合(aggregate),时空域方法。

GAT

图注意力网络

论文:GRAPH ATTENTION NETWORKS. ICLR 2018

代码: https://github.com/Diego999/pyGAT

主要思想:聚合节点周围的邻居节点的信息,考虑不同邻居节点的权重。

在图机构上使用注意力机制,如下图所示:

GAT 中使用的是多头注意力机制,如下图所示:

关于GAT更详细的介绍,请关注笔者的另一篇博客:GAT论文阅读笔记-源码解读_xueliang-CSDN博客

其他图网络模型

除了上面三种最基础的图网络模型之外,还有一些其他的图网络模型,包括异构图、二部图、符号图、动态图、超图等。


http://chatgpt.dhexx.cn/article/NeH1U8Ek.shtml

相关文章

图网络(Graph Network, GN)

目录 什么是图网络? 图网络框架 图网络内容 图的定义 GN块的内部结构 图网络中的关系归纳偏置 什么是图网络? 图网络是2018年由DeepMind、谷歌大脑、MIT和爱丁堡大学等公司和机构的27位科学家共同发表的论文《Relational inductive biases, deep …

图网络分类以及一些通用框架

图网络大体分类 递归图神经网络(Recurrent Graph Neural Networks)图卷积神经网络(Graph Convolution Networks)图注意力网络(Graph Attention Networks)图自编码器(Graph Auto-encoder&#x…

泛型的使用和作用

概述 泛型的使用 多态与泛型 两者要一致,Animal 和cat要一致 泛型的作用 提高 Java 程序的类型安全 通过前面的学习我们知道, 在集合中可以添加 Object 类型的对象, 如果在不使用泛型的情况下定义了一个 ArrayList 对象, 那 么各…

java泛型(java泛型的作用)

java泛型的基本使用是什么? add("test1"); String test1 (String)strList。get(0); System。out。println("Test 1 : " test1); } public void testGeneric() { List strList new ArrayList(); strList。 Java泛型的规则和限制有哪些呢&…

java泛型的作用及实现原理

一、泛型的介绍 泛型是Java 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java泛型被引入的好处是安全简单。在Java …

泛型(一)--泛型的作用和定义

一、泛型的作用 泛型是.net中十分常见的一种特性。它是在.net 2.0的时候加入。那为什么要在.net 2.0的时候加入泛型这个特性呢?我们首先来看一段代码。 using System;namespace 泛型{class Program{static void Main(string[] args){int iParameter 1;string sPar…

什么叫泛型?有什么作用?

作者:Java3y 链接:https://www.zhihu.com/question/272185241/answer/366129174 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 一、什么是泛型? Java泛型设计原则:…

Java泛型的作用及优点有哪些

Java泛型是J2 SE1.5中引入的一个新特性,其本质是参数化类型,也就是说所操作的数据类型被指定为一个参数这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 作用 第一是泛化。可以用T代表任意类型Java语言中引入泛型是一个较大的功能增强不…

第十章 泛型

10.1 泛型的理解和好处 10.1.1使用传统方法的问题分析 1)不能加入到集合ArrayList中的数据类型进行约束(不安全) 2)遍历的时候,需要进行类型转换,如果集合中的数据量较大,对效率有影响 10.1.2泛型的好处 1)编译时…

简述泛型的基本使用和作用

前言 在上一篇文章中,给大家讲解了泛型的概念、作用、使用场景,以及泛型集合、泛型接口和泛型类的用法,但受限于篇幅,并没有把泛型的内容讲解完毕。所以今天我们会继续学习泛型方法、泛型擦除,以及通配符等的内容&…

军职在线大学计算机基础(自主模式),《军职在线》中国哲学经典著作导读(自主模式)...

《军职在线》中国哲学经典着作导读(自主模式) 1《周易》导读 测试题C A C B D C D B B D D A B C D C D B A B 2《道德经》导读 测试题D C D C C C D A D C D B C C C A B A A B 3《庄子》导读 测试题D C D A A C B A A C A A C A D C B 4《论语》导读 测试题B B C ED B A A A …

台湾国立大学(林轩田)《机器学习技法》(第7讲)blending and bagging

课程地址:https://class.coursera.org/ntumlone-001/class 课件讲义:http://download.csdn.net/download/malele4th/10212756 注明:文中图片来自《机器学习技法》课程和部分博客 建议:建议读者学习林轩田老师原课程&#xff0c…

大学有新民之道,则大学生者负新民工作之实际责任者也。

梅贻琦,(1889-1962),字月涵,为梅曾臣长子。自1914年由美国吴士脱大学学成归国,即到清华担任教学和教务长等多种职务。1931年,梅贻琦出任清华校长,自此后一直到他在台湾去世&#xff…

【转载】中庸与技术书

2019独角兽企业重金招聘Python工程师标准>>> 转自:图灵社区 原文作者:刘祺 原文地址:http://www.ituring.com.cn/article/213657 本次转载已经过原作者同意,二次转载请自行联系原作者 #中庸与技术书 在我写这篇文章之前…

《大学》《中庸》全文及翻译 (转载)

《大学》全文及翻译 原文: 大学之道,在明明德,在亲民,在止于至善。知止而后有定,定而后能静,静而后能安,安而后能虑,虑而后能得。物有本末,事有终始,知所先后…

[C语言]求一个数是否是2的n次方

设a8,a的二进制数为1000,若为16,则是 0001 0000,2的n次方转为二进制则只保留一个 1 , 其余位置全是0,因此只要判断这个数的二进制是否只有一个 1 ,则知道这个数是否是2的n次方。 //求一个数是…

C语言|s1-s0|<=10的-6次方

#include <stdio.h> #include <math.h> double fun(double x) { double s11.0,s00.0; double t1.0; int n1; do { s0s1;//此时s0为s1的上一项 tt*(0.5-n1)*x/n; s1s1t; n; } while(fabs(s1-s0)>1e…

c语言字母能乘10吗,c语言编程中表示a乘以10的n次幂怎么表示

可以参考下面的代码&#xff1a; #include int main() { float a,s,n; sa*mi(10,n); return 0; } float mi(float x,int y) { float a; int i; a1; if(y>0) { for(i1;i<y;i) { aa*x; } } else { for(i-1;i>y;i--) { aa/x; } } return a; } 扩展资料&#xff1a; C语言…

c语言学习-编写函数求x的n次方的值

编写函数求x的n次方的值 程序流程图&#xff1a; 代码&#xff1a; #include<stdio.h> long mul(int j ,int k) { int i; long mu1; for(i0;i<k;i) mumu*j; return mu; } void main() { int x,n; long m; printf("please enter x\tn\t"); scanf("%…

c语言x的n次方怎么写_C语言入门教程(三)进制与操作符

Hello,小伙伴们大家好,今天开始进入C语言第三课时的学习。进入今天正式内容之前呢,先来看一下上次课程中的留下的一道练习题。 练习: 1.编写程序计算半径为任意浮点数的圆周长并把结果打印在屏幕上 1、进制 一个字节分成八段,每段只能记录一个0或者1要想把一个数字记录在一…