Main Content

silhouette

シルエット プロット

説明

silhouette(X,clust) は、X 内の各点 (観測値) のクラスター割り当て clust に対して、n 行 p 列の入力データ行列 X のクラスター シルエットをプロットします。

silhouette(X,clust,Distance) は、Distance で指定された点間距離計量を使用して、シルエットをプロットします。

silhouette(X,clust,Distance,DistParameter) は、追加パラメーター値を受け入れるカスタム距離関数のハンドル @distfunDistance に対して指定された場合に、1 つ以上の追加距離計量パラメーター値を受け入れます。

s = silhouette(___) は、前の構文におけるいずれかの入力引数の組み合わせに対して、クラスター シルエットをプロットせずにシルエット値を s に返します。

[s,h] = silhouette(___) は、シルエットをプロットし、s のシルエット値に加えて Figure のハンドル h を返します。

すべて折りたたむ

さまざまな距離計量を使用して、クラスター化されたデータからシルエット プロットを作成します。

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

rng('default')  % For reproducibility
X = [randn(10,2)+3;randn(10,2)-3];

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

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.

散布図は、同じサイズの 2 つのクラスターにデータが分割されるようであることを示しています。

既定の 2 乗ユークリッド距離計量で kmeans を使用して、データを 2 つのクラスターに分割します。

clust = kmeans(X,2);

clust には、データのクラスター インデックスが格納されます。

既定の 2 乗ユークリッド距離計量を使用して、クラスター化されたデータからシルエット プロットを作成します。

silhouette(X,clust)

Figure contains an axes object. The axes object with xlabel Silhouette Value, ylabel Cluster contains an object of type bar.

シルエット プロットは、同じサイズの 2 つのクラスターにデータが分割されることを示しています。2 つのクラスターのすべての点でシルエット値が大きい (0.8 以上) ので、クラスターが十分に分離されていることがわかります。

ユークリッド距離計量を使用して、クラスター化されたデータからシルエット プロットを作成します。

silhouette(X,clust,'Euclidean')

Figure contains an axes object. The axes object with xlabel Silhouette Value, ylabel Cluster contains an object of type bar.

シルエット プロットは、同じサイズの 2 つのクラスターにデータが分割されることを示しています。2 つのクラスターのすべての点でシルエット値が大きい (0.6 以上) ので、クラスターが十分に分離されていることがわかります。

クラスタリングしたデータからシルエット値を計算します。

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

rng('default')  % For reproducibility
X = [randn(10,2)+1;randn(10,2)-1];

kmeans を使用して、距離の差の絶対値の総和に基づいて X 内のデータをクラスター化します。

clust = kmeans(X,2,'distance','cityblock');

clust には、データのクラスター インデックスが格納されます。

クラスタリングしたデータからシルエット値を計算します。kmeans のクラスタリングが差の絶対値の総和に基づくことを指示するため、距離計量として 'cityblock' を指定します。

s = silhouette(X,clust,'cityblock')
s = 20×1

    0.0816
    0.5848
    0.1906
    0.2781
    0.3954
    0.4050
    0.0897
    0.5416
    0.6203
    0.6664
      ⋮

カスタムなカイ二乗距離計量を使用して、クラスター化されたデータからシルエット値を求めます。カイ二乗距離計量はユークリッド距離計量と同等ですが、オプションでスケーリング パラメーターを使用することを検証します。

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

rng('default'); % For reproducibility
X = [randn(10,2)+3;randn(10,2)-3];

既定の 2 乗ユークリッド距離計量で kmeans を使用して、X 内のデータをクラスター化します。

clust = kmeans(X,2);

ユークリッド距離計量を使用して、シルエット値を求め、クラスター化されたデータからシルエット プロットを作成します。

[s,h] = silhouette(X,clust,'Euclidean')

Figure contains an axes object. The axes object with xlabel Silhouette Value, ylabel Cluster contains an object of type bar.

s = 20×1

    0.6472
    0.7241
    0.5682
    0.7658
    0.7864
    0.6397
    0.7253
    0.7783
    0.7054
    0.7442
      ⋮

h = 
  Figure (1) with properties:

      Number: 1
        Name: ''
       Color: [1 1 1]
    Position: [348 376 583 437]
       Units: 'pixels'

  Use GET to show all properties

J 次元の点 xz の間のカイ二乗距離は、次のようになります。

χ(x,z)=j=1Jwj(xj-zj)2,

ここで、wj は次元 j に関連付けられている重みです。

各次元の重みを設定し、カイ二乗距離関数を指定します。距離関数は以下の手順を実行しなければなりません。

  • np 列の入力データ行列 XX の 1 行 (たとえば x)、およびスケーリング (重み) パラメーター w を入力引数として受け入れる。

  • x から X の各行までの距離を計算する。

  • 長さ n のベクトルを返す。ベクトルの各要素は、x に対応する観測値と X の各行に対応する観測値の間の距離です。

