Main Content

クラスター評価

この例では、フィッシャーのアヤメのデータ内にあるクラスターを識別する方法を示します。

フィッシャーのアヤメのデータ セットを読み込みます。

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

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

1 ~ 10 の複数のクラスターを評価します。

eva = evalclusters(X,'kmeans','CalinskiHarabasz','KList',1:10)
eva = 
  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


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

各クラスター数の結果を確認するには、eva を可視化します。

plot(eva)

Figure contains an axes object. The axes object with xlabel Number of Clusters, ylabel CalinskiHarabasz Values contains 2 objects of type line.

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

3 つのクラスターはデータ内に存在する 3 つの種に一致しています。

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

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

Xred = nnmf(X,2);

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

散布図を使用して 3 つのクラスターを視覚的に確認します。

gscatter(Xred(:,1),Xred(:,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.

参考

|