군집 평가
이 예제에서는 피셔의 붓꽃 데이터에서 군집을 식별하는 방법을 보여줍니다.
피셔(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)
대부분의 군집 알고리즘은 군집 개수에 대한 사전 정보를 필요로 합니다. 이러한 정보를 사용할 수 없는 경우에는 지정된 측정법을 기반으로 데이터에 존재하는 군집 개수를 결정하기 위해 군집 평가 기법을 사용합니다.
세 개의 군집은 데이터에 있는 세 가지 종과 일치합니다.
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