首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >层次聚类和k均值

层次聚类和k均值
EN

Stack Overflow用户
提问于 2020-08-30 05:41:51
回答 1查看 132关注 0票数 1

我想运行一个层次聚类分析。我知道hclust()函数,但不知道如何在实践中使用它;我只能将数据提供给该函数并处理输出。

我想要对给定的测量结果进行聚类的主要问题。

我还想将分层聚类与kmeans()生成的聚类进行比较。同样,我不确定如何调用此函数或使用/操作它的输出。

我的数据类似于:

代码语言:javascript
复制
df<-structure(list(id=c(111,111,111,112,112,112), se=c(1,2,3,1,2,3),t1 = c(1, 2, 1, 1,1,3),
                   t2 = c(1, 2, 2, 1,1,4), t3 = c(1, 0, 0, 0,2,1), t4 = c(2, 5, 7,  7,1,2),
                   t5 = c(1, 0, 1, 1,1,1),t6 = c(1, 1, 1, 1,1,1), t7 = c(1, 1, 1 ,1,1,1), t8=c(0,0,0,0,0,0)), row.names = c(NA,
                                                                                                                            6L), class = "data.frame")

我想运行层次聚类分析来确定最佳的聚类数量。

我如何根据预定义的度量运行聚类-例如,在本例中,聚类测量值为2?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-30 07:12:03

对于分层聚类,您必须定义一个基本元素。它是计算每个数据点之间距离的方法。集群是一种最先进的技术,因此您必须根据公平数据点的分布情况来定义集群的数量。我将在下一段代码中教你如何做到这一点。我们将使用data df和function hclust()比较三种距离方法

第一种方法是平均距离,它计算所有点的所有距离的平均值。我们将省略第一个变量,因为它是一个id:

代码语言:javascript
复制
#Method 1
hc.average <- hclust(dist(df[,-1]),method='average')

第二种方法是完全距离,它计算所有点在所有距离上的最大值:

代码语言:javascript
复制
#Method 2
hc.complete<- hclust(dist(df[,-1]),method='complete')

第三种方法是单一距离,它计算所有点的所有距离的最小值:

代码语言:javascript
复制
#Method 3
hc.single <- hclust(dist(df[,-1]),method='single')

使用所有模型,我们可以分析组。

我们可以根据层次树的高度来定义聚类的数量,高度越大,我们将只有一个聚类等于所有数据集。选择高度的中间值是一个标准。

对于average方法,高度值为3将生成四个组,值约为4.5将生成两个组:

代码语言:javascript
复制
plot(hc.average, xlab='')

输出:

对于完整的方法,结果是相似的,但高度的尺度测量发生了变化。

代码语言:javascript
复制
plot(hc.complete, xlab='')

输出:

最后,单一方法为组产生不同的方案。有三个组,即使选择中间的高度,您也将始终拥有该数量的簇:

代码语言:javascript
复制
plot(hc.single, xlab='')

输出:

您可以使用任何方法通过cutree()函数来确定数据的集群,您可以在该函数中设置模型对象和集群的数量。确定集群性能的一种方法是检查组的同构程度。这取决于研究人员的标准。接下来是将集群添加到数据中的方法。我将选择最后一个模型和三个组:

代码语言:javascript
复制
#Add cluster
df$Cluster <- cutree(hc.single,k = 3)

输出:

代码语言:javascript
复制
   id se t1 t2 t3 t4 t5 t6 t7 t8 Cluster
1 111  1  1  1  1  2  1  1  1  0       1
2 111  2  2  2  0  5  0  1  1  0       2
3 111  3  1  2  0  7  1  1  1  0       2
4 112  1  1  1  0  7  1  1  1  0       2
5 112  2  1  1  2  1  1  1  1  0       1
6 112  3  3  4  1  2  1  1  1  0       3

函数cutree()还有一个名为h的参数,您可以在其中设置高度,而不是集群的数量k

关于使用某些度量来定义集群的疑虑,您可以将数据缩放,不包括所需的变量,以便变量具有不同的度量,并可以影响聚类的结果。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63652041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档