【问题标题】:Documentation or code sample for agglomerative clustering凝聚聚类的文档或代码示例
【发布时间】:2021-07-19 02:10:29
【问题描述】:

对于我的本科研究项目,我正在寻找用于凝聚聚类的 R 代码。基本上,我需要知道 R 中的 hclust 方法内部发生了什么。我到处寻找,但没有找到合适的方法来组合距离最小的 2 个数据点。在相异矩阵生成的第一阶段(字面意思是我已经生成了第一个相异矩阵)之后,我一直在开发相异矩阵。我没有指定 R,如果有人可以用任何语言给我一个解决方案,我将不胜感激。

【问题讨论】:

  • 只需在 R 命令提示符下输入hclust。底层代码将被打印出来。

标签: r cluster-analysis distance hierarchical-clustering


【解决方案1】:

当您在 R 中使用 hclust 时,您需要的所有信息都存储在函数的输出中。您可以保存输出并读取您需要的内容。但是,输出可能不是完全透明的,所以我将通过一个非常小的示例,您可以将这些想法应用到您的数据中。

举个小例子,我会从内置的虹膜数据中随机抽取八个点,然后在这八个点上使用hclust。由于我没有指定任何不同的内容,因此“hclust”使用默认的完整链接集群。

set.seed(2021)
S1 = sort(sample(150, 8))
Tree1 = hclust(dist(iris[S1,1:4]))
plot(Tree1, hang=-1)

正如我所说,hclust 的输出包含您需要的内容。它存储在 Tree1 中。实际上,它包含的内容比我想的要多。您可以通过运行 str(Tree1) 来查看其中的所有内容,但现在,我将专注于该结构的两个部分:Tree1$mergeTree1$height

Tree1$merge
     [,1] [,2]
[1,]   -4   -8
[2,]   -5    1
[3,]   -3   -7
[4,]   -1   -2
[5,]   -6    2
[6,]    3    4
[7,]    5    6

这些是什么意思?首先,Tree1$merge 告诉我们集群合并的顺序。第一行[1,] -4 -8 告诉我们,第一步是合并点 4(标记为 103)和点 8(标记为 140)形成簇 1。(点得到负数,由它们形成的簇得到正数。)下一行 [2,] -5 1 告诉我们第二步将点 5(标签为 105)与我们在上面从点 4 和 8 形成的集群 1 合并。其余行显示剩余的合并步骤。例如,最后一步合并集群 5 和 6。

好的,现在我们看到了集群合并的顺序,但是距离是多少?为什么是这个命令?我们从Tree1$height 得到它,当然它来自原始距离矩阵。所以我们也来看看距离矩阵。

Tree1$height
[1] 0.5477226 0.6164414 0.7745967 0.9848858 1.0148892 1.8000000 3.2511536

dist(iris[S1,1:4])
           69        70       102       103       105       110       135
70  0.9848858                                                            
102 0.9643651 1.4696938                                                  
103 1.9416488 2.7386128 1.5684387                                        
105 1.7058722 2.4248711 1.0770330 0.6164414                              
110 2.5534291 3.2511536 2.0322401 0.7549834 1.0148892                    
135 1.1789826 1.8000000 0.7745967 1.3190906 1.0000000 1.9157244          
140 1.5716234 2.3021729 1.2247449 0.5477226 0.5830952 0.9949874 1.1916375

注意Tree1$height 中的第一个条目是 0.5477226,即第四个点 (103) 和第八个点 (140) 之间的距离。这是距离矩阵中的最小距离,这就是首先合并这些点的原因。回想一下,下一次合并是点 5 (105) 与集群 1。当我们使用完整链接时,该距离是如何计算的?它是点 5 到簇 1 中任意点的最大距离。从距离矩阵可以看出,点 4 和点 5 的距离是 0.6164414,点 8 和点 5 的距离是 0.5830952,所以点 5 之间的距离集群 1 为 0.6164414(完整链接的最大值)。查看距离矩阵的其余部分,我们可以看到没有两个点的距离小于此值,因此第二次合并是点 5 与簇 1 的距离为 0.6164414。 Tree1$merge 的第三行告诉我们,在第三步,我们合并了点 3 和 7(标签 102 和 135)。 Tree1$height 的第三个条目告诉我们这次合并的距离是 0.7745967。

【讨论】:

    猜你喜欢
    • 2015-02-04
    • 1970-01-01
    • 2014-06-28
    • 2011-12-22
    • 2017-12-03
    • 2016-07-17
    • 2020-11-30
    • 2016-09-06
    • 2017-10-24
    相关资源
    最近更新 更多