微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“比较”群集算法及其成员资格方面的差异

如何解决“比较”群集算法及其成员资格方面的差异

在igraph中,应用于集群算法的“比较”命令与其应用于集群成员资格的命令之间有什么区别。

作为州手册页:

compare (sg,le,method = "rand")    
compare (membership (sg),membership (le))

解决方法

我阅读了compare的文档,格式为:

compare(comm1,comm2,method = c("vi","nmi","split.join","rand","adjusted.rand"))

comm1comm2的文档中提到以下内容:

comm1 :包含社区结构的社区对象;或数字向量,第一个社区结构的隶属度向量。隶属度矢量应包含每个顶点的社区ID,社区的编号从1开始。

最后提到的完整代码是

g <- make_graph("Zachary")
sg <- cluster_spinglass(g)
le <- cluster_leading_eigen(g)
compare(sg,le,method="rand")
compare(membership(sg),membership(le))

现在是第一种情况compare(sg,method="rand")

sgle本身就是群集对象,即它们分别是community detection via spin-glass modelcommunity detetection by calculating the leading non-negative eigenvector of the modularity matrix of the graph的结果。简而言之,两者都包含数据的社区结构。

现在是第二种情况compare(membership(sg),membership(le))

这使用membership来执行以下操作:

成员资格将顶点划分为社区。它返回一个数字矢量,每个顶点一个值,即其社区的ID。社区ID从1开始。请注意,有些算法会计算社区的完整(或不完整)层次结构,而不仅仅是单个分区。对于这些算法,通常会返回最高模块化值的成员身份,但另请参见各个算法的手册页

您可以阅读有关功能here的更多信息。 如您所见,这将返回一个数字矢量,其中包含每个顶点的成员资格信息,这是comm1函数的comm2compare参数中允许的第二种类型的值

因此,两个语句本质上是相同的。它们只是完成同一件事的不同方式。

如果运行文档末尾给出的代码,则会看到以下内容:

> g <- make_graph("Zachary")
> sg <- cluster_spinglass(g)
> le <- cluster_leading_eigen(g)
> compare(sg,method="rand")
[1] 0.9500891
> compare(membership(sg),membership(le))
[1] 0.2765712

结果的差异是因为在第一次调用中method属性被设置为rand。如果您在第二个调用中也分配了method属性,则会看到完全相同的结果:

> g <- make_graph("Zachary")
> sg <- cluster_spinglass(g)
> le <- cluster_leading_eigen(g)
> compare(sg,membership(le),method="rand")
[1] 0.9500891

如您所见,两者都提供相同的结果。

参考:

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。