【发布时间】:2018-09-06 15:03:12
【问题描述】:
我想计算我拥有的数据集的两个聚类之间的兰德指数,但我在数据集中有 80,000 个条目,并且到目前为止我发现计算兰德指数的 R 包实际上无法处理这么大的数据集。 (例如,来自 mclust 的错误是Error in table(x, y) : attempt to make a table with >= 2^31 elements)
为了减小数据集的大小,我想要做的是过滤掉我的数据集中具有相同聚类标签的整体。例如,如果我有一张桌子
clusteringA | clusteringB
1 a | a
2 b | b
3 c | b
4 d | c
5 d | c
6 e | d
7 e | e
然后我想做的是过滤掉第 1、4 和 5 行,因为它们将为所有成对比较返回 1。有没有一种计算有效的方法来做到这一点?这样做真的可以让我计算兰德指数吗?
如果不是,我想到的另一种可能性是将我的数据集分成块并在这些块上分别计算兰德指数。这看起来合理吗?我猜这两个聚类之间有相当数量的相等标签分配;前 500 行的 Rand Index 为 1。
【问题讨论】:
-
我看到删除了 1,可能还有 4 或 5,但为什么 4 和 5 都删除了?为什么不是 7?
-
4 和 5 通过方法 A 和 B 一起放置在一个集群中,并且在该集群中没有其他 ID 与它们一起。 7 的情况并非如此。
-
您能否阐明保留(或不保留)哪些行的逻辑?比如一个伪代码逻辑表达式
-
@DanHall for(i in 1:nrow(df)) { 如果 i$clusteringA 包含与 i$clusteringB 相同的行,则从表中删除 i 和那些行(然后跳过那些被删除的行) } 这有意义吗?
标签: r dataframe cluster-analysis