CLUSTER関数で​得られたクラスターを​任意のクラスター数で​分類してDENDRO​GRAM関数で色分け​表示するにはどうすれ​ばいいですか?

11 次查看(过去 30 天)
以下のように、CLUSTER関数では、maxclust プロパティでクラスター数を指定してクラスタリングすることができます。
 
NumCluster = 3; % クラスター数
rand('state', 7)
data = [rand(10,3); rand(10,3)+1; rand(10,3)+2]; % サンプルデータ
dist = pdist(data, 'euclidean'); % 距離行列計算
link = linkage(dist, 'complete'); % クラスターツリーの行列計算
clust = cluster(link, 'maxclust', NumCluster); % クラスター数を指定して、クラスタリング
 
しかし、以下のようにDENDROGRAM関数を実行すると、全ての系統が同じ色で表示されてしまいます。
 
[H,T,perm] = dendrogram(link, 0);
指定したクラスター数で、それぞれを色分け表示して描画する方法を教えてください。

采纳的回答

MathWorks Support Team
DENGROGRAM関数では、CLUSTER関数で出力されるクラスターと一致させて色づけすることはできません。
代替案として、DENGROGRAM関数の "colorthreshold"オプションを使用する方法があります。
 
NumCluster = 3; % クラスター数
rand('state', 7)
data = [rand(10,3); rand(10,3)+1; rand(10,3)+2]; % サンプルデータ
dist = pdist(data, 'euclidean'); % 距離行列計算
link = linkage(dist, 'complete'); % クラスターツリーの行列計算
clust = cluster(link, 'maxclust', NumCluster); % クラスター数を指定して、クラスタリング
color = link(end-NumCluster+2,3)-eps; % 閾値を計算
[H,T,perm] = dendrogram(link, 0, 'colorthreshold', color); % 色分けの閾値を指定して描画
この例では、LINKAGE 関数の出力変数 tree の3列目に含まれる距離(クラスターツリーの高さ)の情報を用いて、指定したクラスター数となる距離から微小な値(eps) を差し引くことで閾値をとして計算しています。
なお、上記の例で指定される変数 NumCluster の値は、2以上である必要があります。

更多回答(0 个)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!