图神经网络实战(13)——经典链接预测算法

news2025/1/16 5:49:23

图神经网络实战(13)——经典链接预测算法

    • 0. 前言
    • 1. 链接预测
    • 2. 启发式技术
      • 2.1 局部启发式技术
      • 2.2 全局启发式技术
    • 3. 矩阵分解
    • 小结
    • 系列链接

0. 前言

链接预测 (Link prediction) 可以帮助我们理解和挖掘图中的关系,并在社交网络、推荐系统等领域提供更准确的预测和决策支持。为了解决链接预测问题,研究者们提出了多种方法。首先,本节将介绍基于局部和全局邻域的启发式方法。然后,我们将介绍矩阵分解及其与 DeepWalk 和 Node2Vec 的联系。

1. 链接预测

链接预测 (Link prediction,也称链路预测)是图学习中的常见任务之一,用于预测两个节点之间是否存在链接的问题。链接预测是社交网络和推荐系统的核心,例如,在社交网络中,链接预测可以用于发现潜在的朋友关系、推荐共同的兴趣爱好,或者预测用户之间的互动行为。直观地说,如果存在链接的可能性很高,就更有可能与这些人建立联系,这种可能性正是链接预测试图预测的内容。

2. 启发式技术

启发式技术 (Heuristic technique) 是一种简单实用的预测节点之间链接的方法。它们易于实现,并为连接预测任务提供了强大的基准。根据这些方法执行的跳数 (hop),我们可以将它们进行分类,如下图所示。其中一些方法只需要与目标节点相邻的 1 跳 (1-hop) 邻居,而更复杂的技术还需要考虑 2 跳 (1-hop) 邻居或整个图。在本节中,我们将把它们分为两类——局部 (local) 启发式(1 跳和 2 跳)技术和全局 (global) 启发式技术。

启发式技术

2.1 局部启发式技术

局部启发式技术通过考虑节点的局部邻域来衡量两个节点之间的相似性,使用 N ( u ) \mathcal N(u) N(u) 表示节点 u u u 的邻居。以下是三种常用的局部启发式技术:

  • 公共邻居 (Common neighbors):简单地计算两个节点的公共邻居( 1 跳邻居)数量。其原理与社交网络类似——共同的邻居越多,就越有可能建立链接:
    f ( u , v ) = ∣ N ( u ) ∩ N ( v ) ∣ f(u,v)=|\mathcal N(u)\cap \mathcal N(v)| f(u,v)=N(u)N(v)
  • Jaccard 系数 (Jaccard’s coefficient):衡量的是两个节点( 1 跳邻居)共有邻居的比例。它的理念与共同邻居相同,但将结果按邻居总数归一化。这样可以奖励具有少量相互连接的邻居的节点,而非度较高的节点:
    f ( u , v ) = ∣ N ( u ) ∩ N ( v ) ∣ ∣ N ( u ) ∪ N ( v ) ∣ f(u,v)=\frac {|\mathcal N(u)\cap \mathcal N(v)|} {|\mathcal N(u)\cup \mathcal N(v)|} f(u,v)=N(u)N(v)N(u)N(v)
  • Adamic–Adar 指数 (Adamic–Adar index):对两个目标节点( 2 跳邻居)共享邻居度数的逆对数求和。其原理是,邻域大的共同邻居不如邻域小的共同邻居重要:
    f ( u , v ) = ∑ x ∈ N ( u ) ∩ N ( v ) 1 l o g ∣ N ( x ) ∣ f(u,v)=\sum_{x\in\mathcal N(u)\cap \mathcal N(v)}\frac 1{log|\mathcal N(x)|} f(u,v)=xN(u)N(v)logN(x)1
    无论是直接的(共同邻居或 Jaccard 系数)还是间接的( Adamic–Adar 指数) ,这些技术都依赖于邻居的节点度。这有利于提高速度和可解释性,但也限制了它捕捉复杂关系的能力。

2.2 全局启发式技术

