文 / NYC 算法与优化研究团队研究员 Hossein Bateni 和软件工程师 Kevin Aydin

解决大规模优化问题通常始于图分割,这就意味着需要将图的顶点分割成聚类,然后在不同的机器上处理。我们需要确保聚类具有几乎相同的大小,这就催生了均衡图分割问题。简单地说,我们需要将给定图的顶点分割到 k 个几乎相等的聚类中,同时尽可能减少被分割切割的边数。这个?NP 困难问题在实践中极其困难,因为适用于小型实例的最佳逼近算法依赖半正定规划,这种规划对更大的实例来说不切实际。

这篇博文介绍了我们开发的分布式算法,这种算法更适合大型实例。我们在?WSDM 2016 论文中介绍了这种均衡图分割算法,并且已将这种方法运用到 Google 内部的多个应用中。我们最近发表的?NIPS 2017 论文通过理论与实证研究详细介绍了这种算法。

通过线性嵌入实现均衡分割

我们的算法先将图的顶点嵌入到一条直线中,然后按照线性嵌入顺序,以分布式方式处理顶点。我们检查了各种方式来查找初始嵌入,并应用四种不同的技术(例如局部交换和动态规划)获取最终分割。最佳初始嵌入基于 “亲和聚类”。

亲和层次聚类

亲和聚类是一种基于?Bor?vka 经典最大开销生成树算法的凝聚型层次图聚类。与上面讨论的一样,这种算法是我们均衡分割工具的关键部分。它首先会将每个顶点置于各自的聚类中:v0、v1,依此类推。然后在每次迭代中,从每个聚类中选择开销最高的边,以便包含更大的合并聚类:在第一轮中包含 A0、A1 和 A2 等,在第二轮中包含 B0 和 B1等,依此类推。合并集合会自然生成一个层次聚类,并产生叶顶点(一度顶点)的线性序。下图说明了这一点,底部数字对应于顶点的顺序。

我们的?NIPS’17 论文说明了我们如何在大规模并行计算 (MPC) 模型中有效运行亲和聚类,特别是使用分布式哈希表 (DHT) 显著缩短运行时间。这篇论文也介绍了算法的一个理论研究。我们报告了具有数十万亿条边的图的聚类结果,并观察到在 “聚类质量” 方面,亲和聚类在实践中优于 k-均值等其他聚类算法。这段视频包含结果汇总,并说明了与顺序单链接凝聚算法相比,这种并行算法如何生成更优质的聚类。

注:视频链接?https://www.youtube.com/watch?v=1IOEFNGPNJc

与之前工作的比较

在将这种算法与(分布式)均衡图分割中的之前工作进行比较时,我们侧重于?FENNEL、Spinner、METIS,以及近期一种基于标签传播的算法。我们报告了在多个公共社交网络和大型专属地图图表中取得的结果。对于?Twitter 关注关系图,我们看到比之前的结果(Ugander 和 Backstrom 等人于 2013 年取得)有 15-25% 的一致改进,而对于 LiveJournal 图,我们的算法也仅仅在 k=2 时稍逊于 FENNEL 的结果,除此之外均优于其他所有算法。

下表显示了在 Twitter 图中通过不同算法为各种 k 值(聚类数量)获得的切割边百分比。括号中的数字表示大小失衡系数:即最大与最小聚类大小的相对差异。这里的 “普通亲和聚类” 表示我们算法的第一个阶段,在这个阶段中,我们仅构建了层次聚类,没有对切割执行进一步处理。请注意,这已经可以与之前的最佳结果(显示在下表的前两列中)相媲美了,在切割更少的边的同时获得完美(因而更好的)平衡(即,0% 失衡)。表格中的最后一列包含我们的算法在进行后期处理之后的最终结果。

应用

我们将均衡图分割运用到多个应用中,包括?Google 地图驾驶路线、预科生网页搜索服务后端,以及为实验性设计寻找实验组。例如在 Google 地图中,世界地图图表存储在多个分片中。与可以在一个分片内处理的查询相比,跨越多个分片的导航查询的开销明显更大。利用论文中介绍的方法,我们可以通过将分片失衡系数从 0% 增大至 10% 的方式减少 21% 的跨分片查询。

如我们的论文中所述,对真实流量的实时实验显示,与希尔伯特嵌入基准技术相比,我们的切割优化技术将多分片查询的数量减少了 40%。这反过来又会降低响应查询时的 CPU 使用率。在未来的博文中,我们将讨论这项工作在网页搜索服务后端中的应用,在这个用例中,均衡分割已经帮助我们设计了一个具有缓存感知能力的负载平衡系统,大大降低了我们的缓存未命中率。

更多 AI 相关阅读:

·?不断演进的 Chrome 安全标识

·?Kubernetes 最佳实践:零宕机升级集群

·?保护用户免受扩展程序加密劫持


