web-dev-qa-db-ja.com

hclust関数のクラスタリングリスト

plot(hclust(dist(x)))メソッドを使用して、クラスターツリーマップを描画できました。できます。それでも、ツリー図ではなく、すべてのクラスターのリストを取得したいと考えています。大量のデータ(150Kノードなど)があり、プロットが乱雑になるためです。

つまり、a b cはクラスターであり、d e f gはクラスターなので、次のようなものを取得します。

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

これは、正確に「出力」として取得したいものではないことに注意してください。ほんの一例です。ツリープロットの代わりにクラスターのリストを取得できるようにしたいだけです。ベクトル、行列、または要素が属するグループを示す単純な数値を使用できます。

これはどのようにして可能ですか?

28
dave

Rで利用可能なデータセットを使用して、ツリーを目的の数にカットする方法を示します。結果は表です。

Hclustオブジェクトを作成します。

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

これで、ツリーを好きなだけ枝に切ることができます。次のトリックでは、ツリーを2つのグループに分割します。カット数は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
43
Roman Luštrik

まあ言ってみれば、

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)
16
user2783711