当前位置: 首页 > news >正文

DeepWalk 原理详解

概述:

        DeepWalk 是一种流行的图嵌入方法,用于学习图结构数据中节点的低维表示。它通过将图的节点视作序列数据,利用自然语言处理中的技术(类似于word2vec算法)来捕捉节点间的关系,可以帮助我们理解和利用图中节点的关系。这种方法在社交网络分析、推荐系统、图分类等领域非常有用。在图中,节点可以是人、地点、物品等,而边表示它们之间的关系,例如朋友关系、道路连接等。

原因:

        在许多实际问题中,我们需要对图形结构的数据进行分析和预测。例如,在社交网络中,我们可能想预测哪些人可能成为朋友。这些图通常非常大且复杂,直接分析它们既困难又低效。DeepWalk 通过将图中的节点转换为向量(一组数字),这些向量捕获了节点之间的关系,使得我们可以使用传统的机器学习方法来分析图

一、DeepWalk的核心思想

        DeepWalk算法基于这样的假设:图中经常一起出现的节点相似度较高。其核心思想是利用随机游走(Random Walks)在图中生成节点序列,然后使用类似于自然语言处理中的word2vec模型来学习这些序列的嵌入表示。

二、DeepWalk的详细步骤

1. 随机游走

        DeepWalk首先对图进行多次随机游走,以每个节点为起点,随机选择其邻接节点进行转移,如此重复若干步。这种方式生成的节点序列捕获了图的局部结构信息。(随机游走帮助我们探索图中的局部结构,通过多次随机游走,我们能够从多个角度观察节点的连接关系。)

随机游走算法伪代码

function RandomWalk(Graph, start_node, walk_length):walk = [start_node]for i in range(1, walk_length):current = walk[-1]neighbors = Graph.get_neighbors(current)next_node = random.choice(neighbors)walk.append(next_node)return walk
2. 序列学习:使用类Word2Vec模型

        生成的随机游走序列类似于文本中的句子,节点类似于单词。DeepWalk使用word2vec中的Skip-gram模型来学习节点的向量表示。Skip-gram模型的目标是最大化观测到的节点序列中节点的共现概率。

        Skip-gram 模型试图根据一个节点预测其上下文节点。这背后的直觉是,如果两个节点经常在随机游走的路径中一起出现,那么它们在图中的关系应该是接近的。通过优化这个预测过程,模型学习到的节点表示就能够捕捉节点间的这种相似性。

Skip-gram模型的目标函数

                max \sum_{v \in V} \sum_{u \in C(v)} log P(u|v)

        其中,V 是图中的节点集合,C(v) 是节点v在随机游走序列中的上下文节点集合,P(u∣v) 是在给定节点v的情况下观察到节点u的概率,通常使用softmax函数定义。

                P(u|v) = \frac{exp(\overrightarrow{u} * \overrightarrow{v})}{\sum_{w\in V}^{}exp(\overrightarrow{w} * \overrightarrow{v})}

3. 优化

        利用梯度上升法更新节点的嵌入向量,以最大化上述目标函数。通常使用随机梯度上升(SGD)或者其变体进行优化。

        优化过程:具体来说,模型通过调整节点向量来提高其预测上下文节点的概率。这个过程需要大量的计算,通常使用梯度下降法来完成。

        想象你在一个巨大的聚会上,你通过随机地与人打招呼来了解与你有相似兴趣的人。DeepWalk 算法类似于这个过程:通过“随机游走”,它在图中“探索”,并通过这种探索来学习哪些节点(或人)经常一起出现。然后,它将这些信息转换为数学上的向量,这些向量可以用来预测如好友关系等图中的属性。

        总的来说,DeepWalk 是一种强大的方法,可以将复杂的图结构转化为简单的数值形式,这样就可以使用现有的数据科学工具和方法来解决实际问题。

使用场景:
  • 社交网络分析:预测用户的社交关系,比如好友推荐。
  • 推荐系统:基于用户和产品的图结构关系来推荐产品。
  • 信息传播:预测新闻、谣言等信息在网络中的传播路径。
  • 生物信息学:例如,预测蛋白质之间的相互作用。

三、源代码层面实现

以下是用Python实现DeepWalk算法的简化版本,假设已经有了图结构和基本的库函数:

