メインコンテンツ

最適なクラスター数の評価

evalclusters 関数を使用して、データ セットにおける最適なクラスター数を特定します。

代わりに、データのクラスター化ライブ エディター タスクを使用して、k-means クラスタリングを対話的に実行することもできます。

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

load fisheriris
X = meas;
y = categorical(species);

X は、150 本のアヤメについて 2 つのがく片と 2 つの花弁の測定値が含まれている数値行列です。y は、対応するアヤメの種類が含まれている文字ベクトルの cell 配列です。

Calinski-Harabasz 基準を使用して、1 ~ 10 のうちの最適なクラスター数を評価します。k-means クラスタリング アルゴリズムを使用してデータをクラスター化します。

evaluation = evalclusters(X,"kmeans","CalinskiHarabasz",KList=1:10)
evaluation = 
  CalinskiHarabaszEvaluation with properties:

    NumObservations: 150
         InspectedK: [1 2 3 4 5 6 7 8 9 10]
    CriterionValues: [NaN 513.9245 561.6278 530.4871 456.1279 469.5068 449.6410 435.8182 413.3837 386.5571]
           OptimalK: 3


  Properties, Methods

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

各クラスター数のクラスター評価結果を可視化します。

plot(evaluation)
legend(["Criterion values","Criterion value at OptimalK"])

Figure contains an axes object. The axes object with xlabel Number of Clusters, ylabel CalinskiHarabasz Values contains 2 objects of type line. These objects represent Criterion values, Criterion value at OptimalK.

ほとんどのクラスタリング アルゴリズムでは、クラスター数が事前にわかっていなければなりません。クラスター数がわからない場合は、クラスターの評価手法を使用して、指定されたメトリクスに基づいてデータ内に存在するクラスターの数を決定します。

データ内で 3 つのクラスターを識別することは、データ内に 3 つの種類があることと整合することに注意してください。

categories(y)
ans = 3×1 cell
    {'setosa'    }
    {'versicolor'}
    {'virginica' }

データを可視化するために、データの非負のランク 2 の近似を計算します。

reducedX = nnmf(X,2);

元の特徴量が 2 つの特徴量に削減されます。負の特徴量は存在しないため、特徴量が非負であることが nnmf によって保証されます。

散布図を使用して 3 つのクラスターを可視化します。色を使用してアヤメの種類を示します。

gscatter(reducedX(:,1),reducedX(:,2),y)
xlabel("Column 1")
ylabel("Column 2")
grid on

Figure contains an axes object. The axes object with xlabel Column 1, ylabel Column 2 contains 3 objects of type line. One or more of the lines displays its values using only markers These objects represent setosa, versicolor, virginica.

参考

| | |

トピック