文章来源:https://blog.csdn.net/jILRvRTrc/article/details/81351564

转载于:https://www.cnblogs.com/yujingyua/p/9645226.html

大规模均衡分割与层次聚类相关推荐

  1. 层次聚类(Hierarchical Clustering)——CURE算法详解及举例

    1 CURE聚类概述 绝大多数聚类算法或者擅长处理球形和相似大小的聚类.或者在存在孤立点时变得比较脆弱.CURE采用了一种新颖的层次聚类算法.该算法选择基于质心和基于代表对象方法之间的中间策略.它不同 ...

  2. 机器学习算法(十二):聚类(2)层次聚类 Hierarchical Clustering

    目录 1 层次聚类 1.1 层次聚类的原理 1.2 两个组合数据点间的距离: 2 自底向上的合并算法 2.1 AGNES算法 (AGglomerative NESting) 2.1.1 原理 2.1. ...

  3. 层次聚类算法原理总结

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 层次聚类(hierarchical clustering)基于簇间 ...

  4. 层次聚类python_用python绘制层次聚类图

    层次聚类(Hierarchical clustering)代表着一类的聚类算法,这种类别的算法通过不断的合并或者分割内置聚类来构建最终聚类. 聚类的层次可以被表示成树(或者树形图(dendrogram ...

  5. 7月23日 R进行层次聚类算法的继续完善

    1.前面读取数据库不变 ##连接数据库,将数据库中的文件读取出来 #加载包 library(RMySQL) #建立连接 conn <- dbConnect(dbDriver("MySQ ...

  6. matlab 层次聚类

    MATLAB的统计工具箱中的多元统计分析中提供了聚类分析的两种方法: 1.层次聚类 hierarchical clustering 2.k-means聚类 这里用最简单的实例说明以下层次聚类原理和应用 ...

  7. 【机器学习】层次聚类

    写在篇前   层次聚类(hierarchical clustering)是一种通用的聚类算法之一,它通过自下而上合并或自上而下拆分来构建嵌套聚类.这种簇的层次结构表示为树(或树状图),树的根汇聚所有样 ...

  8. 层次聚类算法 算法_聚类算法简介

    层次聚类算法 算法 Take a look at the image below. It's a collection of bugs and creepy-crawlies of different ...

  9. 机器学习算法之 K-means、层次聚类,谱聚类

    k-means 和层次聚类都属于划分聚类,实际中最常用的是k-means,k-means效果不好的情况下才会采用其他聚类 K-means算法 K-means算法,也称为K-平均或者K-均值,是一种使用 ...

  10. 聚类算法 距离矩阵_机器学习基础-层次聚类

    层次聚类(Hierarchical clustering) 何时使用? 当我们希望进一步挖掘观测数据的潜在关系,可以使用层次聚类算法. 工作方式 首先我们会计算距离矩阵(distance matrix ...

最新文章

  1. Live2D WebGL实现
  2. 一个基于.Net 5开发的轻量级Quartz配置中心 - QuartzCore.Blazor
  3. hive+python数据分析入门
  4. RVC使用指南(三)-对象管理
  5. js 父子标签同时设置onclick,子标签触发父标签onclick解决办法
  6. 微软正式确认 Windows 7 RTM 的发布时间
  7. Charles最新版破解注册方法
  8. ZigBee-CC2530单片机 - 按键控制LED
  9. JS、H5调用手机相册摄像头以及文件夹
  10. 手机上使用油猴插件 Tampermonkey
  11. 站在巨人的肩膀上--邵泓鑫
  12. python用smtp发邮件怎么抄送_Python发送邮件并抄送
  13. 详解单片机中的关键字:sfr sbit
  14. thinkPHP6报错:Failed to listen on 0.0.0.0:8000 (reason: һַȨ޲“
  15. 解决eclipse debug运行项目时下一步按钮一直为灰色不可用的问题
  16. w10计算机管理员权限在哪里设置密码,Win10使用管理员权限需要PIN密码的设置方法 三种解决方法...
  17. midjournery AI绘画使用指南
  18. round( )函数:四舍五入
  19. Android P SELinux (四) CTS neverallow处理总结
  20. 一个依赖搞定Spring Boot 配置文件脱敏

热门文章

  1. ASP.NET MVC - 使用Post, Redirect, Get (PRG)模式
  2. 如何使用计算机小学生课件,小学生计算机课件
  3. pandas读取csv文件数据并对指定字段分类使用matplotlib在一张图里画四张折线图子图
  4. pycharm的编码问题
  5. python rabitmq_python中RabbitMQ的使用(安装和简单教程)
  6. PHP 动态获取数组索引的值
  7. 用 js 写的 WebSocketHeartBeat,心跳检测
  8. docker 下使用 Hyperf(win10)
  9. Layer success 层弹出后的成功回调方法
  10. Python获取图片的大小/尺寸