在我的本科研究项目中,我正在寻找一个聚集聚类的R代码。基本上,我需要知道在R中的hclust方法中发生了什么,我到处都找过了,但是找不到合适的方法来组合两个距离最小的数据点。在生成不同矩阵的第一阶段之后,我不得不开发一个不同的矩阵(实际上,我已经生成了第一个不同的矩阵)。我没有指定R,如果有人能用任何语言给我一个解决方案,我会感激地接受这一点。
发布于 2021-03-23 00:27:11
在R中使用hclust
时,所需的所有信息都存储在函数的输出中。您只需保存输出并读取所需内容即可。但是,输出可能不是完全透明的,所以我将介绍一个非常小的例子,您可以将这些想法应用到您的数据中。
为了得到一个小的例子,我将从内置的虹膜数据中随机抽取8个点,然后在这8个点上使用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$merge
和Tree1$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个)和第8个点(140个)之间的距离。这是距离矩阵中的最小距离,这就是为什么首先合并这些点的原因。回想下一次合并是第5 (105)点与簇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。
https://stackoverflow.com/questions/67254161
复制相似问题