plot(hclust(dist(x)))
メソッドを使用して、クラスターツリーマップを描画できました。できます。それでも、ツリー図ではなく、すべてのクラスターのリストを取得したいと考えています。大量のデータ(150Kノードなど)があり、プロットが乱雑になるためです。
つまり、a b c
はクラスターであり、d e f g
はクラスターなので、次のようなものを取得します。
1 a,b,c
2 d,e,f,g
これは、正確に「出力」として取得したいものではないことに注意してください。ほんの一例です。ツリープロットの代わりにクラスターのリストを取得できるようにしたいだけです。ベクトル、行列、または要素が属するグループを示す単純な数値を使用できます。
これはどのようにして可能ですか?
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
まあ言ってみれば、
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)