w = [0.4; 0.6]; % Set arbitrary weights for illustration
chiSqrDist = @(x,Z,w)sqrt(((x-Z).^2)*w);

カスタムな距離計量 chiSqrDist を使用して、クラスター化されたデータからシルエット値を求めます。

s1 = silhouette(X,clust,chiSqrDist,w)
s1 = 20×1

    0.6288
    0.7239
    0.6244
    0.7696
    0.7957
    0.6688
    0.7386
    0.7865
    0.7223
    0.7572
      ⋮

両方の次元の重みを 1 に設定して、chiSqrDist をユークリッド距離計量として使用します。シルエット値を求め、s の値と同じであることを確認します。

w2 = [1; 1];
s2 = silhouette(X,clust,chiSqrDist,w2);
AreValuesEqual = isequal(s2,s)
AreValuesEqual = logical
   1

シルエット値は ss2 で同じです。

入力引数

すべて折りたたむ

入力データ。n 行 p 列の数値行列を指定します。行は観測値に、列は座標に対応します。

データ型: single | double

クラスター割り当て。X の各点のクラスター名が格納されているカテゴリカル変数、数値ベクトル、文字行列、string 配列、または文字ベクトルの cell 配列を指定します。

silhouette は、clust 内の NaN および空の値を欠損値として扱い、X の対応する行を無視します。

データ型: single | double | char | string | cell | categorical

距離計量。次の表に記載されている文字ベクトル、string スカラーまたは関数ハンドルを指定します。

メトリクス説明
'Euclidean'

ユークリッド距離

'sqEuclidean'

2 乗ユークリッド距離 (既定の設定)

'cityblock'

差の絶対値の総和

'cosine'

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

'correlation'

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

'Hamming'

一致しない座標の比率

'Jaccard'

ゼロ以外の一致しない座標の比率

ベクトル関数 pdist が作成する形式の、ペアワイズ距離の数値行ベクトル。この場合の X は、使用されないので [] に設定しても問題はありません。
@distfun

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

function D = distfun(X0,X,DistParameter)
% calculation of distance
...
ここで、

  • X0 は、入力データ行列 X の単一の点 (観測値) が含まれている 1 行 p 列のベクトルです。

  • X は、n 行 p 列の点の行列です。

  • DistParameter は、@distfun に特有である 1 つ以上の追加パラメーター値を表します。

  • D は n 行 1 列の距離のベクトルであり、D(k) は観測値 X0X(k,:) の間の距離です。

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

例: 'cosine'

データ型: char | string | function_handle | single | double

距離計量のパラメーター値。正のスカラー、数値ベクトルまたは数値行列を指定します。この引数が有効なのは、入力パラメーター X0 および X に加えて 1 つ以上のパラメーター値を受け入れるカスタム距離関数のハンドル @distfun を指定する場合だけです。

例: silhouette(X,clust,distfun,p1,p2)p1p2 は、@distfun 用の追加距離計量パラメーター値です。

データ型: single | double

出力引数

すべて折りたたむ

シルエット値。–1 から 1 の範囲にある値が含まれている n 行 1 列のベクトルとして返されます。シルエット値は、他のクラスターの点と比較して、ある点が自身のクラスター内の点にどの程度似ているかを示す尺度です。値の範囲は、–11 です。高いシルエット値は、点が自身のクラスターに十分に一致し、他のクラスターにはあまり一致しないことを示します。

データ型: single | double

Figure のハンドル。スカラーとして返されます。Figure のハンドルを使用して、Figure のプロパティのクエリと修正を行うことができます。詳細については、Figure のプロパティ を参照してください。

詳細

すべて折りたたむ

シルエット値

各点のシルエット値は、他のクラスターの点と比べて、その点が同じクラスター内の他の点にどれくらい相似しているかを示す尺度です。

i 番目の点のシルエット値 si は、次のように定義されます。

si=(biai)max(ai,bi),

ここで ai は i 番目の点から i と同じクラスターの他の点までの平均距離で、bi は i 番目の点から別のクラスターの点までの最小平均距離です。i 番目の点がそのクラスター内の唯一の点である場合、シルエット値 si は 1 に設定されます。

シルエット値の範囲は –1 ~ 1 です。高いシルエット値は、点が自身のクラスターに十分に一致し、他のクラスターにはあまり一致しないことを示します。ほとんどの点のシルエット値が高い場合、クラスタリング ソリューションは適切です。多くの点のシルエット値が小さいか負である場合、クラスター化の解に含まれるクラスターの個数が多すぎるか少なすぎる可能性があります。シルエット値は、任意の距離計量によるクラスター化の評価基準として使用できます。

参照

[1] Kaufman L., and P. J. Rousseeuw. Finding Groups in Data: An Introduction to Cluster Analysis. Hoboken, NJ: John Wiley & Sons, Inc., 1990.

バージョン履歴

R2006a より前に導入