用于小型图形挖掘研究的瑞士军刀:空手道俱乐部的图表学习Python库
作者 | Benedek Rozemberczki
译者 | 天道酬勤 责编 | Carol
出品 | AI科技大本营(ID:rgznai100)
空手道俱乐部(Karate Club)是NetworkX Python软件包的无监督机器学习扩展库。详细可以参阅此处的文档:
https://github.com/benedekrozemberczki/karateclub。
空手道俱乐部采用先进的方法对图结构化数据进行无监督学习。简而言之,它是用于小型图形挖掘研究的瑞士军刀。
首先,它在节点级和图级提供了网络嵌入技术。其次,它包括各种重叠和不重叠的社区检测方法。实现的方法涵盖广泛的网络科学(NetSci,Complenet)、数据挖掘(ICDM,CIKM,KDD)、人工智能(AAAI,IJCAI)和机器学习(NeurIPS,ICML,ICLR)会议、研讨会和著名期刊。
一个简单示例
空手道俱乐部使现代社区检测技术的使用变得非常容易(可参阅此处的随附教程:https://karateclub.readthedocs.io/en/latest/notes/introduction.html)。下面的代码段在合成图上使用了重叠的社区检测算法。
设计原则
当创建空手道俱乐部时,我们使用了面向API的机器学习系统设计观点——为了成为最终用户友好的机器学习工具。这种面向API的设计原则包含一些简单的思想。在本节中,我们将通过适当的说明性示例详细讨论这些思想及其明显的优势。
1)封装模型超参数与检验
通过使用适当的Python对象的构造函数来创建无人监督的空手道俱乐部模型实例。该构造函数具有一个默认的超参数设置,该设置允许合理地使用现成的模型。简单地说,这意味着最终用户不需要非常详细地理解内部模型机制,就可以使用在我们的框架中实现的方法。
我们设置这些默认超参数来提供合理的学习和运行时性能。如果需要,可以在模型创建时使用构造函数的适当参数化来修改这些模型超参数。超参数存储为公共属性,以便允许检查模型设置。
我们通过上面的代码片段演示了超参数的封装。首先,我们要为使用标准超参数设置的NetworkX生成的Erdos-Renyi图创建一个嵌入。
当构建模型时,我们不会更改这些默认超参数,而可以打印尺寸超参数的标准设置。其次,我们可以设置不同数量的维度,因此我们创建了一个新模型,并且仍然可以公开访问维度超参数。
2) 类的一致性和非扩散性
空手道俱乐部中的每个无监督机器学习模型都实现为一个单独的类,该类继承自Estimator类。因为我们假设最终用户对与特定技术有关的算法细节不是特别感兴趣,所以在我们的框架中实现的算法只有少数几种公共方法。
所有模型都通过使用fit()方法进行拟合,该方法接受输入(图形、节点特征)并调用适当的私有方法来学习嵌入或集群。节点和图的嵌入由get_embedding()公共方法返回,而集群成员关系则通过调用get_memberships()来检索。
在上面的代码段中,我们创建了一个随机图,并使用具有默认超参数的DeepWalk模型,使用public fit()方法对该模型进行拟合,并通过调用public get_embedding()方法返回嵌入。
我们可以对这个示例进行修改,通过更改模型导入和构造函数以最小的工作量创建嵌入的walklet,这些修改将产生下面的代码片段。
综观以上两个代码片段,API驱动设计的优势显而易见,因为我们只需要进行一些修改即可。首先,必须更改嵌入模型的导入。其次,我们需要更改模型构造,并且已经设置了默认的超参数。
第三,DeepWalk和Walklets类提供的公共方法的行为相同。嵌入是通过fit()学习的,并由get_embedding()返回。当用于特征提取的上游非监督模型性能较差时,这可以快速、最少地更改代码。
3)标准化数据集提取
我们设计了空手道俱乐部,以便在拟合模型时使用标准化的数据集提取。实际上,这意味着目的相同的算法使用相同的数据类型进行模型训练。详细如下:
基于邻域和结构节点的嵌入技术使用单个NetworkX图作为拟合方法的输入。
属性节点嵌入过程将NetworkX图作为输入,并将要素表示为NumPy数组或SciPy稀疏矩阵。在这些矩阵中,行对应于节点,列对应于特征。
图级嵌入方法和统计图指纹将NetworkX图的列表作为输入。
社区检测方法使用NetworkX图作为输入。
4)高性能模型力学
图挖掘算法的底层机制是使用广泛使用的Python库实现的,这些库不依赖于操作系统,并且不需要其他外部库(如TensorFlow或者PyTorch)的存在。空手道俱乐部中的内部图形表示使用NetworkX。
密集的线性代数运算是使用NumPy完成的,而稀疏的对等运算则使用SciPy。隐式矩阵分解技术利用GenSim软件包,而依赖图形数据处理的方法则使用PyGSP。
5)标准化的输出生成和接口
空手道俱乐部的标准化输出生成可确保用于相同目的的无监督学习算法始终以一致的数据点顺序返回相同类型的输出。
这种设计原则具有非常重要的意义。当将某种类型的算法替换为相同类型的算法时,不必更改使用上游无监督模型输出的下游代码。具体而言,通过我们的框架生成的输出使用以下数据结构:
调用get_embedding()方法时,节点嵌入算法(保留领域、属性和结构)始终返回NumPy浮点数组。数组中的行数是顶点数,并且行索引始终对应于顶点索引。此外,列数是嵌入维数。
当调用get_embedding()方法时,整个图形嵌入方法(光谱指纹、隐式矩阵分解技术)将返回Numpy浮点数组。行索引对应于单个图在输入图列表中的位置。同样,列代表嵌入维数。
调用get_memberships()方法时,社区检测过程将返回一个字典。节点索引是键,与键对应的值是顶点的社区成员。某些图集群技术会创建节点嵌入,来查找顶点集群。调用get_embedding()方法时,它们将返回NumPy浮点数组。该数组的结构类似于节点嵌入算法返回的数组。
我们将通过下面的代码片段演示标准化的输出生成和接口。我们创建随机图的集群,并返回包含集群成员资格的字典。使用外部社区库,我们可以计算这些集群的模块化。
这表明标准化的输出生成将与外部图挖掘和机器学习库的接口变得更容易了。
6) 局限性
目前,空手道俱乐部的设计存在一定的局限性,我们对输入进行了假设。我们假定NetworkX图是无向的,并且由单个强连接的组件组成。所有算法都假定节点的索引是连续的,并且起始节点索引为0。此外,我们假设图不是多部分的,节点是均匀的,并且边是未加权的(每个边都有单位权重)。
对于整个图形嵌入算法,图集中的所有图形都必须修改先前列出的关于输入的要求。基于Weisfeiler-Lehman特性的嵌入技术允许节点具有单个字符串功能,可以使用功能键进行访问。在没有此键的情况下,这些算法默认将中心度用作节点特征。
如果有不清楚的地方或其他意见,欢迎评论告诉我们。
原文:
https://hackernoon.com/karate-club-a-python-library-for-graph-representation-learning-05383yh9
【end】
◆
原力计划
◆
《原力计划【第二季】- 学习力挑战》正式开始!即日起至 3月21日,千万流量支持原创作者!更有专属【勋章】等你来挑战
推荐阅读
Python数据清理终极指南(2020版)
无需3D运动数据训练,最新人体姿势估计方法达到SOTA | CVPR 2020
前端 Webpack 工程化的最佳实践
如何与亦敌亦友的 null 说拜拜?大神原来是这么做的!
从哈希函数、哈希冲突、开散列出发,一文告诉你哈希思想与哈希表构造到底是什么!
罗永浩欲直播带货,京东说可以帮忙联系
你点的每个“在看”,我都认真当成了AI
相关文章:

