問題タブ [hclust]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 平均リンクを使用した「hclust」と「agnes」の異なる結果
カスタムのシミュレートされた類似性マトリックスに単純なクラスタリング手順を適用しています。( https://github.com/ehouddt/Files/blob/master/sim_col.RData )
ただし、平均的なリンクhclust
を使用する場合とagnes
手順の違いに気付きました(注:完全なリンクでも同じ動作を観察しました) 。
hclust
予想どおり、との順序が異なるため、デンドログラムは異なって見えますagnes
。ただし、ラベルを (k=20
たとえば で) カットすると、観測の結果が異なります (似ていますが)。(たとえば、ラベルの数量が 2 つの結果で異なることがわかります)
私はばかげた間違いを犯していますか、それとも木を切った後にまったく同じ結果を返すはずがhclust
ありませんか? agnes
2 つのプロシージャが同じ結果を返すはずがない場合、2 つの関数の違いはどこにありますか?
r - クラスター階層とネストされたクラスター割り当ての取得
私は現在、ドキュメントのトピックの階層を調べています。最初のステップとして、ドキュメントのベクトル表現を見つけます。その後、階層クラスタリングを使用して、ドキュメントのトピック内にトピックがあるかどうかを判断します。少なくとも 2% の元のデータを含む (ネストされた) クラスターのみを考慮したいと考えています。これを達成するために、Rを使用しています。
現在、クラスタリングの結果からクラスタ階層を効率的に抽出することに苦労しています。クラスタリングは、元の「hclust」関数と同様の結果を提供する「fastcluster」パッケージで行われます。
私の最終的な出力は次のようになります。2つのテーブルがあります
クラスターの割り当て:
クラスター階層:
ご覧のとおり、観測値 3、4、および 5 はクラスター割り当てテーブルで複数回発生します。ここで、クラスターの 1 つはその親クラスターのサブクラスターです。これは、階層テーブルで確認できます。
私の現在のアプローチは、「Dendextend」パッケージの cutree.dendogram 関数を使用して、k の値のグリッドのクラスター割り当てを見つけ、出力からクラスター階層と割り当てを推測することです。ただし、このアプローチは非常にナイーブであり、多数の観測とクラスターの場合は非常に遅くなります。
この問題に効率的に取り組む方法についての提案、できれば簡単に入手できるパッケージを使用する方法を教えていただければ幸いです。
編集:サンプル出力データに対応する次の例を検討してください。
木を高さ 6 で切断すると、出力で A と B という名前の 2 つのクラスターが得られます。ただし、ツリーを高さ 4 で切断すると、出力に A、C、D という名前の 3 つのクラスターが表示されます。たとえば、docID 3 の観測は、クラスター B とクラスター C (ツリーを切り取った高さに応じて) のいずれかにあり、サンプル出力クラスター割り当ての 2 つのエントリに対応します。クラスター B は 2 つのクラスター C と D に分割されており、これはクラスター階層の出力で確認できます。
ここでの目標は、樹形図を下に移動しながら、クラスターの割り当てと階層の完全なリストを取得することです。(できれば、(サブ)クラスター内の観測量が一定量の観測量を下回ると停止します)
これまで、これを行うための合理的で効率的な方法を思いつくことができませんでした。
r - hclust からクラスタの周囲にポリゴンを描画します
関数 hclust を使用してクラスタリングを行ったので、各クラスタの周りにポリゴンを描画したいと思います!
どうすればそれができますか?クラスター ID を持つポイントのグループしかありません!
たとえば、この画像には 2 つのクラスと 4 つの異なる領域があります。これらの領域の数を取得するにはどうすればよいですか?