본문 바로가기

머신러닝

K-Means의 WCSS와 Elbow Method

K-Means 알고리즘의 k를 정하는 방법

 

WCSS(Within Clusters Sum of Squares)

1) 적절한 k 값(몇 개 그룹)을 찾기 위해서는 WCSS 값을 확인해야 한다.
2) 따라서 k는 1부터 10까지 다 수행해보고 
3) WCSS 값을 확인해 본다.
4) 이때 엘보우 메소드를 이용해서 최적의 K 값을 찾도록 한다.

 

wcss = []
for k in range(1, 11) : 
    kmeans = KMeans(n_clusters= k, random_state=42)
    kmeans.fit(X)
    wcss.append(kmeans.inertia_)

 

plt.plot(range(1, 11), wcss)
plt.title('Thew Elbow Method')
plt.xlabel('Number of Clusters')
plt.ylabel('WCSS')
plt.show()

 

군집수 결정

 

찾은 k 값으로 KMeans 알고리즘을 통해 k개의 그룹을 만든다.

 

kmeans = KMeans(n_clusters=5, random_state=42)
y_pred = kmeans.fit_predict(X)
y_pred

 

 

새로운 컬럼 'Group'을 만든 후, 예측한 군집화 데이터를 넣어준다.

 

df['Group'] = y_pred
df

 

 

plt.figure(figsize=[12,8])
plt.scatter(X.values[y_pred == 0, 0], X.values[y_pred == 0, 1], s = 100, c = 'red', label = 'Cluster 1')
plt.scatter(X.values[y_pred == 1, 0], X.values[y_pred == 1, 1], s = 100, c = 'blue', label = 'Cluster 2')
plt.scatter(X.values[y_pred == 2, 0], X.values[y_pred == 2, 1], s = 100, c = 'green', label = 'Cluster 3')
plt.scatter(X.values[y_pred == 3, 0], X.values[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4')
plt.scatter(X.values[y_pred == 4, 0], X.values[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroids')
plt.title('Clusters of customers')
plt.xlabel('Annual Income (k$)')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()