如何控制网络布局算法的异常节点?

Posted

技术标签:

【中文标题】如何控制网络布局算法的异常节点?【英文标题】:How to control outlier nodes for network layout algorithms? 【发布时间】:2019-07-18 09:23:39 【问题描述】:

使用带有 Fruchterman-Reingold 布局算法的 igraph 包呈现大图(> 10000 个节点;> 10000 条边)。一些异常节点会使可视化变得困难,99% 的节点挤在一起,而 1% 的异常节点位于很远的地方。例如,99.9% 的节点位于 0 到 10 之间,但 0.1% 的节点位于 10000 之外。问题是如何控制这些异常节点以呈现所有节点。

这是一个示例,其中 0.2% 的异常值节点使完整呈现变得困难。

> library(igraph)
> ig <- erdos.renyi.game(12000,1/10000,directed=TRUE,loops=FALSE)
> set.seed(12)
> ig.layout <- layout_with_fr(ig)
> apply(ig.layout,2,quantile,c(0,0.001,0.01,0.1,0.9,0.99,0.999,1))
               [,1]         [,2]
0%      -54.7584289   -58.192821
0.1%    -49.8806632   -51.090376
1%      -29.7822097   -33.073435
10%      -0.2196407    -1.170996
90%      10.1564691    10.513665
99%    2026.5245335   737.739440
99.9% 16433.7302032 13168.400710
100%  22614.7986797 22284.309659

【问题讨论】:

【参考方案1】:

“控制”异常值的一种方法是消除它们。这将减少您最初的问题,但您仍然会遇到难以可视化的大图表。但是,让我们一次处理一件事。首先,异常值。

不幸的是,您在生成图表之后设置了种子。我将首先移动set.seed 语句,以便结果可重现。

library(igraph)
set.seed(12)
ig <- erdos.renyi.game(12000,1/10000,directed=TRUE,loops=FALSE)
ig.layout <- layout_with_fr(ig)
apply(ig.layout,2,quantile,c(0,0.001,0.01,0.1,0.9,0.99,0.999,1))
               [,1]          [,2]
0%    -5.359639e+01 -9.898871e+01
0.1%  -4.996891e+01 -5.046219e+01
1%    -3.040131e+01 -2.934615e+01
10%   -1.221806e-02  1.513951e-02
90%    1.207328e+01  1.130579e+01
99%    1.111746e+03  6.994646e+02
99.9%  1.418739e+04  1.182382e+04
100%   1.968552e+04  2.025938e+04

我得到的结果与你的相当。更重要的是,该图被异常值严重扭曲。

plot(ig, layout=ig.layout, vertex.size=4, vertex.label=NA,
    edge.arrow.size=0.4)

但是这些异常值是什么?

igComp = components(ig)
table(igComp$csize)
    1     2     3     4     5     6     7 10489 
 1041   137    42     8     5     1     1     1 

您的图表有一个非常大的组件和相当多的小组件。 “异常值”是小的、不连贯的组件中的节点。我的建议是,如果您想看图表,请消除这些小组件。只看大组件。

C1 = induced_subgraph(ig, which(igComp$membership ==1))

set.seed(12)
C1.layout <- layout_with_fr(C1)
apply(C1.layout,2,quantile,c(0,0.001,0.01,0.1,0.9,0.99,0.999,1))
            [,1]        [,2]
0%    -18.111038 -30.5068075
0.1%  -11.257167 -14.4507491
1%     -4.570292  -3.2830470
10%     0.124789   0.1836629
90%     7.182714   7.1506193
99%    12.291679  13.1523646
99.9%  26.812703  23.6325447
100%   35.186445  26.8564644

现在布局更合理了。

plot(C1, layout=C1.layout, vertex.size=4, vertex.label=NA,
    edge.arrow.size=0.4)

现在“异常值”消失了,我们看到了图表的核心。你现在有一个不同的问题。看 10500 个节点很难理解它,但至少你可以看到这个核心。祝您进一步探索顺利。

【讨论】:

以上是关于如何控制网络布局算法的异常节点?的主要内容,如果未能解决你的问题,请参考以下文章

布局优化基于麻雀算法求解无线传感器网络布局matlab源码

布局优化基于麻雀算法求解无线传感器网络布局matlab源码

如何在没有节点边缘重叠的情况下进行力导向布局

Graph Anomaly Detection with Deep Learning——节点检测

Graph Anomaly Detection with Deep Learning——节点检测

动态节能控制基于站点休眠的CDMA的中继网络动态节能控制的MATLAB仿真