メインコンテンツ

evalclusters

クラスタリングの解の評価

説明

eva = evalclusters(x,clust,criterion) は、最適なデータ クラスター数を評価するために使用されるデータを含むクラスタリング評価オブジェクトを作成します。

eva = evalclusters(x,clust,criterion,Name,Value) は、1 つ以上の名前と値のペア引数で指定された追加オプションを使用して、クラスタリング評価オブジェクトを作成します。

すべて折りたたむ

Calinski-Harabasz クラスタリング評価基準を使用して最適なクラスター数を評価します。

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

load fisheriris

このデータには、3 種のアヤメの花のがく片と花弁からの長さと幅の測定値が含まれています。

Calinski-Harabasz 基準を使用して最適なクラスター数を評価します。データのクラスタリングには kmeans を使用します。

rng('default') % For reproducibility
eva = evalclusters(meas,'kmeans','CalinskiHarabasz','KList',1:6)
eva = 
  CalinskiHarabaszEvaluation with properties:

    NumObservations: 150
         InspectedK: [1 2 3 4 5 6]
    CriterionValues: [NaN 513.9245 561.6278 530.4871 456.1279 469.5068]
           OptimalK: 3


  Properties, Methods

OptimalK の値は、Calinski-Harabasz 基準に基づく最適なクラスター数が 3 つであることを示しています。

推奨されるクラスタリングの解の入力行列を使用して、最適なクラスター数を評価します。

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

load fisheriris;

このデータには、3 種のアヤメの花のがく片と花弁からの長さと幅の測定値が含まれています。

kmeans を使用し、クラスター数を 1、2、3、4、5、6 にして、がく片の長さの測定値に対する推奨されるクラスタリングの解の入力行列を作成します。

clust = zeros(size(meas,1),6);
for i=1:6
clust(:,i) = kmeans(meas,i,'emptyaction','singleton',...
        'replicate',5);
end

clust の各行は、1 つのがく片の長さの測定値に対応します。6 つの各列は、1 ~ 6 クラスターを含むクラスタリングの解に対応します。

Calinski-Harabasz 基準を使用して最適なクラスター数を評価します。

eva = evalclusters(meas,clust,'CalinskiHarabasz')
eva = 
  CalinskiHarabaszEvaluation with properties:

    NumObservations: 150
         InspectedK: [1 2 3 4 5 6]
    CriterionValues: [NaN 513.9245 561.6278 530.4871 456.1279 469.5068]
           OptimalK: 3


  Properties, Methods

OptimalK の値は、Calinski-Harabasz 基準に基づく最適なクラスター数が 3 つであることを示しています。

関数ハンドルを使用してクラスタリング アルゴリズムを指定してから、最適なクラスター数を評価します。

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

load fisheriris;

このデータには、3 種のアヤメの花のがく片と花弁からの長さと幅の測定値が含まれています。

関数ハンドルを使用してクラスタリング アルゴリズムを指定します。

myfunc = @(X,K)(kmeans(X,K,Emptyaction="singleton",Replicate=5));

Calinski-Harabasz 基準を使用してがく片の長さのデータに対する最適なクラスター数を評価します。

eva = evalclusters(meas,myfunc,'CalinskiHarabasz',KList=1:6)
eva = 
  CalinskiHarabaszEvaluation with properties:

    NumObservations: 150
         InspectedK: [1 2 3 4 5 6]
    CriterionValues: [NaN 513.9245 561.6278 530.4871 456.1279 469.5068]
           OptimalK: 3


  Properties, Methods

OptimalK の値は、Calinski-Harabasz 基準に基づく最適なクラスター数が 3 つであることを示しています。

入力引数

すべて折りたたむ

NP 列の行列として指定される入力データ。N は観測値の数、P は変数の数です。

データ型: single | double

クラスタリング アルゴリズム。次のいずれかとして指定します。

'kmeans'x のデータを kmeans クラスタリング アルゴリズムを使用してクラスタリングします。'EmptyAction''singleton''Replicates'5 に設定されます。
'linkage'x のデータを clusterdata 凝集型クラスタリング アルゴリズムを使用してクラスタリングします。'Linkage''ward' に設定されます。
'gmdistribution'x のデータを gmdistribution 混合ガウス分布アルゴリズムを使用してクラスタリングします。'SharedCov'true'Replicates'5 に設定されます。

criterion'CalinskiHarabasz''DaviesBouldin' または 'silhouette' の場合、関数ハンドルを使用してクラスタリング アルゴリズムを指定できます。この関数は C = clustfun(DATA,K) (DATA はクラスタリングするデータ、K はクラスター数) という形式でなければなりません。clustfun の出力は、次のいずれかでなければなりません。

  • DATA の各観測値のクラスター インデックスを表す整数のベクトル。このベクトルには K 個の一意の値がなければなりません。

  • n 個の観測値と K 個のクラスのスコアから成る nK 列の数値行列。この場合、各観測値のクラスター インデックスは各行の最大スコアの値に基づいて決定されます。

