Main Content

cluster

リンケージによる凝集型クラスターの構築

説明

T = cluster(Z,'Cutoff',C) は、凝集型の階層クラスター ツリー Z からクラスターを定義します。入力 Z は、入力データ行列 X に対する関数 linkage の出力です。cluster は、ツリー内のノードの不整合係数 (または inconsistent の値) のしきい値として C を使用して、Z をクラスターに分割します。出力 T には、各観測値 (X の行) のクラスター割り当てが格納されます。

T = cluster(Z,'Cutoff',C,'Depth',D) は、各ノードで深さ D まで調べることにより、inconsistent の値を評価します。

T = cluster(Z,'Cutoff',C,'Criterion',criterion) は、クラスターを定義するための criterion として 'inconsistent' (既定) または 'distance' を使用します。cluster がクラスターを定義するには、criterionC 未満でなければなりません。

T = cluster(Z,'MaxClust',N) は、クラスターを定義する基準として 'distance' を使用して、最大 N 個のクラスターを定義します。

すべて折りたたむ

各ノードで深さ 4 まで不整合値を評価することにより、無作為に生成したデータに対して凝集型クラスタリングを実行します。

標本データを無作為に生成します。

rng('default'); % For reproducibility
X = [(randn(20,2)*0.75)+1;
    (randn(20,2)*0.25)-1];

データの散布図を作成します。

scatter(X(:,1),X(:,2));
title('Randomly Generated Data');

Figure contains an axes object. The axes object with title Randomly Generated Data contains an object of type scatter.

ward 連結法を使用して階層クラスター ツリーを作成します。

Z = linkage(X,'ward');

データの系統樹プロットを作成します。

dendrogram(Z)

Figure contains an axes object. The axes object contains 29 objects of type line.

散布図と系統樹プロットでは、データに 2 つのクラスターがあるように見えます。

不整合係数のしきい値として 3 を使用し、各ノードで深さ 4 まで調べることにより、データをクラスター化します。生成されたクラスターをプロットします。

T = cluster(Z,'cutoff',3,'Depth',4);
gscatter(X(:,1),X(:,2),T)

Figure contains an axes object. The axes object contains 2 objects of type line. One or more of the lines displays its values using only markers These objects represent 1, 2.

cluster は、データ内のクラスターを 2 つ識別します。

クラスターを定義する基準として 'distance' を使用することにより、fisheriris データ セットに対して凝集型クラスタリングを実行します。データのクラスター割り当てを可視化します。

fisheriris データ セットを読み込みます。

load fisheriris

種をグループ化変数として使用して、データの 2 次元散布図を可視化します。3 つの異なる種についてマーカーの色と記号を指定します。

gscatter(meas(:,1),meas(:,2),species,'rgb','do*')
title("Actual Clusters of Fisher's Iris Data")

Figure contains an axes object. The axes object with title Actual Clusters of Fisher's Iris Data contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica.

'average' 法と 'chebychev' 尺度を使用して階層クラスター ツリーを作成します。

Z = linkage(meas,'average','chebychev');

'distance' 基準のしきい値として 1.5 を使用して、データをクラスター化します。

T = cluster(Z,'cutoff',1.5,'Criterion','distance')
T = 150×1

     2
     2
     2
     2
     2
     2
     2
     2
     2
     2
      ⋮

T には、クラスター割り当てに対応する番号が格納されます。cluster が識別したクラス数を求めます。

length(unique(T))
ans = 3

cluster は、指定された値の cutoff および Criterion に対して 3 つのクラスを識別します。

T をグループ化変数として使用して、クラスター化の結果の 2 次元散布図を可視化します。3 つの異なるクラスについてマーカーの色と記号を指定します。

gscatter(meas(:,1),meas(:,2),T,'rgb','do*')
title("Cluster Assignments of Fisher's Iris Data")

Figure contains an axes object. The axes object with title Cluster Assignments of Fisher's Iris Data contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent 1, 2, 3.

クラスター化により、setosa クラス (クラス 2) は独立したクラスターに属するように正しく識別されますが、versicolor クラス (クラス 1) と virginica クラス (クラス 3) の区別は不十分です。散布図におけるクラスのラベル付けには T に格納されている番号が使用されることに注意してください。

fisheriris データ セットで最大 3 つのクラスターを求め、花のクラスター割り当てを既知の分類と比較します。

標本データを読み込みます。

load fisheriris

'average' 法と 'chebychev' 尺度を使用して階層クラスター ツリーを作成します。

Z = linkage(meas,'average','chebychev');

データ内のクラスターを最大 3 つ求めます。

T = cluster(Z,'maxclust',3);

Z の系統樹図を作成します。3 つのクラスターを表示するため、3 番目から最後までのリンクと 2 番目から最後までのリンクの中間点にカットオフを設定して 'ColorThreshold' を使用します。

cutoff = median([Z(end-2,3) Z(end-1,3)]);
dendrogram(Z,'ColorThreshold',cutoff)

Figure contains an axes object. The axes object contains 29 objects of type line.

3 つのクラスターがどのようにして 1 つに結合されるかを調べるため、Z の最後の 2 行を表示します。linkage は、293 番目のクラスター (青) を 297 番目のクラスター (赤) と結合し、1.7583 というリンクで 298 番目のクラスターを形成します。そして、linkage は 296 番目のクラスター (緑) を 298 番目のクラスターと結合します。

lastTwo = Z(end-1:end,:)
lastTwo = 2×3

  293.0000  297.0000    1.7583
  296.0000  298.0000    3.4445

