
CLUSTER関数で得られたクラスターを任意のクラスター数で分類してDENDROGRAM関数で色分け表示するにはどうすればいいですか?
11 views (last 30 days)
Show older comments
MathWorks Support Team
on 15 Apr 2015
Answered: MathWorks Support Team
on 15 Apr 2015
以下のように、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);

指定したクラスター数で、それぞれを色分け表示して描画する方法を教えてください。
Accepted Answer
MathWorks Support Team
on 15 Apr 2015
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 Comments
More Answers (0)
See Also
Categories
Find more on クラスターの可視化と評価 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!