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

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

作者:AI公园

a567603f9a123e1c4ff17f59d3ddb87d.png

导读

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

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

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

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

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

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

1. 连通组件

8196d1bf7d94e0ffc70dd8aac0818268.png

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

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

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

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

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

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

应用

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

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

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

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

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

代码

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

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

cb9cdfe2db69b93767b83e2a266930f8.png

使用随机距离的图

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

8686dcfaa92ff2efea74593d646ffc43.png

使用Networkx构建图:

cdba2bbe0fe2936c9b428212c5c1401d.png

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

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

c4131c0625956bcc0d7a3d8349c65b83.png

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

2. 最短路径

1185356fb4d7a2b1b69a16607cfcc0ad.png

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

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

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

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

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

应用

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

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

5f9fe316e6be23e7b9e4bfecd598b74d.png

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

3f9fea38ad162924154af974ebb2b599.png

代码

3587419e555307ba0a76302b4b636694.png

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

3fac3eb50747ddaf175d827183d39402.png

3. 最小生成树

7dc84c05d7dc08fe70895d9863b35381.png

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

38fd945475e389b92e5e541389b309e8.png

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

应用

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

MST用于逼近旅行商问题

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

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

代码

40fa8e326b7b40457757dc344d6d68cc.png
5fec14573fd3f1bbc4c6d0dfda1f2d02.png

我们的图的最小生成树

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

4. Pagerank

adaf5b1678f1cf672197f301869932f1.png

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

应用

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

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

被谷歌用来排列页面

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

推荐引擎

代码

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

a71249e5c7ac3961e20a5a871cae0b1b.png

它是这样的:

e6974cbc9b65155e8508f2c0f356ffc2.png
8e9460eb2e176ddbc12e1bd4732001aa.png

FaceBook用户图

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

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

d0809fd9f3dc23a12c29fb464f09ec58.png

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

4571e542b8feb1de145ecc8ea3ed3c84.png

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

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

fa6692e96a0cfbfbfdf57216a130eccd.png
f9fdd1f6a55ad3a6160daa7d961c9a5d.png

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

5. 中心度量

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

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

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

应用

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

代码

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

e8f68ddd17733ae0620d4c75ec0c3360.png
74025e1e73e58a80b6bb90902f092f82.png

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

总结

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

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

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

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

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

相关文章

大暴搜 chess

仔细读题,会发现吃掉敌人点对方案数的贡献很神奇。如果走的空格相同,而走的敌人点不同,对答案无贡献,而对于走的空格相同,但一种走了敌人点,另一种没走,算两个方案。。。。sb出题人语文简直是和…

html 缩略图点击预览,[每天进步一点点~] uni-app 点击图片实现预览图片列表

