Main Content

clusterdata

データから凝集型クラスターを構築

説明

T = clusterdata(X,cutoff) は、関数 linkage によって X から生成される凝集型階層ツリーを切り取るためのしきい値 cutoff に対して、入力データ行列 X の各観測値 (行) のクラスター インデックスを返します。

clusterdata は、凝集型クラスタリングをサポートしており、関数 pdistlinkage および cluster が組み込まれています。これらの関数を個別に使用すると、より詳細な分析を行うことができます。詳細については、アルゴリズムの説明を参照してください。

T = clusterdata(X,Name,Value) は、名前と値のペアの 1 つ以上の引数を使用してクラスタリング オプションを指定します。CutoffMaxClust のどちらかを指定しなければなりません。たとえば、最大 5 つのクラスターを求めるには、'MaxClust',5 と指定します。

すべて折りたたむ

2 つの異なるアプローチを使用して、無作為に生成されたデータ セットから最大 3 つのクラスターを求めて可視化します。

  1. 入力引数 cutoff の値を指定します。

  2. 名前と値のペアの引数 'MaxClust' の値を指定します。

3 つの標準一様分布から無作為に生成したデータが含まれている標本データ セットを作成します。

rng('default');  % For reproducibility
X = [gallery('uniformdata',[10 3],12); ...
    gallery('uniformdata',[10 3],13)+1.2; ...
    gallery('uniformdata',[10 3],14)+2.5];
y = [ones(10,1);2*(ones(10,1));3*(ones(10,1))]; % Actual classes

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

scatter3(X(:,1),X(:,2),X(:,3),100,y,'filled')
title('Randomly Generated Data in Three Clusters');

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

入力引数 cutoff について値 3 を指定することにより、データのクラスターを最大 3 つ求めます。

T1 = clusterdata(X,3);

cutoff の値が 2 より大きいので、clusterdatacutoff をクラスターの最大数として解釈します。

生成されたクラスター割り当てを使用してデータをプロットします。

scatter3(X(:,1),X(:,2),X(:,3),100,T1,'filled')
title('Result of Clustering');

Figure contains an axes object. The axes object with title Result of Clustering contains an object of type scatter.

名前と値のペアの引数 'MaxClust' について値 3 を指定することにより、クラスターを最大 3 つ求めます。

T2 = clusterdata(X,'Maxclust',3); 

生成されたクラスター割り当てを使用してデータをプロットします。

scatter3(X(:,1),X(:,2),X(:,3),100,T2,'filled')
title('Result of Clustering');

Figure contains an axes object. The axes object with title Result of Clustering contains an object of type scatter.

どちらのアプローチでも、clusterdata はデータ内で 3 つの異なるクラスターを識別します。

階層クラスター ツリーを作成し、一度にクラスターを求めます。3 次元散布図を使用して、クラスターを可視化します。

標準一様分布から生成された 20,000 行 3 列の標本データの行列を作成します。

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

ward 連結法を使用して作成した階層クラスター ツリーから最大 4 つのクラスターを求めます。距離行列を計算せずにクラスターを作成するため、'SaveMemory' として 'on' を指定します。このようにしないと、距離行列を保持するための十分なメモリがない場合にメモリ不足エラーが発生する可能性があります。

T = clusterdata(X,'Linkage','ward','SaveMemory','on','Maxclust',4);

各クラスターが別の色で表示されるようにデータをプロットします。

scatter3(X(:,1),X(:,2),X(:,3),10,T)

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

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

入力引数

すべて折りたたむ

入力データ。2 行以上の数値行列を指定します。行は観測値を、列はカテゴリまたは次元を表します。

データ型: single | double

linkage によって定義される階層ツリーを切り取るためのしきい値。02 の正のスカラーまたは ≥ 2 以上の正の整数を指定します。clusterdata の動作は、cutoff について指定された値によって変化します。

  • 0 < cutoff < 2 である場合、clusterdatainconsistent の値が cutoff より大きい場合にクラスターを形成します。

  • cutoff≥ 2 以上の整数である場合、clusterdata は最大 cutoff 個のクラスターを形成します。

cutoff を指定する場合は、名前と値のペアの引数を指定できません。

例: clusterdata(X,3)

データ型: single | double

名前と値の引数