criterion'CalinskiHarabasz''DaviesBouldin' または 'silhouette' の場合は、clust を推奨されるクラスタリングの解を含む nK 列の行列として指定することもできます。n は標本データの観測値の数、K は推奨されるクラスタリングの解の数です。列 j に、j 番目のクラスタリングの解として、N 個の各点に対するクラスター インデックスが格納されます。

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

クラスタリング評価基準。次のいずれかとして指定します。

'silhouette'シルエット値を含む SilhouetteEvaluation クラスター評価オブジェクトを作成します。詳細は、シルエット値とシルエット基準を参照してください。
'DaviesBouldin'Davies-Bouldin インデックス値を含む DaviesBouldinEvaluation クラスター評価オブジェクトを作成します。詳細は、Davies-Bouldin 基準を参照してください。
'CalinskiHarabasz'Calinski-Harabasz インデックス値を含む CalinskiHarabaszEvaluation クラスタリング評価オブジェクトを作成します。詳細は、Calinski-Harabasz 基準を参照してください。
'gap'ギャップ基準値を含む GapEvaluation クラスター評価オブジェクトを作成します。詳細は、ギャップ値を参照してください。

クラスター評価手法の最適な選択肢はデータ セットの特性に応じて異なります。手法ごとに異なるアルゴリズムを使用して評価メトリクスが導出されます。

  • シルエット法 (Rouseeuw,1987) では、クラスターの各点のスコア (範囲は +1 ~ –1) を計算します。このスコアは、他のクラスターの点と比較して、ある点が自身のクラスター内の点にどの程度似ているかを示す尺度です。この手法では任意の距離計量を使用できます。平均シルエット スコアを数値メトリクスとして使用したり、silhouetteプロットを作成して各クラスターの点のスコアを可視化したりできます。この手法ではクラスターの形状が凸であると仮定するため、シルエット メトリクスは不規則な形状のクラスターにはあまり適しません。

  • Davies-Bouldin 法 (Davies and Bouldin,1979) では、クラスター内とクラスター間のユークリッド距離の比に基づく単一のインデックス値を計算します。シルエット法と異なり、この手法ではクラスターの形状に関する仮定は行いません。一般に、クラスター間の分離が大きく、クラスター内の分散が小さいほど、クラスタリングの解の Davies-Bouldin インデックス値が小さくなります (小さいほど良い)。

  • Calinski-Harabasz (CH) 法 (Calinski と Harabasz、1974 年) は、Davies-Bouldin 法に似ていますが、代わりに二乗ユークリッド距離と分散の統計量を使用します。CH インデックスは、自由度で正規化されたクラスター間の距離分散とクラスター内の距離分散の比に基づきます。この手法ではクラスターの形状に関する仮定は行いません。一般に、クラスター間の分離が大きく、クラスター内の分散が小さいほど、クラスタリングの解の CH インデックス値が大きくなります (大きいほど良い)。

  • ギャップ値法 (Tibshirani, Walther, and Hastie, 2001) では、クラスタリングの解を、入力点の特性をもつがクラスターがないシミュレーションされた参照分布と比較して、単一のメトリクス値を計算します。同じデータ セットに対する一連の与えられたクラスターの解 (クラスター数 k がそれぞれ異なる) のうち、ギャップ値が最も大きい解が最適解となります。この手法では任意の距離計量を使用できます。ギャップ値法では、クラスタリング アルゴリズムは推奨されるクラスタリングの解ごとに参照データを適用しなければならないため、他のクラスタリング評価手法よりも計算に時間がかかります。

名前と値の引数

すべて展開する

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

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

例: evalclusters(x,"kmeans","gap",KList=1:5,Distance="cityblock") は、市街地距離計量を使用して、1、2、3、4 および 5 つのクラスターを検定するよう指定します。

すべての基準に対して

すべて展開する

評価するクラスター数のリスト。正の整数値のベクトルとして指定します。KList を指定しなければならないのは、clust がクラスタリング アルゴリズム名または関数ハンドルの場合です。criterion'gap' の場合、clust は文字ベクトル、string スカラーまたは関数ハンドルでなければならず、KList を指定しなければなりません。

例: KList=1:6

データ型: single | double

シルエットおよびギャップの場合

すべて展開する

基準値の計算に使用する距離計量。'Distance' と以下のいずれかで構成されるコンマ区切りのペアとして指定します。

'sqEuclidean'2 乗ユークリッド距離
'Euclidean'ユークリッド距離。このオプションは、kmeans のクラスタリング アルゴリズムには使用できません。
'cityblock'差の絶対値の総和
'cosine'1 から、ベクトルとして扱われる点の間の夾角の余弦を引いた値
'correlation'1 から、値の系列として扱われる点の間の標本相関を引いた値
'Hamming'一致しない座標の比率。このオプションは、Silhouette 基準の場合のみ有効です。
'Jaccard'ゼロ以外の一致しない座標の比率。このオプションは、Silhouette 基準の場合のみ有効です。