点击图片,实现预览图片功能,并且可循环预览图片列表!image.png一、多张图片预览html代码js代码data(){return {photos:[{ src: 图片路径1},{ src: 图片路径2},{ src: 图片路径3},……]}},methods: {// 预览图片previewImage(index) {let phot…

git ssh拉取代码_阿里云搭建git服务器

一.搭建步骤,分为两步搭建中心仓库自动同步代码到站点目录二.详细步骤如下1.先检查一下服务器上有没有安装gitgit --version如果出现版本号,说明服务器已经安装git,如图所示:2.如果没有版本信息,则先安装git&#xff1…

Word -- 列表重新编号

Word -- 列表重新编号office一言:我小心翼翼地灌溉,一日复一日地期待,那么费力,植成参天的乔木,岂愿见你终有一日从容赴死?问题 word 文档早就想解决的一个问题,这次遇到了就上网找解决掉了&…

非持久连接和持久连接

非持久连接和持久连接 HTTP既可以使用非持久连接(nonpersistent connection),也可以使用持久连接(persistent connection)。HTTP/1.0使用非持久连接,HTTP/1.1默认使用持久连接。 非持久连接 让我们查看一下非持久连接情况下从服务器到客户传送一个Web页面…

计算机开机键鼠无法识别,我得电脑一开机就检测不到键盘和鼠标

2005-10-18 16:06:131、开机后当出现dos界面时,按一下pause键(这个键在四个方向键的上边,仔细找就能找到),如果计算机启动停止,说明你的键盘起作用,主板在开机时就已经检测到了鼠标键盘。启动后不能使用鼠标键盘&#…

vs2003 局部友元访问私有不可访问_C++ 类:重载运算符与友元

18.类中重载运算符与友元上次节中学习了如何在类中重新定义赋值()运算符,实际上在一个自定义类中除了赋值()运算符外,类的对象是不可以直接使用运算符的,比如你在main函数中写这样的代码会报错:如果想解决这些报错问题&#xff0c…

Django REST framework 视图

上一部分代码在序列化部分 类继承顺序 ############### mixins.py ################ # 类中调用的方法均在 GenericAPIView 类中实现,所以下列类需要结合 GenericAPIView 使用 class ListModelMixin(object) # 查看继承类def list(self, reque…

IOS7.1.1真的像网上流传的那么好?没有任何问题么??

IOS7.1.1推送更新之后到处看到网上说711好的~~ 那么IOS7.1.1真的像网上现在流传的那么好么? 其实不然,IOS7.1.1目前众多网友反映说升级ios7.1.1之后APPstore连接不上了,提示无法连接到APPstore。 这个问题也不难解决~还是之前的老办法~ 那么今…

三校生计算机对口本科有哪些学校,宝山三校生五月对口高考报名

多次复习生活不可能像你想象得那么好,但也不会像你想象得那么糟。我觉得人的脆弱和坚强都超乎自己的想象。多种方式结合起来复习单一的复习方法,易产生消极情绪和疲劳,如果采用交谈复习法、讨论复习法、自我检查复习法多样化的复习方法&#…

localhost 已拒绝连接_【Python】MongoDB数据库的连接和操作

安装Python 要连接 MongoDB 需要 MongoDB 驱动。pip安装:python3 -m pip3 install pymongo创建数据库import pymongo myclient pymongo.MongoClient("mongodb://localhost:27017/")mydb myclient["loaderman"]注意: 在 MongoDB 中&#xff0c…

checkbox已设置为checked--true-但不勾选问题解决方法(只第一次勾选有效)

一、出现的问题及解决方法: 今天在写一个table相关插件的时候无意中发现了这样一个问题,记得以前在写这种控制checkbox选中与非选中的代码时并没有这种bug,当时也是用的checked属性,而现在却行不通了。 于是乎做了以下测试&#x…

Django REST framework 认证、权限和频率组件

认证与权限频率组件 身份验证是将传入请求与一组标识凭据(例如请求来自的用户或其签名的令牌)相关联的机制。然后 权限 和 限制 组件决定是否拒绝这个请求。 简单来说就是: 认证确定了你是谁权限确定你能不能访问某个接口限制确定你访问某…

高速率AVS整数变换的汇编实现与优化

1 引言 AVS标准Ⅲ采用的8x8整数变换在获得较H.264更高的压缩率和主观图像质量的同时,增加了算法的实现复杂性和时间开销。本文重点研究AVS编解码器的整数变换模块,针对不同的算法实现模式,在原有Visual C6.0整数变换模…

解析H.264视频编解码DSP实现与优化

引言 基于互联网的数字视频产业前景看好,而3G的规模部署,也会推动移动视频通信成为现实。但数字化后的视频图像具有数据海量性,给图像的存储和传输造成较大的困难。数字视频产业,是指数字内容中以数字视频形态为主的文化创意和传播…

python 打包exe_python如何封装为exe

1、首先进入python安装路径D:\Python27\Scripts下,查看pip或easy_install是否安装。2、确保安装了pip或者easy_install,在cmd命令行下输入“easy_install”,没有提示“xxx不是内部或外部命令……”,就说明easy install工具安装成功…

Django REST framework 解析器和渲染器

解析器的作用 解析器的作用就是服务端接收客户端传过来的数据,把数据解析成自己可以处理的数据。本质就是对请求体中的数据进行解析。 在了解解析器之前,我们要先知道Accept以及ContentType请求头。 Accept是告诉对方我能解析什么样的数据&#xff0c…

MyBatis的学习之路(二)

上篇文章介绍了MyBatis的配置文件,现在来介绍实体映射文件Mapper.xml。 说道实体映射文件,就不得不说一下实体与表之间的映射关系:单表映射和多表映射。 a. 单表映射 1 public class Admin{ 2 private String id; 3 private String n…

python爬取toefl_spark学习进度6-Python爬取数据的四个简单实例

今天本来想把昨天安装的intellij配置好,但是一直显示没有网络,网上查了相关资料也没有查出来解决办法。然后暂停了intellij的配置,开始做了几个Python爬取简单数据的实例,先做了几个最简单的,以后再加大难度&#xff0…

Django REST framework 版本

API 版本控制允许我们在不同的客户端之间更改行为(同一个接口的不同版本会返回不同的数据)。 DRF提供了许多不同的版本控制方案。 可能会有一些客户端因为某些原因不再维护了,但是我们后端的接口还要不断的更新迭代,这个时候通过…