2013-04-11 11 views
16

あなたはPythonでscipyのダウンロードでは、この階層的クラスタリングの呼び出しがある場合:Pythonのscipyでリンク/距離行列からクラスターの割り当てを計算する方法は?

from scipy.cluster.hierarchy import linkage 
# dist_matrix is long form distance matrix 
linkage_matrix = linkage(squareform(dist_matrix), linkage_method) 

その後、個々の点のためのクラスタの割り当てにここから行くための効率的な方法は何でしょうか?すなわち、長さがNのベクトルであり、Nはポイントの数であり、各エントリiは、iという点のクラスタ番号であり、得られたクラスタリングで所定の閾値threshによって生成されたクラスタの数を仮定すると、

明確にする:クラスタ番号は、ツリーにしきい値を適用した後のクラスタになります。この場合、各リーフノードが属するクラスタの固有のクラスタが得られます。各ポイントは、デンドログラムをカットするしきい値で定義される1つの「最も特定のクラスタ」に属するという点でユニークです。

scipy.cluster.hierarchy.fclusterdataは、このクラスタ割り当てを戻り値として提供していますが、カスタムメイドの距離行列と距離メトリックから始まっているため、fclusterdataは使用できません。質問は次のようになっています。fclusterdataが計算しているもの、つまりクラスタの割り当てをどのように計算できますか?

+1

、行列を観測し、クラスタリングと考えられているを参照してください結果が正しくない可能性があります。 linkage()への入力として距離行列の圧縮されたベクトルを直接与えることができます。 – HongboZhu

+0

詳細をご覧ください:https://github.com/scipy/scipy/issues/2614 – HongboZhu

答えて

14

私は右のあなたを理解していれば、それはfclusterが何をするかです:リンケージ行列Z.

によって定義された階層的クラスタリングから

scipy.cluster.hierarchy.fcluster(Z, t, criterion='inconsistent', depth=2, R=None, monocrit=None)

フォームをフラットクラスタ...

戻り値:長さnの配列。 T [i]は、元の観測値iが属するフラットなクラスタ番号である。

fcluster(linkage_matrix, t)と入力してください。tはあなたのしきい値です。

0

あなたはすべてのクラスタレベルで、彼らが何であるかを順番にメンバーを表示したい場合は、凝集し、あなたがリンケージ()にsquareform(dist_matrix)を得た場合https://stackoverflow.com/a/43170608/5728789

関連する問題