본문 바로가기
Python/MachineLearning

Hierarchical Clustering - 개념

by 하니__ 2024. 4. 16.

 

 

하이어라키컬 클러스터링은 기본적으로

 

K-means와 유사하다

 

 

 

 

이러한 데이터가 있을때

 

 

 

한 그룹 한그룹씩 묶어 나가면서 마지막에 하나의 그룹이 될때까지 그룹화를 한다

 

 

 

 

클러스터로 묶는 기준은 어떤 점에 중점을 두느냐에 따라 다르다

 

 

 

 

Dendrogram

 

그래서 이 방법을 덴드로그램으로 표현하는데

 

 

 

위 그림처럼 한 그룹이 지어질때마다

 

그 거리를 y축으로 표현하여 묶어주다가

 

한 그룹으로 묶어진 뒤에

 

 

사람이 멀어지는 거리를 보고

몇개의 그룹으로 나눌것인지 판단하는 시스템이다

 

아래에있는 묶음들은 거리가 가까워서 짧지만 마지막에 묶이는 2그룹은

 

거리가 멀기때문에 길게 나타난다

보통 그 곳을 잘라 두 그룹으로 나타낼 수 있겠다

 

 

 

 

 

import scipy.cluster.hierarchy as sch
 
sch.dendrogram( sch.linkage(X , method= 'ward') )
plt.title('Dendrogram')
plt.xlabel('Customers')
plt.ylabel('Distances')
plt.savefig('dendrogram.png')
plt.show()

 

method= 는 그룹화할때 기준을 어떻게 할 것이냐 라는 뜻이며 ward가 제일 일반적

 

이렇게 표시가 가능하겠다

 

from sklearn.cluster import AgglomerativeClustering

 

AgglomerativeClustering 는 병합적군집이라는 뜻

 
hc = AgglomerativeClustering(n_clusters = 6 )
 
y_pred = hc.fit_predict(X)
df['Group'] = y_pred
 
 

이렇게 그룹화가 가능하다

 
 

 

 

 

K-Means와의 차이점

 

 

 

 

이런 덴드로그램을 보고 2로 그룹을 지었을때와

from sklearn.cluster import AgglomerativeClustering
 
hc = AgglomerativeClustering(n_clusters=2)
 
y_pred = hc.fit_predict(X)
 
df['Group']= y_pred

 

 

이번엔 K-Means와 비교해보자

from sklearn.cluster import KMeans
wcss = []
for i in range(1, 5+1):
    kmeans = KMeans(n_clusters= i , random_state= 5)
    kmeans.fit(X)
    wcss.append( kmeans.inertia_ ) 
wcss
 
[74525310.2, 14500293.600000001, 5387740.75, 2187714.5, 854349.4166666667]
 
plt.plot( range(1,5+1) , wcss)
plt.show()

 

K-means에서도 2그룹을 지었을때가 크게 달라진다

 

kmeans = KMeans(n_clusters=2, random_state=5)
 
y_pred2 = kmeans.fit_predict(X)
 
 
df['Group2'] = y_pred2

 

 

 

 

데이터가 적어서 그럴진 몰라도 같은 그룹으로 지어진것을 볼 수 있다

 

데이터가 수십만개 수백만개라면 조금씩 조금씩 다를 수도 있겠지만

 

데이터가 적다면 K-means와는 크게 차이가 없다

'Python > MachineLearning' 카테고리의 다른 글

Time Series Data forecasting Prophet  (0) 2024.04.19
K-Means Clustering - 개념 + WCSS  (0) 2024.04.15
Decision Tree 의사결정 트리 - 개념  (0) 2024.04.15
Support Vector Machine - 개념  (0) 2024.04.15
K - Nearest Neighbor - 개념  (0) 2024.04.15