Machine Learning

Hierarchical Clustering - Dendrogram, 최적의 클러스터 갯수 찾기

yugyeong 2022. 12. 5. 12:31

 

Dendrogram, 최적의 클러스터 갯수 찾기

 

아래의 데이터프레임 Annual Income (k$), Spending Score (1-100) 컬럼을 변수 X 로 두고 Dendrogram 을 그려볼 것이다.

 

 

필요한 라이브러리를 임포트 해준 후 , 

덴드로그램을 이용하여서 데이터들을 군집화 한 것이다.

아래의 덴드로그램은 너무 지저분 하기 때문에, 큰 영역으로 클러스터를 다섯개까지만 분류 할 것이다.

 

 

import scipy.cluster.hierarchy as sch

sch.dendrogram( sch.linkage(X, method= 'ward') )
plt.title('Dendrogram')
plt.xlabel('Customers')
plt.ylabel('Eculidean Distance')
plt.show()

 

 

필요한 라이브러리를 임포트 해준 후,

변수 hc 에 인공지능 AgglomerativeClustering 을 저장해준다. 괄호 안에 클러스트 갯수는 위 차트를 보고 정한 5 로 지정해준다.

fit_predict (X) 를 이용하여서 변수 y_pred 에 저장을 해주었다.

데이터프레임에 새로운 컬럼을 생성하여 변수 y_pred 의 값들을 저장해준 것이다.

 

 

from sklearn.cluster import AgglomerativeClustering

hc = AgglomerativeClustering(n_clusters= 5)

y_pred = hc.fit_predict(X)

df['Group'] = y_pred

 

 

 

차트를 그려서 그룹화한것을 확인해보면 아래와 같은 결과가 나온다.

 

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.title('Clusters of customers')
plt.xlabel('Annual Income (k$)')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()