このモジュール (scipy.cluster.hierarchy) に関して混乱がありました...そしてまだいくつかあります!
たとえば、次のデンドログラムがあります。
私の質問は、色付きのサブツリー (それぞれがクラスターを表す) を適切な形式 (SIF 形式など) で抽出するにはどうすればよいですか? 上記のプロットを取得するコードは次のとおりです。
import scipy
import scipy.cluster.hierarchy as sch
import matplotlib.pylab as plt
scipy.randn(100,2)
d = sch.distance.pdist(X)
Z= sch.linkage(d,method='complete')
P =sch.dendrogram(Z)
plt.savefig('plot_dendrogram.png')
T = sch.fcluster(Z, 0.5*d.max(), 'distance')
#array([4, 5, 3, 2, 2, 3, 5, 2, 2, 5, 2, 2, 2, 3, 2, 3, 2, 5, 4, 5, 2, 5, 2,
# 3, 3, 3, 1, 3, 4, 2, 2, 4, 2, 4, 3, 3, 2, 5, 5, 5, 3, 2, 2, 2, 5, 4,
# 2, 4, 2, 2, 5, 5, 1, 2, 3, 2, 2, 5, 4, 2, 5, 4, 3, 5, 4, 4, 2, 2, 2,
# 4, 2, 5, 2, 2, 3, 3, 2, 4, 5, 3, 4, 4, 2, 1, 5, 4, 2, 2, 5, 5, 2, 2,
# 5, 5, 5, 4, 3, 3, 2, 4], dtype=int32)
sch.leaders(Z,T)
# (array([190, 191, 182, 193, 194], dtype=int32),
# array([2, 3, 1, 4,5],dtype=int32))
したがって、 の出力はfcluster()
(ID による) ノードのクラスタリングを提供し、ここleaders()
で説明されているのは 2 つの配列を返すことになっています。
最初のものには、Z によって生成されたクラスターのリーダー ノードが含まれています。ここでは、プロットと同様に 5 つのクラスターがあることがわかります。
2 つ目はこれらのクラスターの ID です
したがって、この Leaders() が resp を返す場合。L および M :L[2]=182
およびM[2]=1
の場合、クラスター 1 はノード ID 182 によって導かれますが、これは観測セット X には存在しません。ドキュメントには、「... その後、非シングルトン クラスターに対応する」と記載されています。しかし、私はそれを得ることができません...
また、Z を によってツリーに変換しました。これによりsch.to_tree(Z)
、使いやすいツリー オブジェクトが返されます。これを視覚化したいのですが、これらの種類のツリー オブジェクトを入力として操作するグラフィカル プラットフォームとしてどのツールを使用すればよいでしょうか?