前阵子处理一批群落数据,87个样本,想按组成相似度分组。当时我第一反应就是打开Matlab,先 pdist 再 linkage,最后 dendrogram 出一张树状图收工。结果内部复核时发现:同样的数据、同样的欧氏距离,用 WPGMA 和UPGMA跑出来的树状图并不完全一样,分支高度明显偏离。就是从那次之后,我把层次聚类从“调用两个内置函数”重新梳理成了“彻底搞清楚每一步合并到底在算什么”。
这篇就把这段时间梳理清楚的内容写出来:层次聚类里最常用的 WPGMA 和 UPGMA 到底如何工作、为什么一个叫加权一个叫未加权、树状图怎么读,以及一套能直接复制到 Matlab 里跑的完整代码。尤其适合生物信息、生态学、市场细分这类需要反复解释聚类过程、却不能只丢一句“算法自动完成”的场景。
1. 层次聚类的核心不是代码,而是距离矩阵如何不断“合并”
很多人一上来就盯住 “linkage”“dendrogram” 这些函数,但我建议先把整条链路拆开。层次聚类不是靠某个“智能判断”直接把人分组,它实际做的事情非常朴素:先定义两个样本怎么算相似,再不断把最相似的两个东西合并到一起,直到所有样本都收进同一个大类。整个过程如果不用编程语言,用纸笔也能完成,只不过样本少时可以手算,样本多时交给计算机。
1.1 样本距离定义是第一步
无论你选 UPGMA、WPGMA 还是别的方法,第一步永远是构造样本之间的距离。Matlab 里最常用的是 pdist,默认算的是欧氏距离:
matlab复制Y = pdist(X); % X 是 n 行、d 列的矩阵
这里容易忽略一个关键点:距离度量直接决定了后续所有合并的“高度”,换一种距离,树状图基本就会换一张脸。常见的选择有:
- 欧氏距离:适用于各列变量单位一致、数值分布范围接近的数据。如果身高、体重、收入这种量纲完全不同的列混在一起,不建议直接用默认欧氏距离,必须先标准化。
- 曼哈顿距离:对高维稀疏数据有时更好用。
- 相关距离:
pdist(X, 'correlation')返回1 - Pearson相关系数。基因表达谱这类数据经常用它,因为研究者更关心样本反应的“形状”是否一致,而不是绝对表达量差多少。 - 余弦距离:文本向量、用户偏好向量常用。
这里想提醒一句:先想数据本身的性质,再选距离。层次聚类对距离非常敏感,如果你连样本之间怎么算相似都没想清楚,后面换 UPGMA 还是 WPGMA 都是白折腾。
1.2 簇到簇距离决定聚类走向
一旦两个样本合并成一个簇,系统里就不再只有原始样本点了。你要继续回答的问题是:这个新簇和其他样本、其他簇之间的“距离”怎么算?
最经典的三种策略分别是:
- 最短距离法(single linkage):取两个簇之间所有点对的最小值。
- 最长距离法(complete linkage):取两个簇之间所有点对的最大值。
- 平均距离法(average linkage):取两个簇之间所有点对的平均值。
最短距离法容易产生“链条效应”,就是一串点被一个接一个地串起来,最后形成一条长长的链,边界不清晰。最长距离法偏向生产紧凑球状簇,但对离群点非常敏感。平均距离法踩在两者中间,也是最常用的一类。而UPGMA和WPGMA,就都属于“平均距离法”这个大家族,只是“平均”的方式略有不同。
1.3 average不是只有一个:两种平均应运而生
如果合并的两个簇大小完全相同,平均距离没什么歧义;可现实中合并的两个簇往往不对称。比如 A 簇有 80 个样本,B 簇只有 5 个样本,合并后得到新簇 AB。这时如果要计算 AB 与 C 簇的距离,有两个自然思路:
- 思路一:AB 内部 85 个原样本,每个样本都算一次普通成员。计算 AB 与 C 的距离时,把 85 个样本到 C 簇的样本对距离全部加起来取平均。这就是“每个样本一票”。
- 思路二:把 A 和 B 看成两个独立个体,新簇 AB 与 C 的距离等于 A 到 C 的距离与 B 到 C 的距离直接取平均。这就是“每个子簇一票”。
这两个思路恰好对应了标题里的两个主角:UPGMA 和WPGMA。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. UPGMA与WPGMA:“权重”一词如何反直觉
我见过不少初学者被 WPGMA 里的“加权”两个字带偏,以为它是给某些样本乘上更大的权重。实际上,UPGMA与WPGMA的差别正好和第一直觉相反。理解这一点,比记住公式更有价值。
2.1 拆开名字看数学含义
先写全称:
- UPGMA:Unweighted Pair Group Method with Arithmetic Mean
- WPGMA:Weighted Pair Group Method with Arithmetic Mean
中文通常翻译为“非加权组平均法”和“加权组平均法”。但问题来了:如果按数学公式看,UPGMA 反而会按簇内样本数加权,WPGMA 则是简单平均。那名字为什么这样起?关键在于“权”字指的不是样本权重,而是当前参与合并的两个子簇在下一层合并时是否被看作两个平等节点。
用最直白的话解释:
- UPGMA 的“非加权”,意思是它在计算新簇位置时,不会把“两个儿子簇”视为两个平等的整体,而是摊到每个原始样本上,谁内部样本多,谁自然对下一轮的影响大。
- WPGMA 的“加权”,反而是指它把即将合并的两个子簇强制当作同等重要的节点来用。也就是说,后续计算时两个子簇各拿 50% 的发言权,哪怕其中一个内部有 1000 个样本、另一个只有 5 个样本。
这也是很多文献里把 WPGMA 看作“适合采样不均衡数据”的原因:它削弱了大样本量对距离估计的支配地位。
2.2 递推公式与一个数字例子
假设当前要把簇 i 和簇 j 合并成新簇 u,u 到任意其他簇 v 的距离可以递推计算。
UPGMA 的
