我有一个500K观察的大矩阵,使用层次聚类进行聚类。由于尺寸大,我没有计算距离矩阵的计算能力。
为了克服这个问题,我选择聚合我的矩阵来合并那些相同的观察结果,将我的矩阵减少到大约10K的观察值。我有这个聚合矩阵中每一行的频率。我现在需要将此频率作为分层聚类中的权重。
数据是500K观测值的数值和分类变量的混合,因此我使用菊花包来计算我的聚合数据集的gower不相似性。我想在stats包中使用hclust来获取聚合数据集,但是我想考虑每个观察的频率。根据hclust的帮助信息,参数如下:
hclust(d, method = "complete", members = NULL)
members参数的信息是:,NULL或长度为d的向量。请参阅“详细信息”部分。当您查看详细信息部分时,您会得到:如果members != NULL
,那么d
将被视为群集之间的相异矩阵,而不是单身人员和成员之间的相异性,而是给出每个群集的观察数量。这样,分级聚类算法可以“在树形图的中间开始”,例如,以便在切割上方重建树的一部分(参见示例)。群集之间的不相似性可以仅针对有限数量的距离/连接组合被有效地计算(即,没有自己的),最简单的是欧几里德距离和质心连接的平方。在这种情况下,聚类之间的差异是聚类均值之间的欧几里德距离的平方。
从上面的描述中,我不确定我是否可以将我的频率权重分配给成员参数,因为不清楚这是否是这个参数的目的。我想这样使用它:
hclust(d, method = "complete", members = df$freq)
其中df$freq
是聚合矩阵中每行的频率。因此,如果一行重复10次,则此值将为10。
如果有人能帮助我,那会很棒,
谢谢
答案 0 :(得分:0)
是的,这应该适用于大多数链接,特别是单个,组平均和完整链接。对于病房等,您需要自己正确考虑权重。
但即使是那部分并不难。只需确保使用簇大小,因为您需要传递两个簇的距离,而不是两个点。因此矩阵应该包含位置x处的n1个点和位置y处的n2个点的距离。对于最小值/最大值/平均值,此n消失或取消。对于病房,你应该得到像公式一样的SSQ。