[datawhale202302]CS224W图机器学习:图的基本表示及特征工程

news2024/11/15 20:02:09

结论速递

本章涉及了图基本表示及传统的特征工程。
图由节点和连接组成,节点和连接上都可以有不同的属性。根据属性的特点,分为几类不同的图,其中异质图和二分图是比较重要的特殊图。
图可以用邻接矩阵进行结构化表示,如果图过于稀疏,也可以使用连接列表和邻接列表来表示。图的节点度、图的连接性是图非常重要的性质,他们都可以从邻接矩阵中直观计算得到。
图的传统特征工程分为节点的、边的、还有全图的特征工程。度、连接和graphlet是贯穿始终的重要概念。

前情提要

  1. 图机器学习导论

目录

    • 结论速递
    • 前情提要
  • 1 图的基本表示
    • 1.1 图的本体设计
    • 1.2 图的种类
    • 1.3 图的性质
      • 1.3.1 节点连接数
      • 1.3.2 图的基本表示
      • 1.3.3 图的连通性
    • 1.4 思考题
  • 2 图特征工程(传统方法,针对无向图)
    • 2.1 节点的特征
      • 2.1.1 特征种类
      • 2.1.2 用途
      • 2.1.3 思考题
    • 2.2 连接的特征
    • 2.3 全图的特征
  • 参考阅读

1 图的基本表示

图由节点和连接组成。

在这里插入图片描述

1.1 图的本体设计

图的本体Ontology设计:设计好节点、连接的种类,包含的信息、可能存在的取值。

  • 本体的设计应该在导入数据之前完成,导入数据后具体的图是这个抽象本体
  • 设计图的本体应该根据将来想要用这张图解决的问题类型来进行。

1.2 图的种类

根据边的方向可以分为:

  • 无向图(箭头无向)
  • 有向图

一些结构比较复杂,但常见的图包括:

  • 异质图heterogeneous graph:节点、连接存在不同的类型
  • 二分图bipartite graph:两种节点,同类节点内部无连接
    • 可以将二分图展开Folded network:对一类节点,把与同一个另外一类节点有关系的节点相连,变成两张只有同类节点的图

      在这里插入图片描述

此外如果根据边是否有权重,还可以分为无权图和有权图;如果无向图中节点存在自己连向自己的边,则为self-loop,两个节点间存在多条边,则为multigraph。

1.3 图的性质

1.3.1 节点连接数

  • 度(Degree):有多少个节点与该节点相连
    • 无向图:与该节点相连的边数
    • 有向图:分为进和出(进一步可以区分源与汇)
  • 节点平均度:图中所有节点的平均连接数是多少。
    • 无向图: k = E 2 N k = \frac{E}{2N} k=2NE
    • 有向图: k = E N k = \frac{E}{N} k=NE

上述两个概念对有向图和无向图有不同的计算方式。

1.3.2 图的基本表示

将图变成结构化的矩阵形式,充分利用矩阵运算的能力。

  • 邻接矩阵:可以用邻接矩阵来表示一个图,无向图的邻接矩阵为对称矩阵,有向图则为非对称。

由于图的节点非常多,但存在的连接或许并不多,则整个矩阵将非常稀疏,此时可以考虑使用连接列表,邻接列表来稀疏化表示。

  • 连接列表:记录有连接的节点对。具体实现为python中一系列的tuple(三元组)。

  • 邻接列表:记录对每一个节点来说,指向的下一个节点。具体实现为python中的一系列的dict。

    在这里插入图片描述

可以补上代码实战

1.3.3 图的连通性

对无向图,如果

  • 连通图connected graph:任意两个节点间都有一条路径可以连通。

  • 非连通图disconnected graph:由多个连通域(连通的子图)构成,但不满足连通图的要求,其中连通域称为connected component,最大连通域giant component,离群点isolated node。

    非连通图在邻接矩阵中,可以整理为分块对角的形式,如果打破了这一形式,就会成为连通图。

    在这里插入图片描述

在有向图中有相似的概念:

  • 强连通图strongly connected graph:方向严格联通
  • 弱连通图weakly connected graph:忽略方向时联通

同样也有强连通域等。

1.4 思考题

  • 举几个Heherogeneous Graph(异质图)的例子
    人发表论文的发表网络,人和论文属于不同性质的节点。
  • 异质图和普通图有什么区别?
    异质图上节点的性质不同,普通图节点的性质往往是一致的。
  • 举几个Bipartite Graph(二分图)的例子
    人发表论文的发表网络。
  • 举几个有向图的例子
    食物链;电视剧中的人物关系(人物间存在单向关系比如:仇恨、暗恋等)。
  • 如何设计本体图Ontology?
    先抽象自己要研究的问题,确定哪些作为节点、哪些作为边,设计需要哪些属性。
  • 为什么要把图表示成矩阵?
    方便计算机处理。近些年来计算机矩阵运算的算力和计算速度飞速发展,将图表示为矩阵可以有效利用计算机的运算能力。
  • 如何从连通域的角度,理解“六度空间”理论:世界上任意两个人,可以通过不超过六个中间人,相互认识。
    世界上所有的人都在同一个连通域内,任意两人的连通最短路径将经过中间节点的数量不超过六个。
  • 为什么很多真实场景的图都是稀疏的?
    真实场景中节点和节点间连接的关系并不会很密集,图的平均节点度也并不会很高。

