在本文中,我将讨论一些你应该知道的最重要的图算法,以及如何使用Python实现它们。

作者:AI公园

导读

因为图分析是数据科学家的未来。

作为数据科学家,我们对pandas、SQL或任何其他关系数据库非常熟悉。

我们习惯于将用户的属性以列的形式显示在行中。但现实世界真的是这样吗?

在一个互联的世界里,用户不能被视为独立的实体。它们之间有一定的关系,我们在建立机器学习模型的时候,有时也会考虑这些关系。

现在,虽然在关系数据库中,我们不能在不同的行(用户)之间使用这样的关系,但是在图形数据库中,这样做非常简单。

在本文中,我将讨论一些你应该知道的最重要的图算法,以及如何使用Python实现它们。

1. 连通组件

一个包含3个连通组件的图

我们都知道聚类是如何工作的。

你可以用外行人的术语来理解连通组件,它是一种硬聚类算法,可以在相关/连接的数据中找到聚类/岛屿

举个具体的例子:假设你有连接世界上任何两个城市的道路的数据。你需要找出世界上所有的大陆以及它们包含哪些城市

你将如何实现这一点?来想想吧。

我们使用的连通组件算法是基于BFS/DFS的特殊情况。我不会在这里过多地讨论它是如何工作的,但是我们将看到如何使用Networkx编写和运行代码。

应用

从零售的角度来看:假设我们有很多客户,使用很多账户。使用连通组件算法的一种方法是在数据集中找出明显不同的家族。

我们可以根据相同的信用卡使用情况、相同的地址或相同的移动电话号码等设定客户ID之间的边(路)。一旦我们有了这些连接,我们就可以运行连通组件算法来创建单独的簇,然后我们可以为其分配一个家族ID。

然后,我们可以使用这些家族ID根据家族需求提供个性化的推荐。我们还可以使用这个家族ID,通过创建基于家族的分组特征来支持我们的分类算法。

从财务的角度来看:另一个用例是使用这些家族ID捕获欺诈。如果一个账户在过去有过欺诈行为,关联账户很可能也容易进行欺诈。

可能性只受你自己想象力的限制。

代码

我们将使用Python中的Networkx模块来创建和分析图。

让我们从一个示例图开始,我们使用它来实现我们的目的。包含城市和城市之间的距离信息。

使用随机距离的图

我们首先创建一个带有距离的边的列表,我们把距离作为边的权重:

使用Networkx构建图:

现在我们想从这张图中找出不同的大陆及其包含的城市。

我们现在可以使用连通组件算法做到这一点:

正如你所看到的,我们能够在数据中找到不同的部分。只需要使用边和顶点。这个算法可以在不同的数据上运行,以满足我上面提到的任何用例。

2. 最短路径

继续上面的例子,我们得到了一个德国城市的图以及它们之间的距离。

你想知道如何从法兰克福(起始节点)到慕尼黑的最短距离。

我们用来解决这个问题的算法叫做Dijkstra。用Dijkstra自己的话来说:

