[R언어] 군집화 성능평가

군집화는 데이터에서 유용한 정보를 추출하고 유사한 항목을 그룹화 함으로써 데이터를 이해하는 중요한 기술입니다. 군집화의 성능을 평가하는 것은 해당 알고리즘의 품질을 이해하고 개선하기 위해 중요합니다. 이 포스트에서는 R 언어를 사용하여 군집화 알고리즘의 성능을 평가하는 방법에 대해 소개하겠습니다.

내부 성능평가

내부 성능평가는 동일한 데이터를 사용하여 평가지표를 계산하는 방법으로, 데이터에 내재된 구조를 활용합니다.

실루엣 지수

실루엣 지수는 개별 데이터포인트의 군집 내부의 거리가 군집 간의 거리보다 얼마나 가까운지를 측정하는 지표입니다. cluster 패키지의 silhouette() 함수를 사용하여 계산할 수 있습니다.

예시 코드:

library(cluster)
silhouette_avg <- silhouette(iris[, -5], kmeans(iris[, -5], 3))$avg.width

엘보우 방법

엘보우 방법은 군집화 알고리즘의 성능을 계산하여 최적의 군집 수를 결정하는 방법입니다. 군집 내 오차제곱합(SSE)이 감소하는 비율이 급격하게 감소하는 지점을 찾습니다.

예시 코드:

wss <- (nrow(iris) - 1) * sum(apply(iris[, -5], 2, var))
for (i in 2:15) wss[i] <- sum(kmeans(iris[, -5], centers=i)$withinss)

외부 성능평가

외부 성능평가는 독립된 라벨 정보를 사용하여 군집화의 결과를 평가하는 방법입니다. Adjusted Rand Index(ARI) 및 Normalized Mutual Information(NMI)를 주로 사용합니다.

Adjusted Rand Index(ARI)

ARI는 군집화 결과와 실제 라벨 정보 간의 일치도를 측정하는 지표로, 1에 가까울수록 좋은 결과를 나타냅니다.

Normalized Mutual Information(NMI)

NMI는 정보 이론에서 차용한 개념으로, 두 분포간에 상호정보량을 측정합니다. mclust 패키지의 adjustedRandIndex()normalizedMutualInfo() 함수를 사용하여 계산할 수 있습니다.

예시 코드:

library(mclust)
true_labels <- iris[, 5]
pred_labels <- kmeans(iris[, -5], 3)$cluster
ari_score <- adjustedRandIndex(true_labels, pred_labels)
nmi_score <- normalizedMutualInfo(true_labels, pred_labels)

군집화의 성능을 평가하기 위해서는 내부와 외부 성능평가 지표를 함께 고려하는 것이 좋습니다. 내부 지표는 데이터의 분포를 기반으로 하고, 외부 지표는 실제 라벨 정보를 바탕으로 하기 때문에, 둘 다 고려하는 것이 군집화 성능을 보다 정확하게 판단하는 데 도움이 됩니다.