基于R语言实现Single Linkage Clustering:合并阶段矩阵更新问题
手动实现Single Linkage Clustering:距离矩阵更新详解
先明确Single Linkage的核心规则:两个簇之间的距离,等于这两个簇里任意一对点的最小距离。针对你给出的5×5距离矩阵,我一步步给你演示合并簇后的距离矩阵更新过程。
初始距离矩阵(整理成表格更清晰)
| A | B | C | D | E | |
|---|---|---|---|---|---|
| A | 0 | 1 | 2 | 5 | 4 |
| B | 1 | 0 | 6 | 2 | 2 |
| C | 2 | 6 | 0 | 8 | 2 |
| D | 5 | 2 | 8 | 0 | 4 |
| E | 4 | 2 | 2 | 4 | 0 |
第一步:找到最小距离对并合并
扫描矩阵(排除对角线的0),最小距离是1,对应点A和B。将它们合并为新簇V。
第二步:计算其他点到簇V的距离
根据Single Linkage规则,其他点到V的距离,取该点到A、到B的距离中的最小值:
- V到C:min(A-C=2, B-C=6) = 2
- V到D:min(A-D=5, B-D=2) = 2
- V到E:min(A-E=4, B-E=2) = 2
第三步:构建更新后的距离矩阵
需要移除原矩阵中A、B的行和列,新增簇V的行和列,得到4×4的新矩阵:
| V | C | D | E | |
|---|---|---|---|---|
| V | 0 | 2 | 2 | 2 |
| C | 2 | 0 | 8 | 2 |
| D | 2 | 8 | 0 | 4 |
| E | 2 | 2 | 4 | 0 |
后续迭代的通用规则
每次合并簇后,都按这个逻辑更新:
- 找到当前矩阵中最小的非对角线距离,合并对应的两个簇(可能是单点,也可能是已合并的簇)
- 计算所有剩余簇到新簇的距离:取两个原簇中所有点对的最小距离
- 移除被合并的两个簇的行和列,新增新簇的行和列,形成新的距离矩阵
- 重复上述步骤,直到矩阵只剩1×1(所有点合并为一个簇)
举个后续迭代的小例子:在上面的4×4矩阵里,最小距离是2,比如选C和E合并成簇W,计算W到V的距离是min(V-C=2, V-E=2)=2,W到D的距离是min(C-D=8, E-D=4)=4,新矩阵就变成3×3:
| V | W | D | |
|---|---|---|---|
| V | 0 | 2 | 2 |
| W | 2 | 0 | 4 |
| D | 2 | 4 | 0 |
这样一步步迭代下去,就能完成整个Single Linkage聚类过程。
内容的提问来源于stack exchange,提问作者Spiritual XOL
相关产品推荐
相关产品推荐

