2017-07-25 24 views
0

我有一个500K观测大型矩阵使用层次聚类进行聚类。由于尺寸较大,我没有计算能力来计算距离矩阵。使用hclust加权观测频率聚类R

为了克服这个问题,我选择聚合我的矩阵,合并那些相同的观测值,以便将我的矩阵约化为10K个观测值。我有这个聚合矩阵中每一行的频率。我现在需要将这个频率作为分层聚类中的权重。

该数据是500K观测的数值和分类变量的混合,因此我使用雏菊包计算了我的聚合数据集的高尔异质性。我想在聚合数据集的统计数据包中使用hclust,但是我想要考虑每个观测的频率。从hclust帮助信息的参数如下所示:

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

为成员参数的信息是:,NULL或与d的长度尺寸的向量。请参阅“详细信息”部分。当您查看详细信息部分时,您会得到:如果members != NULL,那么d被认为是群集之间的差异矩阵,而不是单身人士和成员之间的差异给出每个群集的观察数量。这样,层次聚类算法可以'在树形图的中间开始',例如,为了重构剪切之上的树的部分(参见示例)。只有有限数量的距离/连接组合才能有效地计算簇之间的不相似性(即,没有hclust自身),最简单的是平方欧几里得距离和质心连接。在这种情况下,群集之间的差异是群集均值之间的平方欧几里德距离。

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

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

哪里df$freq是每行的已汇聚矩阵的频率。因此,如果一个行复制10倍这个值是10

如果有人可以帮助我,将是巨大的,

感谢

回答

0

是的,这应该适用于大多数的联系,特别是单,群体平均和完整的联系。对于病房等,你​​需要正确地把权重考虑在内。

但即使这一部分并不难。只要确保使用簇大小,因为您需要传递两个簇的距离,而不是两个点。所以矩阵应该包含位置x的n1个点和位置y的n2个点的距离。对于最小/最大/意味着这个n消失或取消。对于病房,你应该得到一个类似公式的SSQ。

+0

嗨,感谢您的评论。我不太清楚你最后一段的含义。你能再扩充一点吗?由于我汇总了原始数据集,因此我拥有的距离矩阵将仅包含唯一观测值,但成员参数将为每次观测包含原始数据集中发生的次数。由于我混合了我的变量的数据类型,我只能计算Gower的差异,所以我不能使用病房链接,但很高兴知道,所以谢谢! –

+0

我没有病房方程,所以你必须自己做这个微不足道的微积分。可能是'n * m * d * d'。 –