メインコンテンツ

clusterdata

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

説明

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

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

T = clusterdata(X,MaxClust=maxclust) は、クラスターを定義する既定の基準として "distance" を使用して、最大 maxclust 個のクラスターのクラスター インデックスを返します。

T = clusterdata(___,Name=Value) では、前の構文におけるいずれかの入力引数の組み合わせに加えて、1 つ以上の名前と値の引数を使用してオプションを指定します。たとえば、各ノードで深さ 3 まで距離の値を評価して最大 5 つのクラスターを求めるには、clusterdata(X,MaxClust=5,Depth=3) と指定します。

すべて折りたたむ

無作為に生成されたデータ セットから最大 3 つのクラスターを求めて可視化します。

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

rng(0,"twister");  % 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")

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

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

T = clusterdata(X,MaxClust=3); 

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

scatter3(X(:,1),X(:,2),X(:,3),100,T,"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(0,"twister");  % For reproducibility
X = rand(20000,3);

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

T = clusterdata(X,MaxClust=4,Linkage="ward",SaveMemory="on");

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

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

不整合または距離の基準のカットオフ。正のスカラーとして指定します。

Criterion="inconsistent" を指定した場合 (または Criterion を指定しない場合)、あるノードおよびそのすべてのサブノードで inconsistent の値が cutoff 未満であれば、clusterdata 関数はそれらのノードをクラスターにグループ化します。

Criterion="distance" を指定した場合、あるノードの高さが cutoff 未満であれば、関数はそのノードの位置以下にあるすべてのリーフをクラスターにグループ化します。

cutoff を指定する場合、maxclust は指定できません。

例: clusterdata(X,Cutoff=0.2)

データ型: single | double

形成するクラスターの最大数。正の整数として指定します。

Criterion="distance" を指定した場合 (または Criterion を指定しない場合)、ツリー内の各ノードの高さは、そのノードで結合されている 2 つのサブノードの間の距離を表します。clusterdata 関数は、ツリーを水平に切り取ると maxclust 個以下のクラスターが残る最小の高さを求めます。詳細については、任意のクラスターの指定を参照してください。

Criterion="inconsistent" を指定した場合、関数は、まず不整合係数 (inconsistent の値) が最も大きいノードについて、そのノードとそのすべてのサブノードをクラスターにグループ化します。その後、このプロセスを繰り返して最大 maxclust 個のクラスターを構築します。

maxclust を指定する場合、cutoff は指定できません。

例: clusterdata(X,MaxClust=4)

データ型: single | double

名前と値の引数

すべて折りたたむ

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

例: clusterdata(X,MaxClust=3,Linkage="ward") は、ward 連結法を使用して最大 3 つの X のクラスターを作成します。

階層クラスター ツリー内でクラスターを定義する基準。"inconsistent" または "distance" として指定します。

例: Criterion="distance"

データ型: char | string

inconsistent の値を計算する深さ。数値スカラーとして指定します。clusterdata は、階層クラスター ツリー内の各ノードを指定された深さまで調べることにより、不整合値を評価します。

例: Depth=3

データ型: single | double

距離計量。"Distance" と、次の表に記載されている、pdist 関数が受け入れる距離計量から構成されるコンマ区切りのペアとして指定します。

メトリクス説明
"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",3,MaxClust=4)

データ型: char | string | function_handle

クラスター間の距離を計算するアルゴリズム。次の表に記載されている、linkage 関数が受け入れるいずれかのアルゴリズムとして指定します。

アルゴリズム説明
"average"

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

"centroid"

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

"complete"

最大距離

"median"

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

"single"

最短距離

"ward"

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

"weighted"

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

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

例: Linkage="median"

データ型: char | string

メモリを節約するためのオプション。"on" または "off" として指定します。

"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 番目のクラスターまでの距離が rs の間の距離より小さい場合です。この場合、既定の方向に描画したデンドログラムでは、葉からルート ノードへのパスは下向きになります。これを回避するには、Linkage について別の値を指定します。次の図に非単調のクラスター ツリーを示します。

    Nonmonotonic cluster tree

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

アルゴリズム

オプションの名前と値の引数をいずれも指定しない場合、clusterdata 関数は次の手順を実行します。

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

    Y = pdist(X,"euclidean")

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

    Z = linkage(Y,"single")

  3. cutoff を指定すると、clusterdata 関数は、不整合値が cutoff 未満であれば cluster を使用して Z からクラスターを定義します。

    T = cluster(Z,Cutoff=cutoff)

    maxclust を指定すると、clusterdata 関数は、cluster を使用して Z から最大 maxclust 個のクラスターを検出します。クラスターを定義する基準には "distance" を使用します。

    T = cluster(Z,MaxClust=maxclust)

代替機能

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

バージョン履歴

R2006a より前に導入

すべて展開する