如何解决“比较”群集算法及其成员资格方面的差异
在igraph中,应用于集群算法的“比较”命令与其应用于集群成员资格的命令之间有什么区别。
作为州手册页:
compare (sg,le,method = "rand")
compare (membership (sg),membership (le))
解决方法
我阅读了compare
的文档,格式为:
compare(comm1,comm2,method = c("vi","nmi","split.join","rand","adjusted.rand"))
comm1
和comm2
的文档中提到以下内容:
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")
sg
和le
本身就是群集对象,即它们分别是community detection via spin-glass model和community 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
函数的comm2
和compare
参数中允许的第二种类型的值
因此,两个语句本质上是相同的。它们只是完成同一件事的不同方式。
如果运行文档末尾给出的代码,则会看到以下内容:
> 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 举报,一经查实,本站将立刻删除。