全局启发式技术通过考虑整个网络而非局部邻域来解决这一问题。以下是两种常用的全局启发式技术:

  • Katz 指数 (Katz index):计算两个节点之间每条可能路径的加权和。权重对应一个折扣系数 β ∈ [ 0 , 1 ] β∈ [0,1] β[0,1] (通常在 0.80.9 之间),以惩罚较长的路径。根据这一定义,如果两个节点之间有很多(最好是短)路径,那么它们更有可能被连接起来。任何长度的路径都可以用邻接矩阵幂 A n A^n An 计算,Katz 指数定义如下:
    f ( u , v ) = ∑ i = 1 ∞ β i A i f(u,v)=\sum_{i=1}^\infty\beta^iA^i f(u,v)=i=1βiAi
  • 带重启的随机游走 (Random walk with restart):从目标节点开始进行随机游走。每次游走后,它会增加当前节点的访问次数,并以 α α α 的概率在目标节点重新开始游走。否则,它会继续随机游走。经过预定的迭代次数后停止算法,并建议在目标节点和访问次数最高的节点之间建立链接。这种思想在 DeepWalk 和 Node2Vec 算法中同样重要

全局启发式技术通常更准确,但需要了解图的全部内容,使用这种方式执行链接预测并不是唯一方法。

3. 矩阵分解

用于链接预测的矩阵分解 (Matrix factorization) 受到推荐系统技术的启发。使用这种技术,我们通过预测整个邻接矩阵 KaTeX parse error: Undefined control sequence: \A at position 1: \̲A̲ 来间接预测链接。这需要使用节点嵌入来实现——相似的节点 u u u v v v 应该有相似的嵌入 Z u Z_u Zu Z v Z_v Zv。利用点积,我们可以将其表示为:

  • 如果这些节点相似, Z v T Z u Z_v^TZ_u ZvTZu 应该是最大的
  • 如果这些节点不同, Z v T Z u Z_v^TZ_u ZvTZu 应该是最小的

由于我们假定相似的节点应该相互连接,因此可以使用点积来近似邻接矩阵 A A A 的每个元素(链接):
A u v ≈ Z v T Z u A_{uv}\approx Z_v^TZ_u AuvZvTZu
改写为矩阵乘法,可以得到以下结果:
A ≈ Z T Z A\approx Z^TZ AZTZ
其中, Z Z Z 是节点嵌入矩阵。下图直观地说明了矩阵分解的原理:

矩阵分解原理

这种技术之所以称为矩阵分解,是因为邻接矩阵 A A A 被分解为两个矩阵的乘积。其目标是学习相关的节点嵌入,使图 G = ( V , E ) G= (V,E) G=(V,E) 中真实元素和预测元素之间的 L2 范数 A u v A_{uv} Auv 最小化:
m i n z ∑ i ∈ V , j ∈ V ( A u v − Z v T Z u ) 2 \underset {z} {min}\sum_{i\in V,j\in V}(A_{uv}-Z_v^TZ_u)^2 zminiV,jV(AuvZvTZu)2
矩阵分解还有更高级的变体,包括拉普拉斯矩阵 (Laplacian matrix) 和 A A A 的幂,另一种方法是使用 DeepWalk 和 Node2Vec 等模型,它们能够生成可以配对创建链接表示的节点嵌入,这些算法隐式地逼近和分解复杂的矩阵。例如,使用 DeepWalk 计算出的矩阵:
log ⁡ ( ∑ i = 1 ∣ V ∣ ∑ j = 1 ∣ V ∣ A i j ( 1 T ∑ r = 1 T ( D − 1 A ) r ) D − 1 ) − log ⁡ b \log (\sum_{i=1}^{|V|}\sum_{j=1}^{|V|}A_{ij}(\frac 1T\sum_{r=1}^T(D^{-1}A)^r)D^{-1})-\log b log(i=1Vj=1VAij(T1r=1T(D1A)r)D1)logb
其中, b b b 是负采样的参数。类似算法包括 LINEPTE。虽然它们可以捕捉到更复杂的关系,但也存在局限性:

  • 无法使用节点特征:只能使用拓扑信息创建嵌入关系
  • 没有归纳能力: 无法归纳出训练集中没有的节点
  • 无法捕捉结构相似性: 图中结构相似的节点能够获得截然不同的嵌入结果
    这些局限性促使我们需要基于图神经网络 (Graph Neural Networks, GNN) 的技术来执行链接预测任务。

小结