それぞれの距離計量の詳細は、関数 pdist を参照してください。

関数ハンドルを使用して距離計量の関数を指定することもできます。距離関数の形式は d2 = distfun(XI,XJ) でなければなりません。ここで、XI は入力行列 X の 1 つの行に対応する 1 行 n 列のベクトル、XJX の複数の行に対応する m2n 列の行列です。distfun は距離 d2 が含まれている m2 行 1 列のベクトルを返さなければなりません。このベクトルの k 番目の要素は XIXJ(k,:) の間の距離です。

クラスタリング アルゴリズム clust が距離計量として関数ハンドルを受け入れる場合のみ、Distance は関数ハンドルを受け入れます。たとえば、kmeans クラスタリング アルゴリズムは距離計量として関数ハンドルを受け入れません。したがって、kmeans アルゴリズムを使用して Distance の関数ハンドルを指定すると、エラーが発生します。

  • criterion'silhouette' である場合、関数 pdist で作成される出力ベクトルとして Distance を指定することもできます。

  • clust'kmeans' または 'gmdistribution' である場合、evalclustersDistance について指定された距離計量を使用してデータをクラスター化します。

  • clust'linkage' であり、Distance'sqEuclidean' または 'Euclidean' である場合、ユークリッド距離とウォード連結法がクラスタリング アルゴリズムで使用されます。

  • clust'linkage' で、Distance が他のいずれかの計量の場合は、指定した距離計量と平均連結法がクラスタリング アルゴリズムで使用されます。

  • それ以外の場合はいずれも、Distance に指定した距離計量とクラスタリング アルゴリズムで使用される距離計量が一致していないと有意な結果が得られません。

例: 'Distance','Euclidean'

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

シルエットのみの場合

すべて展開する

各クラスターの事前確率。'ClusterPriors' と、以下のいずれかで構成されるコンマ区切りのペアとして指定します。

'empirical'すべてのポイントのシルエット値を平均化することによって、クラスタリングの解の全体的なシルエット値を計算します。各クラスターは、サイズに比例して全体的なシルエット値に寄与します。
'equal'各クラスター内のすべてのポイントのシルエット値を平均化し、次にこれらの値をすべてのクラスターについて平均化することによって、クラスタリングの解の全体的なシルエット値を計算します。各クラスターは、サイズに関係なく、全体的なシルエット値に均等に寄与します。

例: 'ClusterPriors','empirical'

ギャップのみの場合

すべて展開する

参照分布 ReferenceDistribution から生成される参照データ セットの数。'B' と正の整数値で構成されるコンマ区切りのペアとして指定します。

例: 'B',150

データ型: single | double

参照データの生成方法。'ReferenceDistributions' と以下のいずれかで構成されるコンマ区切りのペアとして指定します。

'PCA'データ行列 x の主成分に合わせて整列されたボックスにおける一様分布から参照データを生成します。
'uniform'データ行列 x の各特徴の範囲で均一に参照データを生成します。

例: 'ReferenceDistribution','uniform'

最適なクラスター数の選択方法。'SearchMethod' と以下のいずれかで構成されるコンマ区切りのペアとして指定します。

'globalMaxSE'

KList で指定されたクラスター数のそれぞれを評価し、次の条件を満たす最小のクラスター数を選択します。

Gap(K)GAPMAXSE(GAPMAX),

K はクラスター数、Gap(K) は K 個のクラスターに対するクラスタリングの解のギャップ値、GAPMAX は最大ギャップ値、SE(GAPMAX) は最大ギャップ値に対応する標準誤差です。

'firstMaxSE'

KList で指定されたクラスター数のそれぞれを評価し、次の条件を満たす最小のクラスター数を選択します。

Gap(K)Gap(K+1)SE(K+1),

K はクラスター数、Gap(K) は K 個のクラスターに対するクラスタリングの解のギャップ値、SE(K + 1) は K + 1 個のクラスターに対するクラスターの解の標準誤差です。

例: 'SearchMethod','globalMaxSE'

出力引数

すべて折りたたむ

クラスタリング評価データ。クラスタリング評価オブジェクトとして返されます。

参照

[1] Rouseeuw, P. J. “Silhouettes: a graphical aid to the interpretation and validation of cluster analysis.” Journal of Computational and Applied Mathematics. Vol. 20, No. 1, 1987, pp. 53–65.

[2] Davies, D. L., and D. W. Bouldin. “A Cluster Separation Measure.” IEEE Transactions on Pattern Analysis and Machine Intelligence. Vol. PAMI-1, No. 2, 1979, pp. 224–227.

[3] Calinski, T., and J. Harabasz. “A dendrite method for cluster analysis.” Communications in Statistics. Vol. 3, No. 1, 1974, pp. 1–27.

[4] Tibshirani, R., G. Walther, and T. Hastie. “Estimating the number of clusters in a data set via the gap statistic.” Journal of the Royal Statistical Society: Series B. Vol. 63, Part 2, 2001, pp. 411–423.

バージョン履歴

R2013b で導入