加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

PageRank、最小天生树:ML开拓者应该相识的五种图算法

发布时间:2019-09-10 12:57:04 所属栏目:建站 来源:佚名
导读:在互联天下中,用户不能被视为独立的实体。他们之间存在必然的相关,我们偶然但愿在构建呆板进修模子时思量到这些相关。 在相关数据库中,我们无法在差异的行(用户)之间操作这种相关,但在图数据库中,这样做很是简朴。 在这篇文章中,我们将接头一些数
副问题[/!--empirenews.page--]

在互联天下中,用户不能被视为独立的实体。他们之间存在必然的相关,我们偶然但愿在构建呆板进修模子时思量到这些相关。

在相关数据库中,我们无法在差异的行(用户)之间操作这种相关,但在图数据库中,这样做很是简朴。

在这篇文章中,我们将接头一些数据科学家应该相识的很是重要的图算法,以及怎样行使 Python 实现它们。

毗连组件

PageRank、最小天生树:ML开拓者应该相识的五种图算法

我们都知道聚类的事变机制,你可以将毗连组件视为一种在关联/毗连数据中查找集群/个另外硬聚类算法。

举个例子:假设你有毗连天下上任何两个都市阶梯的数据。此刻你必要找出天下上全部大洲以及它们所包括的都市。

你将怎样实现这一方针呢?

我们回收的毗连组件算法是基于广度优先搜刮算法(Breadth First Search,BFS)/深度优先搜刮算法(Depth First Search,DFS)的非凡环境。这里不再睁开先容事变道理,我们只看一下怎样行使 Networkx 启动和运行此代码。

应用

从零售角度看:假设我们有许多客户行使大量账户。行使毗连组件算法的一种要领是在这个数据齐集找出差异的族。

我们可以按照沟通的名誉卡行使环境、沟通地点、沟通手机号码来成立某些客户 ID 之间的毗连。一旦有这些毗连,我们就可以运行毗连组件算法为有毗连的客户建设单个集群,然后为其分派一个家庭 ID。

然后,我们可以操作这些家庭 ID,按照家庭需求提供本性化保举。我们还可以操作家庭 ID,通过建设基于家庭的分构成果来推进分类算法。

从金融角度:另一个用例是操作这些家庭 ID 抓捕诈骗犯。假如某个帐户有过被诓骗经验,那么关联帐户很轻易再次受到诓骗。

实验的也许性仅仅受到自身想象力的限定。(想象力越富厚,算法的应用越普及。)

代码

我们将行使 Python 中的 Networkx 模块来建设和说明图。下面以包括都市和都市间间隔信息的图为例,实现我们的目标。

PageRank、最小天生树:ML开拓者应该相识的五种图算法

带有随机间隔的图

起首建设一个带有都市名(边)和间隔信息的列表,间隔代表边的权重。

  1. edgelist = [['Mannheim', 'Frankfurt', 85], ['Mannheim', 'Karlsruhe', 80], ['Erfurt', 'Wurzburg', 186], ['Munchen', 'Numberg', 167], ['Munchen', 'Augsburg', 84], ['Munchen', 'Kassel', 502], ['Numberg', 'Stuttgart', 183], ['Numberg', 'Wurzburg', 103], ['Numberg', 'Munchen', 167], ['Stuttgart', 'Numberg', 183], ['Augsburg', 'Munchen', 84], ['Augsburg', 'Karlsruhe', 250], ['Kassel', 'Munchen', 502], ['Kassel', 'Frankfurt', 173], ['Frankfurt', 'Mannheim', 85], ['Frankfurt', 'Wurzburg', 217], ['Frankfurt', 'Kassel', 173], ['Wurzburg', 'Numberg', 103], ['Wurzburg', 'Erfurt', 186], ['Wurzburg', 'Frankfurt', 217], ['Karlsruhe', 'Mannheim', 80], ['Karlsruhe', 'Augsburg', 250],["Mumbai", "Delhi",400],["Delhi", "Kolkata",500],["Kolkata", "Bangalore",600],["TX", "NY",1200],["ALB", "NY",800]] 

让我们行使 Networkx 建设一个图:

  1. g = nx.Graph() 
  2. for edge in edgelist: 
  3.     g.add_edge(edge[0],edge[1], weight = edge[2]) 

此刻我们想从这张图中找出差异的大洲及其都市,这可以行使毗连组件算法来实现:

  1. for i, x in enumerate(nx.connected_components(g)): 
  2.     print("cc"+str(i)+":",x) 
  3. ------------------------------------------------------------ 
  4. cc0: {'Frankfurt', 'Kassel', 'Munchen', 'Numberg', 'Erfurt', 'Stuttgart', 'Karlsruhe', 'Wurzburg', 'Mannheim', 'Augsburg'} 
  5. cc1: {'Kolkata', 'Bangalore', 'Mumbai', 'Delhi'} 
  6. cc2: {'ALB', 'NY', 'TX'} 

如你所见,只必要操作极点和边,我们就可以或许在数据中找到差异的组件。该算法可以在差异的数据上运行,从而满意上面提到的各类用例。

最短路径

继承行使上述示例,此刻我们有德京城市及都市之间间隔的图。怎样找到从法兰克福(起始节点)到慕尼黑的最短间隔?我们用来办理此题目的算法被称为 Dijkstra。用 Dijkstra 本身的话说:

从鹿特丹到格罗宁根观光的最短蹊径是什么?这就是最短路径算法,我花了约莫 20 分钟计划了它。一天早上,我和我的未婚妻在阿姆斯特丹购物,累了,我们便坐在咖啡馆的露台上喝咖啡,我只想着可否实现最短路径算法,然后我乐成了。

正如我所说,这是一个二异常钟的发现。究竟上,它颁发于 1959 年,此刻来看它的可读性也很是高。它之以是云云美好,个中一个缘故起因就是我没用笔纸就计划了它。其后我才知道,没有笔纸计划的有点之一是你不得一直止全部可停止的伟大题目。最终,令我惊奇的是,这个算法成为我的闻名成就之一。

应用

Dijkstra 算法的变体在 Google 舆图中有着普及行使,用于探求最短蹊径。

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读