It’s Who You Know: Graph Mining Using Recursive Structural Features
要解决的问题
主要是提取图节点上的特征。
比如给定同一个领域的两个图,用其中一个图的信息做分类器,在另一个图上能够使用;比如在同一领域的不同图中进行数据挖掘。比如:给定来自不同日子或不同企业网络的IP通信图,能否在某一天训练一个分类器模型,并在另一天使用相同的分类器来准确预测流量,但是不打上标签。
或其中一个图是匿名图(查阅资料,应该是指节点到节点之间所经过的节点和原图不一样,即打乱了通信路线,存疑),用另一个非匿名图去解匿。所有这些图挖掘任务的关键步骤是找到有效的节点特征。
预备知识
广义的图主要可以分为两种:
- 网络,Networks(也称为自然图,Natural Graphs):
- 社交网络(Social networks):社会是一个由70亿+个人组成的集合
- 交流和交易网络(Communication and transactions)
- 生物医学(Biomedicine)
- 大脑连接网络(Brain connections):我们的思想隐藏在数十亿个神经元之间的联系中
图(作为一种表示方式)
- 信息/知识网络(Information/knowledge)
- 软件(Software)
- 相似性网络(Similarity networks):连接类似的数据点
- 关系结构(Relational structures):分子,场景图,三维形状,基于粒子的物理模拟
不过在很多时候网络和图之间的区别是模糊的
ego-net
当不研究网络的整体,而是侧重于研究单个节点的性质,就会用到ego network。ego network是整体网络结构的一部分,是给定某节点,通过广度优先搜索遍历搜索出的网络结构。
所谓的ego network,它的节点是由唯一的一个中心节点(ego),以及这个节点的邻居(alters)组成的,它的边只包括了ego和alter之间,以及alter与alter之间的边,如下图:
其中,图里面的每个alter和它自身的邻居又可以构成一个ego network,而所有节点的ego network合并起来,就可以组成真实的social network了。
一般来说,不研究网络的整体,而是侧重于研究个体的性质,用ego network就比较合适了。比如之前blog中这些用户关系拓扑图,就都是ego network。通过观察节点的ego network来研究它的一些性质。
方法
节点的特征
需要关注以下几个节点特征:
-
本地特征(Local features)
-
egonet特征(Egonet features)
-
递归特征(Recursive features)
其中,本地特征和egonet特征统称为邻域特征。
为ReFeX创造递归过程主要涉及到本地特征和egonet特征。
本地特征:是对节点本事特征的测量,比如入度、出度、加权等。
Egonet特征:是由节点及节点的邻居节点构成的子图,可以针对这个子图计算各种特征,比如子图的节点数和边数、节点的平均度数、节点的平均集群系数?等。
Recursive Feature是针对已经计算出的特征进行二次加工,得到特征的特征,比如邻居节点的特征的平均值,或者当前节点某些特征的统计量(均值、求和等)。
递归特征
生成:一个递归特征被定义为一个节点的所有邻居中未加权节点度的特征的平均值。
剪枝(减少特征数量):把每一个节点的特征值转换成对数分档。这么分的理由是:许多图的特性呈现幂律分布,是在很多结果上观察得来的。
(文章里描述了数学过程,但是由于语言阅读有些障碍,对数学词汇和表达没看太懂,有点折磨,需要加强)
特征分类完成后,ReFeX会在所有节点上寻找不一致程度超过阈值s的特征对。然后对于这些特征对,单独用一个特征节点来表示。因此可以做到去掉多余关系不大的特征,保留“更简单”的特征。
参数与初始化
p:每个对数分档里面的节点的比例。如果p值接近1,则减少了分档的数量,但是可能会导致特征的损失。如果p值接近0,那么分档数量会增加,特征保留较多,但是运行时间也会增大。经测试,p = 0.5较为合适。
s:不一致程度的阈值。对于小图(小于100K的节点),把s的初始值设为0,即初始迭代的图就会保留基本保持原样。原文的话大概翻译如下:
ReFeX在初始迭代时使用s=0(以生成邻域特征),这个方法有效地保留了那些与其他对数分档不完全一致的特征。
对于较大的图(大于100K的节点),s的初始值可以增加。在随后的每次迭代中,s值都将增加1。同时会保证在log(p^-1)(|V|)次迭代停止。
在不同数据集上的测试
之后论文很大篇幅在描述ReFeX算法在不同数据集上面的测试效果,主要是在描述不同数据及场景下的应用。即如何把数据集中的特征代入进上面提到的三个特征中。
RolX: Structural Role Extraction & Mining in Large Graphs
预备知识
Roles
Roles are “functions” of nodes in a network.
Roles,是网络中节点的“功能”。可以把角色相近的节点归类为同一种role,比如度很小的节点可以归类为边缘节点。
role只要求角色相近,这种相近往往只需要参考节点所在的子图来判断即可,如果要在全图上判断两个节点是否是结构等同(structural equivalence),就需要判断图中所有其他节点与这两个节点的关系是否完全相同。很显然,角色相同的节点未必是结构等同的。论文中给了一个示意图:
红色节点的角色都是星型结构的中心节点,但是它们与其他节点的结构关系几乎各不相同。
怎样度量Roles?
怎样度量Roles?
Roles are measured by structural behaviors
Roles由一些结构性行为来度量。
- 图中比较有影响力的节点(centers of stars)
- 团的数量(members of cliques)
- 外围节点(peripheral nodes),等等。
Roles VS Groups in networks:
- Group ,is formed based on adjacency, proximity or reachability
- Roles,A collection of nodes which have similar positions in a
network,Roles are based on the similarity of ties between subsets of
nodes
Roles不同于Groups/Community,Groups/Community 是基于邻接、邻近或可达性而形成,而Roles,具有相同角色的节点之间不需要直接交互,甚至不需要间接交互。
自己的理解:Role是在一个网络图中,一个节点的功能,或者说这个节点所发挥的作用,担任的角色等。通常是一些比较有影响力的节点。
问题
本文实现了RolX,RolX的目标是自动发现一组基础(潜在)角色节点,这些节点角色概括了网络中节点的结构行为。RolX由三个部分组成:特征提取、特征分组。和模型选择。
解决方法
RolX的输入数据是图的邻接矩阵,首先进行特征提取(Feature Extraction),得到每个节点的特征向量(Feature Vector),然后进行角色提取(Role Extraction),得到节点x角色矩阵和角色x特征矩阵。
特征提取
RolX将每个节点描述为一个特征向量。一个节点的特征表示它拥有的邻居数量,(the number of triangles a node participates in?),等等。RolX可以选择任意被认为重要的特征集。本文中选择了一种描述结构特征的算法[15]。
Role Extraction
RolX的第二个关键步骤是Role Extraction,它的思路是在Node * Feature 矩阵的基础上进行无监督建模,把节点划分到不同集合中,每个集合代表一种角色。最直接的方法是进行NMF(non-negative matrix factorization,非负因式分解),直接把 Node * Feature矩阵 分解成 Node * Role矩阵 和 Role * Feature矩阵 两个矩阵。
自我总结
最近这段时间开始尝试的论文阅读,感觉主要有两个方面的问题:一是预备知识不够,很多东西感觉很陌生,读起来一知半解。二是涉及数学描述的内容也看得很累,到最后也没看太懂。花了几天倒来倒去的看,也没看出个名堂。刚起步,还是得多看看,找找阅读的感觉。