Main Content

군집 평가

이 예제에서는 피셔의 붓꽃 데이터에서 군집을 식별하는 방법을 보여줍니다.

피셔(Fisher)의 붓꽃 데이터 세트를 불러옵니다.

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

X는 150개 붓꽃에 대한 2개의 꽃잎 측정값을 포함하는 숫자형 행렬입니다. Y는 이에 대응되는 붓꽃 종을 포함하는 문자형 벡터로 구성된 셀형 배열입니다.

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.

대부분의 군집 알고리즘은 군집 개수에 대한 사전 정보를 필요로 합니다. 이러한 정보를 사용할 수 없는 경우에는 지정된 측정법을 기반으로 데이터에 존재하는 군집 개수를 결정하기 위해 군집 평가 기법을 사용합니다.

세 개의 군집은 데이터에 있는 세 가지 종과 일치합니다.

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

시각화를 위해 데이터에 대한 음이 아닌 랭크 2 근사를 계산합니다.

Xred = nnmf(X,2);

원래 특징이 두 개의 특징으로 줄어듭니다. 어떤 특징도 음수가 아니기 때문에 nnmf 또한 특징이 음수가 아니라는 것을 보장합니다.

산점도 플롯을 사용하여 세 개의 군집을 시각적으로 확인합니다.

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.

참고 항목

|