0

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

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

私の最終的な出力は次のようになります。2つのテーブルがあります

クラスターの割り当て:

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

クラスター階層:

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

ご覧のとおり、観測値 3、4、および 5 はクラスター割り当てテーブルで複数回発生します。ここで、クラスターの 1 つはその親クラスターのサブクラスターです。これは、階層テーブルで確認できます。

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

この問題に効率的に取り組む方法についての提案、できれば簡単に入手できるパッケージを使用する方法を教えていただければ幸いです。

編集:サンプル出力データに対応する次の例を検討してください。

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)

木を高さ 6 で切断すると、出力で A と B という名前の 2 つのクラスターが得られます。ただし、ツリーを高さ 4 で切断すると、出力に A、C、D という名前の 3 つのクラスターが表示されます。たとえば、docID 3 の観測は、クラスター B とクラスター C (ツリーを切り取った高さに応じて) のいずれかにあり、サンプル出力クラスター割り当ての 2 つのエントリに対応します。クラスター B は 2 つのクラスター C と D に分割されており、これはクラスター階層の出力で確認できます。

ここでの目標は、樹形図を下に移動しながら、クラスターの割り当てと階層の完全なリストを取得することです。(できれば、(サブ)クラスター内の観測量が一定量の観測量を下回ると停止します)

これまで、これを行うための合理的で効率的な方法を思いつくことができませんでした。

4

1 に答える 1