neo4j python 算法_图论与图学习(二):图算法

本文介绍了图论中的主要图算法,包括寻路算法如宽度优先搜索和深度优先搜索,以及中心性计算和社群检测。这些概念在社交网络分析、欺诈检测和推荐系统等领域有广泛应用。文中还提到了Neo4j的图算法指南和Networkx库作为参考资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选自towardsdatascience

作者: Maël Fabien 机器之心编译 参与:熊猫

图(graph)近来正逐渐变成机器学习的一大核心领域,比如你可以通过预测潜在的连接来理解社交网络的结构、检测欺诈、理解汽车租赁服务的消费者行为或进行实时推荐。近日,数据科学家 Maël Fabien 在其博客上发布了涉及图论、图算法和图学习的系列文章《图论与图学习》。

本文是其中第二篇,介绍了图算法。更多文章和对应代码可访问: https://github.com/maelfabien/Machine_Learning_Tutorials 本文涵盖以下主题:
  • 主要的图算法

  • 示意图和用例

  • Python 示例

首先进行一些准备工作,打开 Jupyter Notebook,导入以下软件包:
import numpy as np
import random
import networkx as nx
from IPython.display import Image
import matplotlib.pyplot as plt
后文会使用 networkx 最新的 2.0 版本。networkx 是一个用于复杂网络的结构、动态和功能的创建、操作和研究的 Python 软件包。 我会尽量以实用为目标,努力阐释每个概念。 前一篇文章介绍了图的主要种类以及描述一个图的基本特性。现在我们更加详细地介绍图分析/算法以及分析图的不同方式。 为了理解上下文,这里给出一些图算法的用例:
  • 实时欺诈检测

  • 实时推荐

  • 精简法规遵从性

  • 复杂网络的管理和监控

  • 身份和访问管理

  • 社交应用/功能

目前大多数框架(比如 Python 的 networkx 或 Neo4J)支持的图算法类别主要有三个:
  • Pathfinding(寻路):根据可用性和质量等条件确定最优路径。我们也将搜索算法包含在这一类别中。这可用于确定最快路由或流量路由。

  • Centrality(中心性):确定网络中节点的重要性。这可用于识别社交网络中有影响力的人或识别网络中潜在的攻击目标。

  • Community detection(社群检测):评估群体聚类的方式。这可用于划分客户或检测欺诈等。

我们将在第三篇文章中介绍图中的机器学习和图学习。 networkx 中的所有算法都可在这里找到: https://networkx.github.io/documentation/stable/reference/algorithms/index.html 我们只会介绍 networkx 中实现的最常见的基本算法。 一 寻路和图搜索算法
  • 寻路算法是通过最小化跳(hop)的数量来寻找两个节点之间的最短路径。

  • 搜索算法不是给出最短路径,而是根据图的相邻情况或深度来探索图。这可用于信息检索。

1. 搜索算法 图搜索算法主要有两种:
  • 宽度优先搜索(BFS):首先探索每个节点的相邻节点,然后探索相邻节点的相邻节点……

  • 深度优先搜索(DFS):会尝试尽可能地深入一条路径,如有可能便访问新的相邻节点。

9256d8afc5e8e10ffbadf9fb9f3ea6ef.png

搜索算法 2. 寻路算法 a. 最短路径
最短路径计算的是一对节点之间的最短的加权(如果图有加权的话)路径。
这可用于确定最优的驾驶方向或社交网络上两个人之间的分离程度。 计算图中的最短路径的方法有很多,包括 Dijkstra 算法,这是 networkx 中的默认算法。 根据维基百科,该算法的伪代码如下:
  • 将图中所有节点标记为未访问。创建一个所有未访问节点的集合,称为未访问集。

  • 为每个节点分配一个暂定的距离值:将我们的初始节点的该值设置为零,将其它所有节点的该值设置为无穷。将初始起始节点设置为当前节点。

  • 对于当前节点,考察其所有未被访问过的相邻节点并计算通过当前节点的暂定距离。比较新计算出的暂定距离与当前分配的值,配之以其中更小的值。举个例子,如果当前节点 A 标记的距离为 6,将其与相邻节点 B 连接的边的长度为 2,则通过 A 到达 B 的距离为 6+2=8。如果 B 之前被标记的距离大于 8,则将其改为 8。否则,保持其当前的值。

  • 当我们考察完当前节点的所有未访问节点时,将当前节点标记为已访问,并将其移出未访问集。已访问节点不会再次进行检查。

  • 如果目标节点已被标记为已访问(当规划两个特定节点之间的路由时)或未访问集中节点之间的最小暂定距离为无穷时(当规划一次完整的遍历时;当初始节点与剩余的未访问节点之间没有连接时才会出现这种情况),那么就停止操作。算法结束。

  • 否则,选择标记有最小暂定距离的未访问节点,将其设置为新的「当前节点」,然后回到步骤 3。

更多有关最短路径问题的介绍请参阅:https://en.wikipedia.org/wiki/Shortest_path_problem

70b437246c70323b6807c2060274b9a2.png

维基百科上 Dijkstra 算法示意图 该算法的 Python 实现简单直接:
# Returns shortest path between each node
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值