オプションの引数のペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名、Value は対応する値です。名前と値の引数は他の引数の後ろにする必要がありますが、ペアの順序は関係ありません。

R2021a より前では、名前と値をそれぞれコンマを使って区切り、Name を引用符で囲みます。

例: clusterdata(X,'Linkage','ward','MaxClust',3) は、Ward 連結法を使用して最大 3 つの X のクラスターを作成するよう指定します。

階層クラスター ツリー内でクラスターを定義するための基準。'Criterion''inconsistent' または 'distance' から構成されるコンマ区切りのペアとして指定します。'Criterion' を指定する場合、MaxClust または Cutoff の値も指定しなければなりません。

例: clusterdata(X,'Criterion','distance','Cutoff',.5)

データ型: char | string

不整合または距離基準に対するカットオフ。'Cutoff' と正のスカラーから構成されるコンマ区切りのペアとして指定します。clusterdata は、Criterion の値に応じて、ノードの高さまたは不整合係数のしきい値として Cutoff を使用します。クラスターを定義するための基準を指定せずに 'Cutoff' の値を指定した場合、clusterdata は既定により 'inconsistent' 基準を使用します。

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

  • 'Criterion''inconsistent' である場合、あるノードおよびそのすべてのサブノードで inconsistent の値が Cutoff 未満であれば、clusterdata はこれらのノードをクラスターにグループ化します。

CutoffMaxClust のどちらかを指定しなければなりません。

例: clusterdata(X,'Cutoff',0.2)

データ型: single | double

不整合値を計算する深さ。'Depth' と数値スカラーから構成されるコンマ区切りのペアとして指定します。clusterdata は、階層クラスター ツリー内の各ノードを指定された深さまで調べることにより、不整合値を評価します。'Depth' を指定する場合、MaxClust または Cutoff の値も指定しなければなりません。

例: clusterdata(X,'Depth',3,'Cutoff',0.5)

データ型: single | double

距離計量。'Distance' と、次の表に記載されている、関数 pdist が受け入れる距離計量から構成されるコンマ区切りのペアとして指定します。'Distance' を指定する場合、MaxClust または Cutoff の値も指定しなければなりません。

メトリクス説明
'euclidean'

ユークリッド距離 (既定)

'squaredeuclidean'

2 乗ユークリッド距離(効率向上のみを目的に提供されているオプション。三角不等式は満たさない)。

'seuclidean'

標準化されたユークリッド距離。観測値間の各座標差は、標準偏差 S = std(X,'omitnan') の対応する要素で除算することによりスケーリングされます。

'mahalanobis'

X の標本共分散 C = cov(X,'omitrows') を使用したマハラノビス距離

'cityblock'

市街地距離

'minkowski'

ミンコフスキー距離。既定の指数は 2 です。異なる指数 P を使用するには、'minkowski',P のように 'minkowski' の後で P を指定します。P は正のスカラー値です。

'chebychev'

チェビシェフ距離 (最大座標差)

'cosine'

1 から、ベクトルとして扱われる点の間の夾角の余弦を引いた値

'correlation'

1 から、値の系列として扱われる点の間の標本相関を引いた値

'hamming'

ハミング距離 (異なる座標の比率)

'jaccard'

1 からジャカード係数 (異なる非ゼロ座標の比率) を減算

'spearman'

1 から観測値間の標本スピアマン順位相関係数を減算 (値の系列として処理)

@distfun

カスタム距離関数のハンドル。距離関数の形式は次のようになります。

function D2 = distfun(ZI,ZJ)
% calculation of distance
...
ここで、

  • ZI は、単一の観測値が含まれている 1n 列のベクトルです。

  • ZJ は、複数の観測値が含まれている m2n 列の行列です。distfun は、任意の個数の観測値が含まれている行列 ZJ を受け入れなければなりません。

  • D2m21 列の距離のベクトルであり、D2(k) は観測値 ZIZJ(k,:) の間の距離です。

データがスパースでない場合、通常は関数ハンドルではなく組み込みの distance を使用する方が高速です。

詳細は、距離計量を参照してください。

例: clusterdata(X,'Distance','minkowski','MaxClust',4)

データ型: char | string | function_handle

