基于图的机器算法 (二)

基于图的机器算法
(二)

编者按:基于图的机器算法学习是一个强大的工具。结合运用模块特性,能够在集合检测中发挥更大作用。本文是基于图的机器算法系列文的第二篇(前情回顾:基于图的机器算法 (一))。

在上一篇文章中,我们进行了使用模块化优化方式来进行集合检测的探索。然而它有个不足,你的图需要适应内存。当你的节点数超过数十亿,边数将变成万亿,这很快就会出现问题。

幸运的是,我们可以利用分布式计算系统来解除这个限制。为此,我们首先需要定义节点的状态,使其包含计算期间所需的所有信息;这将构成在分布式集群的器之间传递数据的基本结构。

让我们简要回顾一下模块化优化的过程。通过迭代方式对局部模块化优化的节点进行合并,以产生新的和更小的图来工作。重复,直到满意。这种方法产生了两个重要的属性:

  • 局部性:每个节点只需要来自其第一度邻点的知识。这意味着群集之间传递的数据是最少的。这样,您就不必从节点到节点进行跳转来获取跨集群的信息。
  • 独立性:每个局部计算独立于图的布局。在迭代中,每个节点可以异步地将其信息发送到其邻点,而无需等待阻塞序列集合的操作。

让我们继续深入地探究在不同节点进行集合传送的初始步骤。记住每个节点需要读取来自其邻点的信息,以便计算局部模块化的梯度。

 

发送(Transfer)

进行大规模数据传送的最好方法是使用分布式事务。它是组成程序的对象的工作方式,用于在不同计算机(互联网)上运行对象和进行系统交互。在集合检测过程中,每个节点向其邻点发类似如下内容的消息:

“嗨,我是你友好的邻居,集合12的节点3。”

通过独立地向它们的第一度邻点发送消息,每个节点可以检索它们并获取为进行局部模块化优化所需的所有信息。 每个消息的内容可以任意调整,从而增加了相当大的灵活性。

 

如果你曾经使用过图,一定不会对顶点和边的概念陌生。如果不得不遍历所有的顶点及其边来进行数据传送,这将是件很痛苦的事。在GraphX的世界中,或许我们可以尝试第三种原语:三元组。

 

GraphX中支持的三种不同的视图。更详细介绍请访问AMLab

三元组以一种简化的和有用的方式来进行顶点和边属性的逻辑连接。表面上看,EdgeTriplet类透过增添srcAttr和dstAttr成员来对Edge 类进行了扩展,其分别为源和目标属性。通过减少三元组视图,。sendMsg和mergeMsg都是内部函数执行必要的聚合为局部模块更新。每个节点独立和并行,等待它的将减少其所有消息转变成一个连贯的地方和加权边缘,和做决定基于局部模块化deltaQ邻近集合。

几轮迭代后,图已经聚集到局部平衡(如少量的节点达到改变集合的状态)。算法可以进展到下一步压缩那些集合形成一个紧凑的状态。这是通过创建一个含有新节点集和边的新图来完成的,这些边是有前次计算而推断得到的(例如:外部边的平均值或和)。

 

压缩(Compression)

函数的选用取决于使用案例(例如:求平均值,求和等)。

每次迭代时集合压缩在单节点中的影响

假设我们有足够大的磁碟,可以使用全功能函数程序来对超大图进行模块化优化工作。

 

最后和大家再分享几个知识点:

计算时间

在每次传递时meta-集合数量会自然减少,因此大部分的计算时间仅用于第一次。这表明先序数据在时间节约上有相当的优势。

在集群级别的局部节点优化意味着发生更少的机器间传送

聚集

这种方法不一定收敛于最优方案。为了改善这种情况,多次迭代可以优化数据的结构。这为两个同属于某个集合的节点提供了一个便利的概率代理方式。

 

布局

布局策略的有效性要考虑图的连接性。例如,对于一个完全连接和未加权的图,输出将会退化。事先考虑阈值图像中提取数据的稀疏表示。

模块化的充分优化依赖图的连接模式。例如,一个点阵布局算法的执行效果将相当差。模块化优化并不能保证足够的集群;因此获得的最后一个集合不能说就绝对属于某个节点组(甚至任何组)。

 

 

层次结构

这一过程的迭代特性提供了一种层次化的在后续迭代集合之间的视图。中间步骤应该被保存,以进行更深层次的有效消息发掘。

 

总结

查执行集合检测的可行性是通过GraphX分布式方法实现的。嵌入到Hadoop生态系统中的模块化优化方法实现了网络空前规模的研究;适用于营销,市场细分,基因聚类,主题建模等领域。

文章原标题《Graph-based machine learning: Part 2》,作者:Sebastien Dery

文章为简译,更为详细的内容,请查看原文

时间: 2024-09-13 13:52:43

基于图的机器算法 (二)的相关文章

基于图的机器算法 (一)

