【问题标题】:Clustering list for hclust functionhclust 函数的聚类列表
【发布时间】:2011-06-29 09:05:25
【问题描述】:

使用plot(hclust(dist(x))) 方法,我能够绘制出聚类树图。有用。然而,我想获得所有集群的列表,而不是树形图,因为我有大量数据(如 150K 节点)并且情节变得混乱。

换句话说,如果a b c 是一个集群,如果d e f g 是一个集群,那么我想得到这样的东西:

1 a,b,c
2 d,e,f,g

请注意,这并不是我想要的“输出”。这只是一个例子。我只是希望能够得到一个簇列表而不是树图它可以是向量、矩阵或只是简单的数字来显示元素所属的组。

这怎么可能?

【问题讨论】:

标签: r hclust


【解决方案1】:

我将使用 R 中可用的数据集来演示如何将一棵树切割成所需数量的部分。结果是一个表格。

构造一个 hclust 对象。

hc <- hclust(dist(USArrests), "ave")
#plot(hc)

您现在可以将树切割成任意数量的树枝。对于我的下一个技巧,我将把树分成两组。您可以使用k 参数设置切割次数。请参阅?cutree 和使用参数h,这可能对您更有用(请参阅cutree(hc, k = 2) == cutree(hc, h = 110))。

cutree(hc, k = 2)
       Alabama         Alaska        Arizona       Arkansas     California 
             1              1              1              2              1 
      Colorado    Connecticut       Delaware        Florida        Georgia 
             2              2              1              1              2 
        Hawaii          Idaho       Illinois        Indiana           Iowa 
             2              2              1              2              2 
        Kansas       Kentucky      Louisiana          Maine       Maryland 
             2              2              1              2              1 
 Massachusetts       Michigan      Minnesota    Mississippi       Missouri 
             2              1              2              1              2 
       Montana       Nebraska         Nevada  New Hampshire     New Jersey 
             2              2              1              2              2 
    New Mexico       New York North Carolina   North Dakota           Ohio 
             1              1              1              2              2 
      Oklahoma         Oregon   Pennsylvania   Rhode Island South Carolina 
             2              2              2              2              1 
  South Dakota      Tennessee          Texas           Utah        Vermont 
             2              2              2              2              2 
      Virginia     Washington  West Virginia      Wisconsin        Wyoming 
             2              2              2              2              2

【讨论】:

  • 太棒了!谢谢你。这让我想到如何为参数“k”近似一个好的值,以便数据中的集群数量是它应该是什么而不是我想要的?换句话说,如果我不知道我需要做多少削减,因为我不知道数据中有多少集群。这确实是我想要找出的,也就是说集群的数量和每个集群中的元素。抱歉,如果我之前不清楚。
  • @dave,你有没有可能知道你想在哪个高度砍树?如果是,请使用参数h(请参阅?cutree)。该函数将返回适当数量的组(和叶子的忠诚度)。
  • 我明白了,也许这就是我能做的,hclust 对象具有合并矩阵、高度等组件。假设 a 是 hclust 对象,我们可以使用 a$height 访问可能的高度。因此,也许从该矩阵中选择最大高度,我可能会找出可能的簇数。这就是我通过阅读能够找到的。
【解决方案2】:

让我们说,

y<-dist(x)
clust<-hclust(y)
groups<-cutree(clust, k=3)
x<-cbind(x,groups)

现在您将获得每条记录的集群组。 您也可以对数据集进行子集化:

x1<- subset(x, groups==1)
x2<- subset(x, groups==2)
x3<- subset(x, groups==3)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-19
    • 2013-12-08
    • 2011-09-05
    • 2016-05-28
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多