クラスター間の距離を計算するためのアルゴリズム。'Linkage' と、次の表に記載されている、関数 linkage が受け入れるアルゴリズムから構成されるコンマ区切りのペアとして指定します。'Linkage' を指定する場合、MaxClust または Cutoff の値も指定しなければなりません。

アルゴリズム説明
'average'

重みのない平均距離 (UPGMA)

'centroid'

重心までの距離 (UPGMC)。ユークリッド距離にのみ適しています。

'complete'

最大距離

'median'

重みのある重心までの距離 (WPGMC)。ユークリッド距離にのみ適しています。

'single'

最短距離

'ward'

内部平方距離 (最小分散アルゴリズム)。ユークリッド距離にのみ適しています。

'weighted'

重みのある平均距離 (WPGMA)

詳細は、リンケージを参照してください。

例: clusterdata(X,'Linkage','median','MaxClust',4)

データ型: char | string

形成するクラスターの最大数。'MaxClust' と正の整数から構成されるコンマ区切りのペアとして指定します。

CutoffMaxClust のどちらかを指定しなければなりません。

例: clusterdata(X,'MaxClust',4)

データ型: single | double

メモリを節約するためのオプション。'SaveMemory''on' または 'off' から構成されるコンマ区切りのペアとして指定します。'SaveMemory' を指定する場合、MaxClust または Cutoff の値も指定しなければなりません。

'on' に設定すると、clusterdata は距離行列を計算せずにクラスターを作成します。次の条件がどちらも満たされる場合、'on' の設定が適用されます。

  • Linkage'centroid''median'、または 'ward' である。

  • Distance'euclidean' (既定) である。

この 2 つの条件が当てはまると、X の列数が 20 以下である場合、または距離行列を格納するための十分なメモリがコンピューターにない場合に、'SaveMemory' の既定値が 'on' になります。それ以外の場合、'SaveMemory' の既定値は 'off' です。

'SaveMemory''on' である場合、linkage の実行時間は次元数 (X の列数) に比例します。'SaveMemory''off' である場合、linkage で必要となるメモリ量は N2 に比例します。N は観測値の個数です。'SaveMemory' に最適な (高速になる) 設定を選択する方法は、問題の次元数、観測値の個数および使用可能メモリに依存します。既定の 'SaveMemory' の設定は、最適な設定のラフな近似です。

例: 'SaveMemory','on'

データ型: char | string

出力引数

すべて折りたたむ

クラスター インデックス。数値列ベクトルとして返されます。T には X と同数の行があり、T の各行は X 内の対応する観測値のクラスター割り当てを示します。

ヒント

  • 'Linkage''centroid' または 'median' である場合、linkage は非単調なクラスター ツリーを作成する可能性があります。このようになるのは、2 つのクラスター r および s の結合から 3 番目のクラスターまでの距離が r と s の間の距離より小さい場合です。この場合、既定の方向に描画した系統樹では、葉からルート ノードへのパスは下向きになります。これを回避するには、'Linkage' について別の値を指定します。次の図に非単調のクラスター ツリーを示します。

    Nonmonotonic cluster tree

    この場合、クラスター 1 とクラスター 3 が結合され新しいクラスターになっていますが、この新しいクラスターとクラスター 2 の間の距離はクラスター 1 とクラスター 3 の間の距離よりも短くなっています。

アルゴリズム

入力引数 cutoff について値 c を指定した場合、T = clusterdata(X,c) は以下の手順を実行します。

  1. pdist を使用して、X 内の観測値のペア間のユークリッド距離が含まれているベクトルを作成します。

    Y = pdist(X,'euclidean')

  2. 'single' 法で linkage を使用してクラスター間の最短距離を計算することにより、凝集型階層クラスター ツリーを Y から作成します。

    Z = linkage(Y,'single')

  3. 0 < c < 2 である場合、不整合値が c 未満であれば、cluster を使用して Z からクラスターを定義します。

    T = cluster(Z,'Cutoff',c)

  4. c≥ 2 以上の整数である場合、cluster を使用して最大 c 個のクラスターを Z から求めます。

    T = cluster(Z,'MaxClust',c)

代替機能

階層クラスター ツリー Z (入力データ行列 X に対する関数 linkage の出力) がある場合、cluster を使用すると、Z に対して凝集型クラスタリングを実行して、X 内の各観測値 (行) のクラスター割り当てを取得できます。

バージョン履歴

R2006a より前に導入