2 图特征工程(传统方法,针对无向图)

传统方法包括:人工特征工程、机器学习。

为什么需要特征工程?

因为节点层面、连接层面、子图/全图层面都需要提取特征成为向量/矩阵才能给计算机处理。

邻接矩阵不够吗?

不够。因为节点、边都可以有一系列的attributes,如权重、类型、排名、甚至是多模态的特征等,这些称之为属性特征。此外,还有在图中,节点和边、节点与节点之间的连接关系,这些称之为连接特征。邻接矩阵过于离散,需要特征描述来补充信息。

此处特征工程主要涉及连接特征。合理的特征工程将帮助传统机器学习方法发挥更好的效果。

2.1 节点的特征

2.1.1 特征种类

即描述:节点在图中扮演什么角色。

机器学习任务:输入某个节点的D维向量,输出该节点是某类的概率。

在这里插入图片描述

可以构造如下特征:

  • 节点度:只看数量、不看质量。邻接矩阵按行/列加起来就可以

  • 节点重要程度node centrality

    • eigenvector centrality:特征向量节点重要度,节点在图中越中心,则节点越重要。(PageRank和这个有点接近,有什么区别?)

      相邻节点的重要度求和, c v = 1 λ ∑ u ∈ N ( v ) c u c_v = \frac{1}{\lambda} \sum_{u \in N(v)}{c_u} cv=λ1uN(v)cu

      这是一个递归求和问题。

      可以等价成,求邻接矩阵A的特征向量c λ c = A c \lambda c =A c λc=Ac.

      在这里插入图片描述

    • betweenness centrality:节点是否在必经之地,是否为交通枢纽

      对某一个节点,图中不含它的节点对连通最短路径经过它的比例

      c v = ∑ s ! = v ! = t 连通节点对最短路径经过 v 的数量 节点对数 c_v = \sum_{s != v != t} \frac{连通节点对最短路径经过v的数量}{节点对数} cv=s!=v!=t节点对数连通节点对最短路径经过v的数量

    • closeness centrality:某个节点是不是去哪儿都近

      某一节点到其它节点的最短路径之和的倒数。

      c v = 1 ∑ u ! = v 节点 v 到其它节点 v 的最短路径 c_v = \frac{1}{\sum_{u != v}节点v到其它节点v的最短路径} cv=u!=v节点v到其它节点v的最短路径1

  • 集群系数clustering coefficient:衡量一个节点周围有多抱团

    某一节点的邻接节点两两也相连的比例。

    e v = 邻接节点两两相连数(三角形个数) C k v 2 e_v = \frac{邻接节点两两相连数(三角形个数)}{C_{k_v}^2} ev=Ckv2邻接节点两两相连数(三角形个数)

  • graphlets:统计预定义子图形状(连接形式)

    ego-network自我中心网络(三角形作为子图),周围子图可能构成的形状称为graphlet(有点像同分异构体可能的构成,只不过只考虑C不考虑H)。

    • Graphlet Degree Vector(GDV):对某一个节点,提取其周围不同graphlet角色(预先定义好)的节点个数

      在这里插入图片描述

      上述案例,统计附近5个节点,graphlet种类是upto3(也包括2)

      graphlet的模式是定义好的,相当于构造对应graphlet形式的直方图。

      在这里插入图片描述

      GDV是一种非常全面的对连接信息的描述。

      在networkX里称为Atlas。

2.1.2 用途

如果要分析节点的重要程度:

  • node degree
  • node centrality

除此之外还有,PageRank, Katz Centrality,HITS Hubs and Authorities

如果要分析节点周围局部邻域的拓扑连接结构:

  • node degree
  • clustering coefficient
  • graphlet count vector

2.1.3 思考题

standfor官方的思考题,描述了当前节点特征的局限性,即无法对图分片进行特征描述,后面的特征提取方法会继续涉及到这一部分。

在这里插入图片描述

2.2 连接的特征

即,提取连接的特征,把link变成D维向量,表征连接结构信息。

机器学习任务:通过已知的连接去补全未知的连接。

  • 可能是同一时刻的有连接缺失补全,如蛋白质、分子
  • 可能是预测下一个时刻会产生的新连接,如论文引用网络

在这里插入图片描述

如:你可能认识的人
工作流大致如下:

提取连接特征为D维向量,送入到机器学习模型中去做预测,得到一个分数,从而来判断连接是否存在。

在这里插入图片描述

连接的特征分为三类:

  • 基于两节点距离distance-based feature:

    • 最短路径长度shortest-path distance between two nodes
      缺点:忽略了路径经过edge的数量和通路的结构
  • 基于两节点局部连接信息local neighborhood overlap:
    缺点:无法衡量两个没有共同邻域节点之间的关系

    • 共同好友个数common neighbors
    • 交并比Jaccard’s coefficient:周围邻域节点集的交集比上并集
    • Adamic-Adar index:A和B的共同邻域节点的连接数的倒数(共同好友是不是社牛),数值越大那么说明联系紧密(共同好友是个社恐,他们可能比较亲密)
  • 基于两节点在全图的连接信息global neighborhood overlap:

    • Katz index:节点u和v之间,长度为k的路径个数
      用邻接矩阵的power(幂)来计算:n次幂即为n-1个中间节点。

      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述

    节点u和节点v之间长度为k的路径个数就是第u行第v列的元素。

    如果需要编程,则按照下面的思路来计算会更便捷。

    在这里插入图片描述

2.3 全图的特征

提取一个d维向量,反映全图特征。

核心思路依然是数数,数某一类的子图出现了多少次(Bag of Word,这个思路来源于自然语言处理)。

  • Bag of node degrees,只看节点连接数,不看节点,也不看连接结构。如下图,即采集子图不同节点度个数的节点。

    在这里插入图片描述

  • Bag of graphlet & Graphlet Kernel:相较于node degree而言,允许孤立节点的统计,同时是全图的统计,而非子图的统计。

    在这里插入图片描述

    把两张图得到的特征向量做数量积,可以得到一个标量,这个标量可以评价两个图是否足够相近,是否匹配。(Graphlet Kernel
    如果两张图不一样大,那就做一个归一化。
    这个方法的缺点是:做子图匹配是一个非常消耗时间及算力的(是NP-Hard问题),所以不常用。

  • Weisfeiler-Lehman Kernel:颜色微调的方法,不断迭代丰富节点词库。
    就是Graph embedding,先不断地将邻接节点的信息聚合到一个节点上,然后做一个哈希。再升阶,进一步聚合节点信息,做哈希。不断重复这一过程(重复k次)。
    则当连接结构一致时,哈希值相同。
    两张图进行同阶的处理,则可以得到两个向量进行数量积(Kernel),并进行比较

    在这里插入图片描述

    这一方法是线性的复杂度。
    可以用gklearn中的函数来完成计算。

    在这里插入图片描述
    这个和消息传递图神经网络中的消息传递范式真的很接近!

参考阅读

  1. cs224w同济子豪兄Github
  2. 斯坦福CS224W图机器学习、图神经网络、知识图谱【同济子豪兄】_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/350774.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

单元测试的优势

单元测试提供了许多好处,包括及早发现软件错误、促进变化、简化集成、提供文档来源以及许多其他优点,接下来将对其进行详细介绍。 1、使流程更灵活 单元测试的主要好处之一是它使编码过程更加灵活,更遵循敏捷开发方法论。 当向软件中添加越来…

如何加入new bing候补名单

如何加入new bing候补名单 我们都知道现在最新版edges中已经提示我们可以加入new bing候补名单,但国内环境下无法正常加入new bing候补名单,这篇文章讲告诉你如何绕过限制加入new bing候补名单 下载配置 HeaderEditor 插件 下载地址microsoftedge.mic…

XDSpy APT组织近期针对俄罗斯国防部的攻击活动分析

一 概述 XDSpy是ESET于2020年首次披露的APT组织,该组织最早活跃于2011年,主要针对东欧和塞尔维亚地区的政府、军队、外交部及私人公司进行窃密活动。2020年9月,该组织在攻击活动中使用Covid-19主题诱饵下发恶意Windows脚本文件(W…

高通平台开发系列讲解(Sensor篇)IAM20680驱动程序的使用

文章目录 一、相关编译宏二、设备树配置三、打开iio自动挂载脚本四、模块加载验证沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇文章将介绍 IAM20680 驱动程序。 一、相关编译宏 目录:arch/arm/configs CONFIG_IIO_BUFFER=y CONFIG_IIO_KFIFO_BUF=y CONFIG_II…

Highcharts.Chart

Highcharts 是一个使用javascript 脚本来生成图表的工具,和jfreechart 作用类似,都用来生成各种图表,并支持图片的导出和打印。 从官网 www.highcharts.com 上下载的压缩表中的example中有各种图表的例子。 要编写生成图表的例子建议从 文…

生成小分子力场TOP

生成小分子力场TOP ATB网站 生成基于Amber力场适配gromacs格式TOP文件, 对于使用GaussView 计算resp电荷可以参考: https://blog.csdn.net/weixin_42486623/article/details/129055384 下面我们使用上面是生成的mol2文件来生成基于Amber的力场&#x…

Linux网络编程 | 彻底搞懂零拷贝(zero-copy)技术

传统文件传输的问题 在网络编程中,如果我们想要提供文件传输的功能,最简单的方法就是用read将数据从磁盘上的文件中读取出来,再将其用write写入到socket中,通过网络协议发送给客户端。 ssize_t read(int fd, void *buf, size_t …

JVM05 方法区

Person:存放在元空间,也可以说方法区 person:存放在Java栈的局部变量表中 new Person():存放在Java堆中 1.方法区的理解 方法区主要存放的是 Class,而堆中主要存放的是 实例化的对象 方法区(Method Area…

ubuntu清理挖矿病毒

0 序言 我之前搭建的hadoop用于测试,直接使用了8088和9870端口,没有放入docker,从而没有端口映射。于是,就被不法之徒盯上了,hadoop被提交了很多job,使得系统被感染了挖矿病毒,在前几天阿里云站…

企业实施了IM移动平台后,可以在上面做什么?

企业实施了IM移动平台后,可以有很多服务场景,其中员工服务平台是一个很好的场景组合。企业固然是以赢利为目的的组织,然而,在一个企业中同样需要有人文关怀的氛围。这种人文关怀,说到底,就是一种以员工为本…

阿里巴巴主流数据库连接池Druid入门

一.数据库连接池的必要性 (一).传统数据库连接模式的的步骤 1.在主程序中创建连接 2.进行sql操作 3.关闭数据库连接 (二).传统数据库连接模式存在的问题 1.浪费时间:每次连接时都要验证登录和将conn加载到内存, 2.不能大规…

使用ThreadLocal实现当前登录信息的存取

有志者,事竟成 文章持续更新,可以关注【小奇JAVA面试】第一时间阅读,回复【资料】获取福利,回复【项目】获取项目源码,回复【简历模板】获取简历模板,回复【学习路线图】获取学习路线图。 文章目录一、使用…

【多线程与高并发】- 线程基础与状态

线程基础与状态 😄生命不息,写作不止 🔥 继续踏上学习之路,学之分享笔记 👊 总有一天我也能像各位大佬一样 🏆 一个有梦有戏的人 怒放吧德德 🌝分享学习心得,欢迎指正,大…

漏洞深度分析|CVE-2023-25141 sling-org-apache-sling-jcr-base存在JNDI注入漏洞

项目介绍 Apache Sling提供对可插入资源提供程序的支持。虽然这允许将自定义数据提供程序非常灵活和高效地集成到Sling中,但这种集成是在Sling的资源 API 级别上完成的。可能依赖于能够将资源适配到JCR节点并继续使用JCR API的遗留代码将不适用于此类资源提供者。 …

微信小程序自动化测试最佳实践(附 Python 源码)

目录:导读 小程序运行环境 微信小程序技术架构 使用 Chrome 调试小程序 小程序的性能测试 微信小程序的自动化测试​编辑 源码-微信小程序自动化测试 Python 版代码示例 小程序自动化测试需要跨过的几个坎 写在最后 随着微信小程序的功能和生态日益完善&…

“一号文件”聚焦三农,VR全景助农发展数字化

一号文件为何如此聚焦三农?因为三农是拼经济的基础,也是筑牢底盘的基本保证。现如今,农业基础还不稳固,而且城乡区域发展和居民收入差距依旧较大,为了解决城乡发展不平衡、农村发展不充分等矛盾,发展数字化…

Fuzz概述

文章目录AFL一些概念插桩与覆盖率边和块覆盖率afl自实现劫持汇编器clang内置覆盖率反馈与引导变异遗传算法fork server机制AFL调试准备AFL一些概念 插桩与覆盖率 边和块 首先,要明白边和块的定义 正方形的就是块,箭头表示边,边表示程序执行…

java有关类的初始化的分析

什么是类? 类是具有相同状态和相同行为的一组对象的集合 什么是对象? 万事万物皆为对象,可以理解为具体的个体就是对象 什么是面向对象的编程? 就是只在乎结果而不在乎过程,怎么理解这句话?举个例子&#x…

彻底废了,去干了两年外包...

先说一下自己的情况。大专生,17年通过校招进入湖南某软件公司,干了接近2年的点点点,今年年上旬,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了五年的功能测试…

MacOS Ventura 13.2.1 (22D68) 正式版带 OC 0.8.9 and winPE 双分区原版黑苹果镜像

2 月 14 日消息,苹果今日向 Mac 电脑用户推送了 macOS 13.2.1 更新(内部版本号:22D68),本次距离上次发布隔了 21 天,以修复Bug和安全更新为主。 镜像下载: 微信公众号: MacOS Vent…