本文由北邮@爱可可-爱生活 老师推荐,阿里云组织翻译. 以下为译文: 可扩展集合检测 编者按:基于图的机器算法学习是一个强大的工具.结合运用模块特性,能够在集合检测中发挥更大作用. 很多复杂的问题都可以使用图来表示和学习----社交网络,细菌行为,神经网络等等.本文探讨了图中节点 自发地形成内部密集链接(在此称为"集合")的趋势; 生物网络的显着的和普遍的属性. 集合检测旨在将图划分为密集连接的节点的群集,其中属于不同集合的节点仅稀疏地连接. 图形分析涉及到节点(描述为磁盘)的研究及其

Floyd算法(二) C++详解

弗洛伊德算法介绍 和Dijkstra算法一样,弗洛伊德(Floyd)算法也是一种用于寻找给定的加权图中顶点间最短路径的算法.该算法名称以创始人之一.1978年图灵奖获得者.斯坦福大学计算机科学系教授罗伯特·弗洛伊德命名. 基本思想 通过Floyd计算图G=(V,E)中各个顶点的最短路径时,需要引入一个矩阵S,矩阵S中的元素a[i][j]表示顶点i(第i个顶点)到顶点j(第j个顶点)的距离. 假设图G中顶点个数为N,则需要对矩阵S进行N次更新.初始时,矩阵S中顶点a[i][j]的距离为顶点i到顶点

matlab-(Matlab)基于量子粒子群的二维大津图像分割

问题描述 (Matlab)基于量子粒子群的二维大津图像分割 请教编写基于qpso算法,适应度函数为最大类间方差的图像分割算法,有懂行的请加qq 2893541647,可以交流下,加我时请说csdn 解决方案 类似下面? void ImageBinarization(IplImage *src) 85.{ /*对灰度图像二值化,自适应门限threshold*/ 86. int i,j,width,height,step,chanel,threshold; 87. /*size是图像尺寸,svg是灰

基于图卷积网络的图深度学习

更多深度文章,请关注云计算频道: https://yq.aliyun.com/cloud 基于图卷积网络的图深度学习 先简单回顾一下,深度学习到底干成功了哪些事情! 深度学习近些年在语音识别,图片识别,自然语音处理等领域可谓是屡建奇功.ImageNet:是一个计算机视觉系统识别项目, 是目前世界上图像识别最大的数据库,并且被业界熟知. 我们先回顾一下,没有大数据支撑的欧式深度学习技术.对于一个字母"Z"的识别,我们通常是建立一个2D网格(点阵),如果将其中的点连接起来,定义这样的连接方

入侵分析钻石模型与基于网络的威胁复制(二)

本文讲的是入侵分析钻石模型与基于网络的威胁复制(二),本文为作者Justin Warner (@sixdub)近期在 BSides DC 峰会上与 Chris·Ross的共同演讲内容的扩展,嘶吼编辑翻译.由于内容过长,分为两篇放出.前文见入侵分析钻石模型和基于网络的威胁复制. 那又怎样?为什么红军如此关心? 由于蓝军可以准确.科学地使用这个模型跟踪对手,而红军也正试图模仿一个特定的对手,所以利用这个模型也能够复制所选择的威胁,这一点非常有意义.通过我们对要模拟的对手的了解开始,红军可以来定义和模

Java代码实践12306售票算法(二)_java

周五闲来无事,基于上一篇关于浅析12306售票算法(java版)理论,进行了java编码实践供各位读者参考(以下为相关代码的简单描述) 1.订票工具类 1.1初始化一列车厢的票据信息 /** * 生成Ticket信息 * * @param train * @return */ public static List<Ticket> initTicketList(Train train) { List<Ticket> result = new ArrayList<Ticket&g

JavaScript中数据结构与算法(二):队列

  这篇文章主要介绍了JavaScript中数据结构与算法(二):队列,队列是只允许在一端进行插入操作,另一个进行删除操作的线性表,队列是一种先进先出(First-In-First-Out,FIFO)的数据结构,需要的朋友可以参考下 队列是只允许在一端进行插入操作,另一个进行删除操作的线性表,队列是一种先进先出(First-In-First-Out,FIFO)的数据结构 队列在程序程序设计中用的非常的频繁,因为javascript单线程,所以导致了任何一个时间段只能执行一个任务,而且还参杂了异步

基于智能蚁群算法的路径优化

问题描述 基于智能蚁群算法的路径优化 用这个课题写篇论文,可以从哪方面入手呢,可不可以简单的介绍一个旅行商问题呢

基于图的深度优先搜索和广度优先搜索java实现

 为了解15puzzle问题,了解了一下深度优先搜索和广度优先搜索.先来讨论一下深度优先搜索(DFS),深度优先的目的就是优先搜索距离起始顶点最远的那些路径,而广度优先搜索则是先搜索距离起始顶点最近的那些路径.我想着深度优先搜索和回溯有什么区别呢?百度一下,说回溯是深搜的一种,区别在于回溯不保留搜索树.那么广度优先搜索(BFS)呢?它有哪些应用呢?答:最短路径,分酒问题,八数码问题等.言归正传,这里笔者用java简单实现了一下广搜和深搜.其中深搜是用图+栈实现的,广搜使用图+队列实现的,代码如下