1

我有一个包含 500K 观察值的大型矩阵,可以使用层次聚类进行聚类。由于体积大,我没有计算距离矩阵的计算能力。

为了克服这个问题,我选择聚合我的矩阵来合并那些相同的观察值,从而将我的矩阵减少到大约 10K 观察值。我有这个聚合矩阵中每一行的频率。我现在需要将此频率作为权重合并到我的层次聚类中。

数据是 500K 观测值的数值和分类变量的混合体,因此我使用 daisy 包来计算聚合数据集的 gower 差异。我想在聚合数据集的 stats 包中使用 hclust 但是我想考虑每个观察的频率。从 hclust 的帮助信息中,参数如下:

    hclust(d, method = "complete", members = NULL)

members 参数的信息是:、NULL 或长度为 d 的向量。请参阅“详细信息”部分。当您查看详细信息部分时,您会得到: If members != NULL, thend被认为是集群之间的相异矩阵,而不是单例和成员之间的相异矩阵,给出了每个集群的观察次数。这样,层次聚类算法可以“在树状图的中间开始”,例如,为了重建切割上方的树部分(参见示例)。仅对于有限数量的距离/链接组合,可以有效地计算集群之间的差异(即,没有 hclust 本身),最简单的一种是平方欧几里得距离和质心链接。在这种情况下,聚类之间的差异是聚类均值之间的平方欧几里得距离。

从上面的描述中,我不确定我是否可以将我的频率权重分配给成员参数,因为不清楚这是否是这个参数的目的。我想这样使用它:

hclust(d, method = "complete", members = df$freq)

哪里df$freq是聚合矩阵中每一行的频率。因此,如果一行重复 10 次,则该值将是 10。

如果有人可以帮助我,那就太好了,

谢谢

4

1 回答 1

0

是的,这应该适用于大多数链接,特别是单个链接、组平均链接和完整链接。对于病房等,您需要自己正确考虑权重。

但即使是那部分也不难。只需确保使用集群大小,因为您需要传递两个集群的距离,而不是两个点。所以矩阵应该包含位置 x 的 n1 个点和位置 y 的 n2 个点的距离。对于 min/max/mean,这个 n 消失或取消。对于病房,您应该获得类似 SSQ 的公式。

于 2017-07-25T20:10:37.507 回答