链接预测是指利用图数据中已知的部分节点和边的信息,预测图中未知的连接关系或者未来可能出现的连接关系。链接预测在社交网络分析、生物信息学、推荐系统等领域具有重要应用,能够帮助我们理解网络结构、预测潜在的关联关系,并为一些实际问题提供决策支持。在本节中,我们介绍了经典链接预测算法,这些传统技术对于理解图神经网络 (Graph Neural Networks, GNN) 学习的内容至关重要。

系列链接

图神经网络实战(1)——图神经网络(Graph Neural Networks, GNN)基础
图神经网络实战(2)——图论基础
图神经网络实战(3)——基于DeepWalk创建节点表示
图神经网络实战(4)——基于Node2Vec改进嵌入质量
图神经网络实战(5)——常用图数据集
图神经网络实战(6)——使用PyTorch构建图神经网络
图神经网络实战(7)——图卷积网络(Graph Convolutional Network, GCN)详解与实现
图神经网络实战(8)——图注意力网络(Graph Attention Networks, GAT)
图神经网络实战(9)——GraphSAGE详解与实现
图神经网络实战(10)——归纳学习
图神经网络实战(11)——Weisfeiler-Leman测试
图神经网络实战(12)——图同构网络(Graph Isomorphism Network, GIN)

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

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

相关文章

javaweb请求响应+@ResponseBody注解

这里用了一款接口测试软件postman 简单参数 SpringBoot方式 简单参数:参数名与形参变量名相同,定义形参即可接收参数。 请求参数名与方法形参变量名相同 会自动进行类型转换 package com.example.springbootwebreqresp.Controller;import org.springframework.w…

Go微服务: 理解分布式锁

概述 我们先看一个场景,到了双11,我们的商户又开始卖商品啦但是,我们的库存是有限的,如果超卖了,可能平台就会涉及相关法律责任了所以,我们的库存扣除问题,一定是一个非常经典的问题 先看上图&…

《Vue》系列文章目录

Vue (发音为 /vjuː/,类似 view) 是一款用于构建用户界面的 JavaScript 框架。它基于标准 HTML、CSS 和 JavaScript 构建,并提供了一套声明式的、组件化的编程模型,帮助你高效地开发用户界面。无论是简单还是复杂的界面,Vue 都可以…

实现3-8译码器①

描述 下表是74HC138译码器的功能表. E3 E2_n E1_n A2 A1 A0 Y0_n Y1_n Y2_n Y3_n Y4_n Y5_n Y6_n Y7_n x 1 x x x x 1 1 1 1 1 1 1 1 x x 1 x x x 1 1 1 1 1 1 1 1 0 x x x x x 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 …

C语言之argc、argv与main函数的传参

一 :谁给main函数传参 (1)调用main函数所在的程序的它的父进程给main函数传参,并且接收main函数的返回值 二 :为什么需要给main函数传参 (1)首先mian函数不传承是可以的,也就是说它的…

01-Linux网络设置

1、查看及测试网络 查看及测试网络配置是管理Linux网络服务的第一步,其中的大多数命令以普通用户的权限就可以完成操作,但普通用户在执行/sbin目录中的命令时需要指定命令文件的决对路径。 1.1 查看网络接口地址 主机的网卡通常称为网络接口&#xff…

轻松驾驭视频节奏:灵活调整视频播放速度,让视频内容更出彩!

视频已经成为了我们生活中不可或缺的一部分。无论是观看电影、电视剧,还是浏览短视频、直播内容,我们都希望能够根据自己的喜好和需求来调整视频的播放速度,甚至精确控制每一秒的播放内容。那么,如何轻松实现这一愿望呢&#xff1…

torchmetrics,一个无敌的 Python 库!

更多Python学习内容:ipengtao.com 大家好,今天为大家分享一个无敌的 Python 库 - torchmetrics。 Github地址:https://github.com/Lightning-AI/torchmetrics 在深度学习和机器学习项目中,模型评估是一个至关重要的环节。为了准确…

Springboot结合redis实现关注推送

关注推送 Feed流的模式 Timeline:不做内容筛选,简单的按照内容发布时间排序。常用于好友与关注。例如朋友圈的时间发布排序。 优点:信息全面,不会有缺失。并且实现也相对简单 缺点:信息噪音较多,用户不一定感兴趣,内容获取效率…

