2017-05-08 15 views
0

現在、ドキュメントのトピックで階層を検討しています。最初のステップとして、私はドキュメントのベクトル表現を見つけ、その後、ドキュメントのトピック内にトピックがあるかどうかを判断するために階層的クラスタリングを使用します。少なくとも2%の元のデータを含むクラスター(ネストされたクラスター)のみを考えたい。これを達成するために、私はRを使用しています。クラスタ階層およびネストされたクラスタ割り当ての取得

今、私はクラスタリング結果からクラスタ階層を効率的に抽出することに苦労しています。クラスタリングは "fastcluster"パッケージで行われます。これは、元の "hclust"機能と同様の結果を提供します。

私の最終的な出力は次のようになります。あなたが見ることができるように、観測3,4及び5は、クラスタ割当テーブルに複数回発生し、

Parent, Child 
B, C 
B, D 
... 

docID , ClusterLabel 
1, A 
2, A 
3, B 
4, B 
5, B 
3, C 
4, D 
5, C 
... 

クラスタ階層:二つのテーブル

クラスタの割り当てがあるでしょうここで、クラスタの1つは、その親クラスタのサブクラスタである。これは階層テーブルに表示されます。

私の現在のアプローチは、 "Dendextend"パッケージのcutree.dendogram関数を使用して、kの値のグリッドのクラスター割り当てを見つけ出し、次にクラスターの階層と割り当てを出力から推測することです。しかし、このアプローチは非常に未知であり、多数の観測やクラスタにとって非常に遅くなります。

この問題に効率的に対処する方法を提案し、すぐに利用できるパッケージを使用することをお勧めします。

EDIT:サンプル出力データに対応する、次の例を考えてみます。私たちは高さ6で木を切断したい場合

data <- matrix(data = c(1,2,3,4,5,1,3,5,9,10), nrow = 5, ncol = 2) 
plot(data) 

hc<- hclust(dist(data)) 
plot(hc) 

、我々は2つのクラスタ、出力における名前AとBを得ることができます。しかし、ツリーを高さ4で切断すると、出力にA、C、Dという3つのクラスターがあります。例えば、docID 3の観測値は、クラスタCのようにいずれかのクラスタBにあります(ツリーを切り取った高さによって異なります)。これは、サンプル出力クラスタ割り当ての2つのエントリに対応しています。クラスタBは2つのクラスタCとDに分割されており、クラスタHierachy出力に見ることができます。

私の目標は、クラスタの割り当てと階層の完全なリストを取得し、デンドログラムを移動することです。 (サブクラスタの観測量がある程度の観測値を下回ったときに停止することが好ましい)

これまで、私はこれを行うための合理的な効率的な方法を思いつきませんでした。アイディア。 cutree機能で

+0

こんにちは@ Bartdp1、自己完結型の再現可能なサンプルで質問を更新できますか? –

+0

@TalGalili質問をお寄せいただき、ありがとうございます – BDP1

答えて

1

kパラメータは、値のベクトルを受信することができ、出力は次のようになります。

> data <- matrix(data = c(1,2,3,4,5,1,3,5,9,10), nrow = 5, ncol = 2) 
> hc<- hclust(dist(data)) 
> cutree(hc, k = 1:5) 
    1 2 3 4 5 
[1,] 1 1 1 1 1 
[2,] 1 1 1 2 2 
[3,] 1 1 2 3 3 
[4,] 1 2 3 4 4 
[5,] 1 2 3 4 5 

これは、あなたの質問にお答えしていますか?

+0

2から3のクラスタに行く場合、2列目のクラスタ "1"は2つのクラスタに分割され、クラスタ "1"とクラスタ "2"後の2つは最初のものの「子供」です。私はそこに2つの区別を維持したいので、別々のラベルを持たなければなりません(今は、ラベル "1"が2回起こるので、そうではありません)。 もちろん、私はあなたが提供する出力からすべてを引き出すことが可能ですが、これは情報が樹形図から容易に入手できるので、かなり高価になります。私はそれを効率的に抽出する方法を見ていない。 – BDP1

+0

私は私が従うかどうか分からない。 2番目と3番目の列に3,4,5しか持たないようにしたいのですか? –

+0

最初は、元の質問に表示されているサンプル出力をhclust出力から抽出することを検討しています。だから私はクラスターの割り当てリストをしたい。クラスターが階層的クラスタリングで結合されると、観察は「親」および「子」クラスターの両方に行われるため、このリストでは複数回観察が行われます。さらに、私は分詞 - >子関係のリストを取得したいと思います。レコードのために、私はdendextendがこの機能(または使用する部分)を持っているのかどうかはわかりませんが、効率的にコードを作成する方法について正しい方向へのプッシュを期待していました。 – BDP1

関連する問題