import random
import numpy as np
from gensim.models import Word2Vecclass DeepWalk:def __init__(self, graph, walk_length, num_walks, dimensions, window_size, epochs):self.graph = graphself.walk_length = walk_lengthself.num_walks = num_walksself.dimensions = dimensionsself.window_size = window_sizeself.epochs = epochsdef random_walk(self, start_node):walk = [start_node]for _ in range(1, self.walk_length):current = walk[-1]neighbors = self.graph.get_neighbors(current)if neighbors:next_node = random.choice(neighbors)walk.append(next_node)else:breakreturn walkdef simulate_walks(self):walks = []for node in self.graph.nodes():for _ in range(self.num_walks):walks.append(self.random_walk(node))return walksdef learn_embeddings(self, walks):model = Word2Vec(sentences=walks, vector_size=self.dimensions, window=self.window_size, min_count=0, sg=1, epochs=self.epochs)return model.wvdef execute(self):walks = self.simulate_walks()walks = [[str(node) for node in walk] for walk in walks]  # 转换为字符串,因为Word2Vec需要字符串输入embeddings = self.learn_embeddings(walks)return embeddings# 示例使用
graph = ... # 假设已经定义了图结构和邻接关系
deepwalk = DeepWalk(graph, walk_length=10, num_walks=80, dimensions=64, window_size=5, epochs=10)
embeddings = deepwalk.execute()

四、总结

        DeepWalk是通过随机游走在图中采样节点序列,并使用类似word2vec的方法学习这些序列中节点的嵌入向量。这种方法有效地将图数据转换为可用于各种机器学习任务的数值表示形式,特别是在没有明确节点特征的情况下。通过这种技术,我们能够利用节点的结构上下文信息,从而在诸如节点分类、链接预测和社区发现等任务上取得良好的效果。

相关文章:

DeepWalk 原理详解

概述: DeepWalk 是一种流行的图嵌入方法,用于学习图结构数据中节点的低维表示。它通过将图的节点视作序列数据,利用自然语言处理中的技术(类似于word2vec算法)来捕捉节点间的关系,可以帮助我们理解和利用图…...

GitLab安装|备份数据|迁移数据及使用教程

作者: 宋发元 最后更新时间:2024-12-24 GitLab安装及使用教程 官方教程 https://docs.gitlab.com/ee/install/docker.html Docker安装GitLab 宿主机创建容器持久化目录卷 mkdir -p /docker/gitlab/{config,data,logs}拉取GitLab镜像 docker pull gi…...

嵌入式linux驱动框架 I2C系统驱动程序模型分析

引言:在嵌入式 Linux 系统中,I2C(Inter-Integrated Circuit)是一种常用的通信协议,用于连接低速设备(如传感器、显示器、存储器等)与主控制器。I2C 系统驱动程序模型通过层次化的设计&#xff0…...

深度学习实验十七 优化算法比较

目录 一、优化算法的实验设定 1.1 2D可视化实验(被优化函数为) 1.2 简单拟合实验 二、学习率调整 2.1 AdaGrad算法 2.2 RMSprop算法 三、梯度修正估计 3.1 动量法 3.2 Adam算法 四、被优化函数变为的2D可视化 五、不同优化器的3D可视化对比 …...

一个双非选手的秋招总结

个人bg介绍 25届双非本硕(非杭电深大,垫底双非),两段实习经历,本科没学过Java,有c语言和408基础;2023年10月份中途转语言,Java速成选手。 战绩总结:实习秋招面试总论次…...

如何提高永磁电动机的节电效果

在现代工业和家庭应用中,永磁电动机因其优越的性能和节能特性,逐渐成为主流选择。随着能源日益紧缺和环境问题的日益严重,寻求高效的电动机节能方案显得尤为重要。 一、永磁电动机的基本原理 永磁电动机的核心是永磁体,这些永磁…...

在一个服务器上抓取 Docker 镜像并在另一个服务器上运行

要在一个服务器上抓取 Docker 镜像并在另一个服务器上运行,您可以按照以下步骤进行操作: 1. 保存 Docker 镜像 在源服务器上,您可以使用 docker save 命令将 Docker 镜像保存为一个 tar 文件。例如,如果您的镜像名称是 face_det…...

开源轮子 - Logback 和 Slf4j

spring boot内置:Logback 文章目录 spring boot内置:Logback一:Logback强在哪?二:简单使用三:把 log4j 转成 logback四:日志门面SLF4J1:什么是SLF4J2:SLF4J 解决了什么痛…...

内部知识库的未来展望:技术融合与用户体验的双重升级

在当今数字化飞速发展的时代,企业内部知识库作为知识管理的关键载体,正站在变革的十字路口,即将迎来技术融合与用户体验双重升级的崭新时代,这一系列变化将深度重塑企业知识管理的格局。 一、技术融合:开启知识管理新…...