クラスターの割り当てが 3 つの種類に対応していることを確認します。たとえば、クラスターの 1 つには、2 番目の種類の花が 50 本、3 番目の種類の花が 40 本含まれています。

crosstab(T,species)
ans = 3×3

     0     0    10
     0    50    40
    50     0     0

20,000 件の観測値をもつ標本データを無作為に生成します。

rng('default') % For reproducibility
X = rand(20000,3);

ward 連結法を使用して階層クラスター ツリーを作成します。このケースでは、既定により関数clusterdata'SaveMemory' オプションが 'on' に設定されます。通常は、X の次元数と使用可能メモリに基づいて 'SaveMemory' に最適な値を指定します。

Z = linkage(X,'ward');

データを最大 4 つのグループにクラスター化し、結果をプロットします。

c = cluster(Z,'Maxclust',4);
scatter3(X(:,1),X(:,2),X(:,3),10,c)

Figure contains an axes object. The axes object contains an object of type scatter.

cluster は、データ内のグループを 4 つ識別します。

入力引数

すべて折りたたむ

関数 linkage の出力である、凝集型の階層クラスター ツリー。数値行列を指定します。行数 (観測値の個数) が m である入力データ行列 X の場合、linkage(m – 1) 行 3 列の行列 Z を返します。linkage がクラスター ツリーを作成する方法の説明については、Z を参照してください。

例: Z = linkage(X)X は入力データ行列です。

データ型: single | double

クラスターを定義するためのしきい値。正のスカラー、または正のスカラーのベクトルを指定します。cluster は、階層クラスター ツリーでクラスターを定義するための criterion に応じて、ノードの高さまたは不整合係数のしきい値として C を使用します。

  • クラスターを定義する基準が 'distance' である場合、あるノードの高さが C 未満であれば、cluster はそのノードの位置以下にあるすべてのリーフをクラスターにグループ化します。

  • クラスターを定義する基準が 'inconsistent' である場合、あるノードおよびそのすべてのサブノードで inconsistent の値が C 未満であれば、cluster はこれらのノードをクラスターにグループ化します。cluster は、クラスター ツリー Z のルートから出発して、inconsistent の値がしきい値 C 未満であり、サブノード (子孫) の不整合係数が C 未満であるノードに到達するまでツリー内を下方向に移動します。そして、cluster はそのノードの位置以下にあるすべてのリーフをクラスター (ノード自体がリーフである場合はシングルトン) にグループ化します。cluster は、すべてのリーフ ノードがクラスターに含まれるようになるまで、ツリー内のすべての分岐を探索します。

例: cluster(Z,'Cutoff',0.5)

データ型: single | double

不整合値を計算する深さ。数値スカラーを指定します。cluster は、各ノードを深さ D まで調べることにより、不整合値を評価します。

例: cluster(Z,'Cutoff',0.5,'Depth',3)

データ型: single | double

クラスターを定義するための基準。'inconsistent' または 'distance' を指定します。

クラスターを定義する基準が 'distance' である場合、あるノードの高さが C 未満であれば、cluster はそのノードの位置以下にあるすべてのリーフをクラスター (ノード自体がリーフである場合はシングルトン) にグループ化します。ツリー内のノードの高さは、そのノードで結合されている 2 つのサブノードの間の距離を表します。'distance' を指定した場合、クラスターは Zdendrogram プロットの水平スライスに対応します。

クラスターを定義する基準が 'inconsistent' である場合、あるノードおよびそのすべてのサブノードの不整合係数 (inconsistent の値) が C 未満であれば、cluster はそのノードおよびサブノードをクラスターにグループ化します。'inconsistent' という指定は、cluster(Z,'Cutoff',C) と等価です。

例: cluster(Z,'Cutoff',0.5,'Criterion','distance')

データ型: char | string

形成するクラスターの最大数。正の整数、または正の整数のベクトルを指定します。cluster は、クラスターを定義する基準として 'distance' を使用して、最大 N 個のクラスターを構築します。ツリー内の各ノードの高さは、そのノードで結合されている 2 つのサブノードの間の距離を表します。cluster は、ツリーを水平に切り取ると N 個以下のクラスターが残る、最小の高さを求めます。詳細については、任意のクラスターの指定を参照してください。

例: cluster(Z,'MaxClust',5)

データ型: single | double

出力引数

すべて折りたたむ

クラスター割り当て。数値ベクトルまたは行列として返されます。(m – 1) 行 3 列の階層クラスター ツリー Z (入力 X に対する linkage の出力) の場合、X の m 個の行 (観測値) に対するクラスター割り当てが T に格納されます。

T のサイズは、対応する C または N のサイズによって異なります。

  • C が正のスカラーである場合、T は長さ m のベクトルになります。

  • N が正の整数である場合、T は長さ m のベクトルになります。

  • C が正のスカラーによる長さ l のベクトルである場合、T は m 行 l 列の行列になり、各列が C の各値に対応します。

  • N が正の整数による長さ l のベクトルである場合、T は m 行 l 列の行列になり、各列が N の各値に対応します。

代替機能

入力データ行列 X がある場合、clusterdata を使用すると、凝集型クラスタリングを実行して、X 内の各観測値 (行) のクラスター インデックスを取得できます。関数 clusterdata は必要な手順をすべて実行するので、関数 pdistlinkage および cluster を個別に実行する必要はありません。

バージョン履歴

R2006a より前に導入