从鹿特丹到[格罗宁根的最短路线是什么?一般来说,最短路径的算法是这样的,我花了大约20分钟来设计它。一天早上我在阿姆斯特丹和我的年轻的未婚妻购物,累了,我们坐在咖啡馆露台喝一杯咖啡,我就在想我能不能想出这个最短路径算法,然后我就想出来了。正如我所说,这是一个20分钟的发明。事实上,它是在1959年出版的。三年后,还可以读到,事实上,它相当不错。它如此漂亮的原因之一是我不用铅笔和纸来设计它。后来我了解到,不用铅笔和纸设计的好处之一是,你几乎不得不避免所有可以避免的复杂性。最终,令我大为惊讶的是,这个算法成了我成名的基石之一。

- Edsger Dijkstra,在对Philip L. Frana的采访中

应用

Dijkstra算法的变体广泛应用于谷歌地图中,用于寻找最短路径。

你在沃尔玛,你有不同的通道和所有通道之间的距离。你想要提供从A通道到D通道到客户的最短路径。

你可以看到LinkedIn如何显示1级和2级的连接。幕后发生了什么?

代码

你也可以找到所有的地点对之间的最短路径:

3. 最小生成树

现在我们有另一个问题。我们为一家水管铺设公司或互联网光纤公司工作。我们需要用最少的电线/管道连接图中所有的城市,我们该怎么做?

一个无向图,右边是它的最小生成树

应用

最小生成树直接应用于网络设计,包括计算机网络、电信网络、交通网络、供水网络和电网(它们最初是为这些网络而发明的)

MST用于逼近旅行商问题

聚类 — 首先构造MST,然后使用簇间距离和簇内距离确定MST中某些边缘的分割阈值。

图像分割 — 用于图像分割,我们首先在一个图上构造一个MST,其中像素是节点,像素之间的距离基于一些相似性度量(颜色、强度等)。

代码

我们的图的最小生成树

可以看到,上面就是我们需要铺设的电线。

4. Pagerank

这就是长期以来支持谷歌的页面排序算法。它根据输入和输出链接的数量和质量为页面分配一个分数。

应用

Pagerank可以用于任何我们想要估计任何网络中节点重要性的地方。

它被用来寻找最具影响力的论文使用引文。

被谷歌用来排列页面

它可以用来把tweets-用户和以及tweets-tweets当成节点进行排序。如果用户A关注了用户B,那么创建用户之间的链接,如果用户tweet/retwets一条tweet,则创建用户和tweet之间的链接。

推荐引擎

代码

在这个练习中,我们将使用Facebook数据。我们有一个facebook用户之间的边/链接文件。我们首先创建FB图,使用:

它是这样的:

FaceBook用户图

现在我们想要找到具有高影响力的用户。

直观地说,Pagerank算法会给有很多朋友的用户打高分,而这些朋友又有很多facebook上的朋友。

我们可以用PageRank得到最有影响力的用户排序:

以上id适用于最有影响力的用户。

我们可以看到最具影响力用户的子图:

最有影响力的用户(黄色)

5. 中心度量

有许多中心度量,你都可以将其用作机器学习模型的特征。我将讨论其中的两个。

内中心:重要的不仅是拥有最多朋友的用户,将一个地理位置与另一个地理位置连接起来的用户也很重要,因为这让用户可以看到来自不同地理位置的内容。内中心度量了一个特定节点在另外两个节点之间的最短路径中出现的次数

度中心:它是节点的连接数。

应用

中心度量可以作为任何机器学习模型的一个特征。

代码

面的代码用于查找子图的内中心。

可以看到,在这里按它们的内中心值调整节点的大小。他们可以被认为是信息传递者。将具有高内中心的任何节点断开将会将图分成许多部分。

总结

在这篇文章中,我讨论了一些最具影响力的图算法,它们改变了我们的生活方式

随着如此多的社会数据的出现,网络分析可以在很大程度上帮助我们改进模型和产生价值。

甚至更多地了解这个世界。

dijkstra算法代码_数据科学家需要知道的5种图算法(附代码)相关推荐

  1. 数据科学家需要知道的5种图算法

    作者:Rahul Agarwal 编译:ronghuaiyang 来源 | AI公园(ID:AI_Paradise) [导读]因为图分析是数据科学家的未来. 作为数据科学家,我们对pandas.SQL ...

  2. 面向数据科学家的实用统计学_数据科学家必知的统计数据

    面向数据科学家的实用统计学 Beginners usually ignore most foundational statistical knowledge. To understand differ ...

  3. python 欠采样_数据科学家需要了解的 5 种采样方法

    雷锋网 AI 科技评论按,采样问题是数据科学中的常见问题,对此,WalmartLabs 的数据科学家 Rahul Agarwal 分享了数据科学家需要了解的 5 种采样方法,雷锋网 AI 科技评论编译 ...

  4. 独家 | 如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)

    作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家 翻译:陈之炎 校对:闫晓雨 本文约4300字,建议阅读10分钟. 本文阐述如何使用StreamLit创建支持 ...

  5. 作为数据科学家应该知道的11件事

    背景 在我们举办的聚会期间,我们见到了很多朋友.从数据科学领域完全的菜鸟到专家,在同一个屋檐下,每个人都发出自己的疑惑.然而,当我们面对这群朋友--很大比例的这部分人(包括一些专家),一件事情显得尤为 ...

  6. 如何用简单的Python为数据科学家编写Web应用程序?(附代码链接)

    作者:拉胡尔·阿加瓦尔(Rahul Agarwal), Walmart 实验室的数据科学家 翻译:陈之炎  校对:闫晓雨 本文约4300字,建议阅读10分钟. 本文阐述如何使用StreamLit创建支 ...

  7. 多元高斯分布异常检测代码_数据科学 | 异常检测的N种方法,阿里工程师都盘出来了...

    ↑↑↑↑↑点击上方蓝色字关注我们! 『运筹OR帷幄』转载 作者:黎伟斌.胡熠.王皓 编者按: 异常检测在信用反欺诈,广告投放,工业质检等领域中有着广泛的应用,同时也是数据分析的重要方法之一.随着数据量 ...

  8. 网络工程师常备工具_网络安全工程师应该知道的10种工具

    网络工程师常备工具 If you're a penetration tester, there are numerous tools you can use to help you accomplis ...

  9. 西雅图治安_数据科学家对西雅图住宿业务的分析

    西雅图治安 介绍 (Introduction) Airbnb provides an online platform for hosts to accommodate guests with shor ...

最新文章

  1. 【笔记】MAC上使用onedrive遇到的问题及解决方法
  2. 贪心算法-区间选点问题-种树
  3. Vim - 奇技淫巧
  4. KubeSphere中部署Minio服务
  5. @autowired注解注入为null_Spring @Autowired 注解自动注入流程是怎么样?
  6. 第十一章、认识与学习BASH
  7. linux服务器启动ftp连接
  8. 绘图QPainter-字体
  9. 太实用了 Python 合成多张图片到PDF格式
  10. 如何修改ssh端口号
  11. java pojo 类 怎么写_[转]Java中的POJO类
  12. 尼古拉·特斯拉16句经典名言
  13. 算法导论第三章思考题
  14. centos7 firewall-cmd 命令报错 ModuleNotFoundError: No module named 'gi'
  15. 在线电子书阅读微信小程序 毕业设计(3)图书列表
  16. 408复习经验先写到这,后面再补充
  17. 注销在html中怎么,关于注销页面
  18. 两用图片视频压缩软件
  19. python 两个等长list的各对应位置元素相加+两个字典相加,相同键元素累加,不同键元素取全集
  20. wrcoef2函数_二维离散小波变换函数使用总结

热门文章

  1. 健康丨汗从哪里出 病从哪里来
  2. 赌还是不赌 你应该辞职去创业吗?
  3. 视频中场的问题2009-04-03 19:38(一)
  4. 解决.quartz.ObjectAlreadyExistsException: Unable to store Job : ‘jyGroup.jyJob‘, because one already
  5. Threading in C#
  6. 双机热备份和负载均衡的区别
  7. dbus服务自启动方法
  8. third day- 01--文件操作
  9. Machine Learning——octave矩阵操作(2)——DAY3
  10. POJ 1852 Ants 分析