2011-06-29 5 views
23

plot(hclust(dist(x)))メソッドを使用して、私はクラスタツリーマップを描くことができました。できます。しかし、私は膨大な量のデータ(150Kノードのような)があり、プロットが乱雑になるので、ツリーダイアグラムではなく、すべてのクラスタのリストを取得したいと考えています。言い換えればhclust関数のクラスタリングリスト

a b cがクラスタであるとd e f gがクラスタであるならば、私はこのような何かを取得したいと思いあれば言うことができます:

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

これは私が取得したい正確に何ではないことに注意してください「出力」として。これは単なる例です。私はちょうど木のプロットの代わりにクラスターのリストを得ることができるようにしたいと考えていますベクトル、行列または要素が属するグループを示す単純な数字かもしれません。

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

+0

これは役に立ちます。 http://stackoverflow.com/questions/28378113/match-and-add-the-cluster-number-to-the-original-data/28384937#28384937 – EskimoT

答えて

34

ツリーを希望の数にカットする方法を示すために、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 
+0

優秀!ありがとうございました。これにより、パラメータkの値をどのように近似して、データのクラスタ数を自分の望むものにするかということになると思います。言い換えれば、データにいくつのクラスタがあるかわからないため、何回カットを作成する必要があるか分からない場合はどうすればいいでしょうか。それは確かに、私はそれが各クラスタ内のクラスタの数と要素の数を言うことを確認しようとしています。申し訳ありませんが、私は以前は分かりませんでした。 – dave

+0

@dave、木を切ってほしい高さを知ることは可能でしょうか? yesの場合は、パラメータ 'h'('?cutree'を参照)を使用します。この関数は適切な数のグループ(および葉の忠誠度)を返します。 –

+1

私はおそらくこれが私ができることです、hclustオブジェクトは、マージ行列、高さなどのコンポーネントを持っています。もしaがhclustオブジェクトならば、$ heightを使って可能な高さにアクセスできます。その行列では、可能なクラスターの数を見つけることができます。それが私が読んで見つけたものです。 – dave

11

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) 
関連する問題