【Linux系列】Shell 命令:`echo ““ > img.sh`及其应用

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…...

【RAG实战】语言模型基础

语言模型赋予了计算机理解和生成人类语言的能力。它结合了统计学原理和深度神经网络技术,通过对大量的样本数据进行复杂的概率分布分析来学习语言结构的内在模式和相关性。具体地,语言模型可根据上下文中已出现的词序列,使用概率推断来预测接…...

【MySQL】7.0 入门学习(七)——MySQL基本指令:帮助、清除输入、查询等

1.0 help ? 帮助指令,查询某个指令的解释、用法、说明等。详情参考博文: 【数据库】6.0 MySQL入门学习(六)——MySQL启动与停止、官方手册、文档查询 https://www.cnblogs.com/xiaofu007/p/10301005.html 2.0 在cmd命…...

我的 2024 年终总结

2024 年,我离开了待了两年的互联网公司,来到了一家聚焦教育机器人和激光切割机的公司,没错,是一家硬件公司,从未接触过的领域,但这还不是我今年最重要的里程碑事件 5 月份的时候,正式提出了离职…...

STM32CUBEMX+STM32H743ZIT6+IAP+UART在线升级初始化和代码解析

1、STM32H7带的ITCM,DTCM,AXI SRAM,SRAM1,SRAM2,SRAM3,SRAM4和备份SRAM五块。 其中, ①TCM区包括ITCM和DTCM,这两个是直连CPU的。 速率与CPU一致,最高能到480MHz。 DTCM地…...

半连接转内连接 | OceanBase SQL 查询改写

查询优化器是关系型数据库系统的核心模块,是数据库内核开发的重点和难点,也是衡量整个数据库系统成熟度的“试金石”。为了帮助大家更好地理解 OceanBase 查询优化器,我们撰写了查询改写系列文章,带大家更好地掌握查询改写的精髓&…...

Git使用经历

目录 1、先创建文件夹 2、仓库初始化 3、配置gitee用户名和密码 4、克隆指定仓库的中指定分支到本地仓库 5、查看当前所在分支、切换分支 6、查看状态,判断是否有修改 7、把更新的内容添加到缓存区 8、把缓存区的数据提交 9、把数据推送到远程仓库 10、把…...

永磁同步电机控制算法-自适应带宽LADRC转速控制器

一、原理介绍 设计了自适应带宽 LADRC 控制方法,继承了 LADRC 优点的同时,加入自适应带宽控制,提出运用 Softsign 函数设计带宽自适应函数,根据电机转速自动调节控制带宽,解决了永磁同步电机在复杂且多变的环境下受到…...

基于springboot+vue实现的博物馆游客预约系统 (源码+L文+ppt)4-127

摘 要 旅游行业的快速发展使得博物馆游客预约系统成为了一个必不可少的工具。基于Java的博物馆游客预约系统旨在提供高效、准确和便捷的适用博物馆游客预约服务。本文讲述了基于java语言开发,后台数据库选择MySQL进行数据的存储。该软件的主要功能是进行博物馆游客…...

LeetCode 1705.吃苹果的最大数目:贪心(优先队列) - 清晰题解

【LetMeFly】1705.吃苹果的最大数目:贪心(优先队列) - 清晰题解 力扣题目链接:https://leetcode.cn/problems/maximum-number-of-eaten-apples/ 有一棵特殊的苹果树,一连 n 天,每天都可以长出若干个苹果。在第 i 天,…...

vim多窗格

vim打开文件分为三个阶段:buffer、window与tab buffer就是在同一个界面打开的文件window就是使用水平分割与垂直分割的窗口tab则是可以是上述两者的总集合 buffer :e filename在已打开文件的界面中再打开一个新文件,显示这个新文件,原文件被隐…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言: 通过AI视觉技术,为船厂提供全面的安全监控解决方案,涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面,能够实现对应负责人反馈机制,并最终实现数据的统计报表。提升船厂…...

《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》

在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中&#xff0…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡(如 HAProxy、AWS NLB、阿里 SLB)发起上游连接时,将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后,ngx_stream_realip_module 从中提取原始信息…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

今日科技热点速览

🔥 今日科技热点速览 🎮 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售,主打更强图形性能与沉浸式体验,支持多模态交互,受到全球玩家热捧 。 🤖 人工智能持续突破 DeepSeek-R1&…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

React---day11

14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store&#xff1a; 我们在使用异步的时候理应是要使用中间件的&#xff0c;但是configureStore 已经自动集成了 redux-thunk&#xff0c;注意action里面要返回函数 import { configureS…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...