클러스터링에서 최적의 군집 개수(k)를 찾는 것은 중요한 문제임
K-means는 비지도 학습 알고리즘으로 데이터를 k개의 클러스터로 나눔
엘보우 기법은 WCSS(Within-Cluster Sum of Squares, 군집 내 분산)를 기준으로 최적의 k를 찾는 방법임
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.cluster import KMeans
from yellowbrick.cluster import KElbowVisualizer
iris = load_iris()
X = iris.data
kmeans = KMeans(random_state=42)
plt.figure(figsize=(12, 6))
elbow_kmeans = KElbowVisualizer(kmeans, k=(1, 11))
elbow_kmeans.fit(X)
elbow_kmeans.show()

그래프에서 k=3에서 WCSS 감소율이 급격히 줄어드는 것을 확인할 수 있음
실루엣 스코어는 클러스터링 품질을 평가하는 지표임
from sklearn.metrics import silhouette_score
silhouette_scores = []
for k in range(2, 11):
kmeans = KMeans(n_clusters=k, random_state=42)
kmeans.fit(X)
score = silhouette_score(X, kmeans.labels_)
silhouette_scores.append(score)
plt.figure(figsize=(12, 6))
plt.plot(range(2, 11), silhouette_scores, marker='o', linestyle='--', color='b')
plt.title('Silhouette Score for Different k values')
plt.xlabel('Number of Clusters (k)')
plt.ylabel('Silhouette Score')
plt.grid(True)
plt.show()

그래프에서 k=2일 때 실루엣 점수가 가장 높고, 이후 감소하는 경향을 보임
| 엘보우 기법 | 실루엣 스코어 | |
|---|---|---|
| 기준 | WCSS(군집 내 분산) | 데이터 분포 기반 평가 |
| 목적 | 급격한 감소 구간 찾기 | 클러스터 품질 평가 |
| 단점 | 엘보우 포인트가 모호할 수 있음 | 계산량이 많음 |
| 결과 해석 | 그래프의 "꺾이는 지점" 찾기 | 점수가 가장 높은 k 선택 |
엘보우 기법에서는 k=3이 최적의 군집 개수로 선택됨
K-means 클러스터링에서 최적의 k를 찾는 것은 중요한 과정임