hclust函数的聚类列表

dav*_*ave 28 r hclust

使用plot(hclust(dist(x)))方法,我能够绘制一个簇树映射.有用.然而,我想获得所有集群的列表,而不是树图,因为我有大量的数据(如150K节点),情节变得混乱.

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

1 a,b,c
2 d,e,f,g
Run Code Online (Sandbox Code Playgroud)

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

这怎么可能?

Rom*_*rik 44

我将使用R中可用的数据集来演示如何将树切割成所需的块数.结果是一张表.

构造一个hclust对象.

hc <- hclust(dist(USArrests), "ave")
#plot(hc)
Run Code Online (Sandbox Code Playgroud)

您现在可以将树切割成任意数量的树枝.对于我的下一个技巧,我将把树分成两组.您可以使用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
Run Code Online (Sandbox Code Playgroud)


小智 16

比方说,

y<-dist(x)
clust<-hclust(y)
groups<-cutree(clust, k=3)
x<-cbind(x,groups)
Run Code Online (Sandbox Code Playgroud)

现在,您将获得每个记录,即群集组.您也可以对数据集进行子集化:

x1<- subset(x, groups==1)
x2<- subset(x, groups==2)
x3<- subset(x, groups==3)
Run Code Online (Sandbox Code Playgroud)