打造精细化运维新玩法(三)

实践SLO,概括下就是在相对标准、统一的框架下指导和推动服务质量的数字化建设,形成对组织有价值的数据资产和流程规范。借用在人工智能和机器学习领域的观点,算法的上限受限于数据质量的好坏,所以从源头上建设高质量的数据非常重要…

【电赛】STM32-PID直流减速电机小车【寻迹+避障+跟随】【更新ing】

一.需求分析 1.主控:STM32C8T6(没什么好说的哈哈) 2.电机:JAG25-370电机 【问】为什么要用直流减速电机?? PID控制器需要依靠精确的反馈信号来调整其输出,确保电机按照预定的速度和位置运行…

独立游戏之路:Tap篇 -- Unity 集成 TapTap 广告详细步骤

Unity 集成 TapADN 广告详细步骤 前言一、TapTap 广告介绍二、集成 TapTap 广告的步骤2.1 进入广告后台2.2 创建广告计划2.3 选择广告类型三、代码集成3.1 下载SDK3.2 工程配置3.3 源码分享四、常见问题4.1 有展现量没有预估收益 /eCPM 波动大?4.2 新建正式媒体找不到预约游戏…

介绍Linux

目录 1.什么是操作系统 2.现实生活中的操作系统 3.操作系统的发展史 4.操作系统的发展 Linux的不同版本以及应用领域 1.Linux内核及发行版介绍 <1>Linux内核版本 <2>Linux发行版本 2.应用领域 个⼈桌⾯领域的应⽤ 服务器领域 嵌⼊式领域 3.文件和目录 …

HDFS 读写数据流程

优质博文&#xff1a;IT-BLOG-CN 一、HDFS 写数据流程 HDFS 文件写入流程图如下&#xff1a;三个模块&#xff08;客户端、NameNode、DataNode&#xff09; 【1】校验&#xff1a; 客户端通过 DistributedFileSystem 模块向 NameNode 请求上传文件&#xff0c;NameNode 会检…

Vue 面试通杀秘籍

理论篇&#xff1a; 1. 说说对 Vue 渐进式框架的理解&#xff08;腾讯医典&#xff09; a) 渐进式的含义&#xff1a; 主张最少, 没有多做职责之外的事 b) Vue 有些方面是不如 React&#xff0c;不如 Angular.但它是渐进的&#xff0c;没有强主张&#xff0c; 你可以在原有…

Java面向对象-Object类的toString方法、equals方法

Java面向对象-Object类的toString方法、equals方法 一、toString二、equals三、总结 一、toString Object的toString方法。 方法的原理&#xff1a; 现在使用toString方法的时候&#xff0c;打印出来的内容不友好。 现在想要知道对象的信息。 出现的问题&#xff1a;子类Stu…

SAP Build 2 PDF数据提取与决策树(未完成)

0. 安装desktop agent 在后续过程中发现要预先安装desktop agent&#xff0c;否则没法运行自动化流程… 0.1 agent下载 参考官方文档说明 https://help.sap.com/docs/build-process-automation/sap-build-process-automation/create-user-in-rbsc-download-repository?loca…

AI办公自动化:用Kimi批量在Excel文件名中加入日期

工作任务&#xff1a;在一个文件夹中所有的Excel文件后面加上一个日期 在Kimi中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;写一个Python脚本&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;F:\AI自媒体内容\AI行业数据分析\投融资 读取里面所…

18.2 HTTP服务器-处理函数、响应404错误

1. 处理函数 处理来自客户端的请求&#xff0c;并回之以特定的响应&#xff0c;这是处理函数的主要任务。在处理函数中&#xff0c;我们通常会完成如下工作&#xff1a; 验证请求路径 http.Request.URL.Pathhttp.NotFound(...) 当请求没有对应的处理函数时&#xff0c;返回4…

机器学习笔记:label smoothing

在传统的分类任务中&#xff0c;我们通常使用硬标签&#xff08;hard labels&#xff09; 即如果一个样本属于某个类别&#xff0c;其对应的标签就是一个全0的向量&#xff0c;除了表示这个类别的位置为1。例如&#xff0c;在一个3类分类任务中&#xff0c;某个样本的标签可能是…