电子商务创造的第二次产业机会
即将迎来冬至节气的这个周末,天寒地冻,却是电子商务的饕餮之季。淘宝网商交易大会刚刚在成都落下帷幕,而比网货交易会更令业界期待的“2009中国电子商务创新发展高峰论坛”也在北京顺利召开。大会由国内最大的电子商务软件及服务提供商ShopEx…

C#趣味程序---个位数为6,且能被3整出的五位数
using System;namespace ConsoleApplication1 {class Program{static void Main(string[] args){int count 0;int k;for (int i 1000; i < 9999; i){k i * 10 6;if (k % 3 0){Console.WriteLine(k);count;}}Console.WriteLine(count); }} }

c# winform 用子窗体刷新父窗体,子窗体改变父窗体控件的值
第一种方法: 用委托,Form2和Form3是同一组 Form2 usingSystem; usingSystem.Collections.Generic; usingSystem.ComponentModel; usingSystem.Data; usingSystem.Drawing; usingSystem.Text; usingSystem.Windows.Forms; namespaceTestMouseMove { pub…

TCMalloc
tcmalloc 业界最有名的内存分配库,当数google 的tcmalloc。Tcmalloc 在管理小 内存块时非常有效,而且能够避免在大内存分配时的mmap()系统调用。它在多 线程中的表现也不错能很好的减少锁碰撞(glibc 致命的问题)。Tcmalloc 现在基 本上成了mysql DBA 的标…
前沿技术探秘:知识图谱构建流程及方法
作者 | 郑毅封图| CSDN│下载于视觉中国出品 | CSDN云计算(ID:CSDNcloud)随着AI技术的发展和普及,当今社会已经进入了智能化时代。与以往不同的是,在这一波浪潮中,企业不仅是向数字化转型,更是向…

【HDOJ】3275 Light
这就是个简单线段树延迟标记。因为对bool使用了~而不是!,wa了一下午找不到原因。 1 /* 3275 */2 #include <iostream>3 #include <sstream>4 #include <string>5 #include <map>6 #include <queue>7 #include <set>…

lighttpd+PHP安装
lighttpd版本:1.4.32 php版本:5.4.11 2013.2.3第一次 php版本:5.4.12 2013.3.14第二次修改 1.lighttpd官网地址 http://www.lighttpd.net 2.下载安装lighttpd #wget http://download.lighttpd.net/lighttpd/releases-1.4.x/lighttp…

描述C#多线程中 lock关键字
本文介绍C# lock关键字,C#提供了一个关键字lock,它可以把一段代码定义为互斥段(critical section),互斥段在一个时刻内只允许一个线程进入执行,而其他线程必须等待。 每个线程都有自己的资源,但…
从样本处理到决策模型,如何用NLP识别盗版资源?
作者 | 阿里文娱高级开发工程师千起出品 | AI科技大本营(ID:rgznai100)背景随着5G时代来临,新媒体行业快速发展,盗版传播平台多样化、形式多样化,版权方难以通过有限的人力实现最大限度的维权。根据MUSO报告显示2017年…

利用.htaccess绑定子域名到子目录(亲测万网可用)
http://www.xmgho.com/archives/783.html 利用.htaccess绑定域名到子目录,前提你的空间服务器必须支持apache的rewrite功能,只有这样才能使用.htaccess。如果你的空间是Linux服务器 一般默认都开启了的。绑定域名 登陆域名管理台(如DNSPod) 把…
Memcached内存池分析
针对Memcacged1.4.15代码 1.完整slabs内存池图 这是我画的memcached的slabs内存池对象关系图: 2.内存池数据结构 typedef struct {unsigned int size; /* 每个item的大小 */unsigned int perslab; /* 每个page中包含多少个item */void *slots; …
Google重磅发布开源库TFQ,快速建立量子机器学习模型
整理 | 弯月编辑 | 郭芮出品 | AI科技大本营(ID:rgznai100)近日,Google 与滑铁卢大学、大众汽车等联合发布 TensorFlow Quantum(TFQ),一个可快速建立量子机器学习模型原型的开源库。TFQ提供了必…

.net3.5的安装与修复
<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />.net3.5的安装与修复.net3.5正常安装的顺序是先安装windows IIS组件,然后再安装.net3.5安装包,而.net3.5安装包的下载地址可以去百度和google上搜一下&…
jquery easy ui 简单字段选择搜索实现
写的比较粗糙,望见谅。 要实现的效果: 代码如下: <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>jQuery EasyUI Application Demo</title><link rel"stylesheet" t…
训练数据也外包?这家公司“承包”了不少注释训练数据,原来是这样做的……...
作者 | Lionbridge AI译者 | 天道酬勤 责编 | 徐威龙封图| CSDN│下载于视觉中国出品 | AI科技大本营(ID:rgznai100)在机器学习领域,训练数据准备是最重要且最耗时的任务之一。实际上,许多数据科学家声称数据科学的很…

JavaScript Switch 语句
avaScript Switch 语句如果希望选择执行若干代码块中的一个,你可以使用 switch 语句:语法:switch(n){case 1:执行代码块 1breakcase 2:执行代码块 2breakdefault:如果n即不是1也不是2,则执行此代码}工作原理:switch 后…

参观Speedy Cloud 有感
上周老男孩的所有学生参观了Speedy Cloud ,在这里我首先感谢Speedy Cloud的邀请和服务,我们每一个同学的收获都很大,不管是在以后的发展,还是现在的学习,都给了我很大的推动作用,帮助我去了解计算机的发展的…

C语言文件操作函数大全
unix中一切皆文件,所以文件操作至关重要! clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * stream); 函数说明 clearerr()清除参数stre…
Python进阶之递归函数的用法及其示例
作者 | 程序员adny责编 | 徐威龙封图| CSDN│下载于视觉中国出品 | AI科技大本营(ID:rgznai100)本篇文章主要介绍了Python进阶之递归函数的用法及其示例,现在分享给大家,也给大家做个参考。一起来看看吧。递归是指函数…

万科的千亿修炼
一位知名企业家说过,改革开放30年只是完成了市场经济的启蒙和启动,在未来的10至20年,中国将出现一批千亿级的企业。此次金融危机在为经济带来震荡的同时,也为我们提供了一个极佳的视角和机会,审视中国千亿企业的过去、…

nginx 开发一个简单的 HTTP 模块
2019独角兽企业重金招聘Python工程师标准>>> 1. 下载 Nginx http://nginx.org/ 2. 目录结构 $ tree -L 2 . ├── mytest_module │ ├── config │ └── ngx_http_mytest_module.c └── nginx ... 3. config # 在 configure 执行时使用 ngx_addon_nam…

Jquery 之Ajax方法$.get() 的运用,扩展链接模型的天地
如前文说道的那个表现层和业务层的链接模型,从上篇博文(http://www.cnblogs.com/AflutterFeather/archive/2010/01/07/1641315.html)中可以看到:我们通过WebService提供的方法来获取服务端的返回值。 如果不采用WebService&#…

B树建立与遍历
# include <stdio.h> # include <stdlib.h># include "btrees.h"/* 给一个结点分配空间 */ struct btnode * allocateNode(struct btnode *ptr){int i,max;ptr (struct btnode *)malloc(sizeof(struct btnode));if(!ptr){printf("allocated error!…
2.2版本发布!TensorFlow推出开发者技能证书
作者 | 弯月出品 | AI科技大本营(ID:rgznai100)受 COVID-19 的影响,今年的 TensorFlow 开发者大会于2020年3月12日(北京时间)凌晨以线上直播的方式与全球开发者见面。Google决定开源TensorFlow是为了让每个开发人员和研…

X3D中Profile如何翻译
问题在哪 在计算机术语中,Profile其实是很难用中文对应的词汇来翻译的一个单词。 在X3D国际标准中,就出现了Profile。它把软件产品对X3D的功能实现范围和相应支持程度做了预先的约定,分为Core Profile、Interchange Profile、Interactive Pro…
腾讯提结合ACNet进行细粒度分类,效果达到最新SOTA | CVPR 2020
作者 | VincentLee来源 | 晓飞的算法工程笔记细粒度分类(Fine-Grained Visual Categorization, FGVC)是图片分类的一个分支,由于类别间的相似性非常大,一般人比较难区分,所以是个很有研究意义的领域。受神经树研究的启发,论文设计…

asp.net mvc view中支持多个实体强类型小技巧
在MVC的开发过程中,在一个View里面可能需要调用多个对象,可是传统的方法是一次只能压入一个对象到View里面,这点并不像Castle框架的MVC好用,在Castle里面,可以很方便的把对象压入到前台Html里面,然后通过Ve…

使用指针做函数返回值
使用指针做函数返回值 1、当使用指针做为函数的返回值时,主函数处的char *p;将获得调用函数char *pf;的值,即一个地址值,如oxAE72。此时需要我们注意的是该地址值所指向的空间是否存在(即已向操作系统声明注册,不会被释放&#x…

Android Studio快捷键每日一练(2)
原文地址:http://www.developerphil.com/android-studio-tips-of-the-day-roundup-2/ 12、复制行 苹果:CmdD Windows:CtrlD 顾名思义,就是拷贝当前行并粘贴在下一行,整个过程无需和剪贴板交互。这个功能配合行移动快…
C语言字符char和整型int的关系
C语言并无char类型,就是用Int表示char的!char占一个字节,在C语言所有类型中最小。 char *占4字节(32位),8字节(64位) 在C语言中,实际上字符型数据在内存中是以二进制形式…