본문 바로가기

Machine Learning

Machine Learning - Hierarchical Clustering (Dendrogram)

반응형
Hierarchical Clustering

 

 

 

 

 

 

클러스터로 묶는 방법은?

 

거리를 측정해서 묶는다.

 

 

묶인 클러스터를  점 하나로 보고

 

반복하여 가까운것을 묶는다.

 

 

한 덩어리로 나올때 까지 클러스터링 한다

 

 

 

 

 

 

 

Dendrogram

 

덴드로그램은 개체 간의 계층적 관계를 보여주는 다이어그램이다.

 

가장 일반적으로 계층적 클러스터링의 출력으로 생성됩니다 .

 

덴드로그램의 주요 용도는

 

개체를 클러스터에 할당하는 가장 좋은 방법을 찾는 것이다.

 

아래 덴드로그램은 왼쪽에 표시된 6개 관측치 의 계층적 클러스터링을 보여준다 .

 

따라서 덴드로그램은 거리 행렬의 요약이다.

 

 

덴드로그램을 해석하는 핵심은 두 개체가 함께 결합되는 높이에 초점을 맞추는 것

 

위의 예에서 E와 F를 연결하는 링크의 높이가 가장 작기 때문에 가장 유사함을 알 수 있다.

 

다음으로 가장 유사한 두 개체는 A와 B이다.

 

 

 

클러스터에 관측치 할당

 

관측치는 덴드로그램에 수평선을 그려 클러스터에 할당된다.

 

아래 예시에는 두 개의 클러스터가 있습니다.

 

하나의 클러스터는 A와 B를 결합하고

 

두 번째 클러스터는 C, D, E, F를 결합합니다.

 

 

Dendrogram 출처 : https://www.displayr.com/what-is-dendrogram/

 

 

import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

X = df.iloc[ : , 3 :]

 

Dendrogram을 그리고 최적의 클러스터 갯수를 찾아보자

 

 

import scipy.cluster.hierarchy as sch

plt.figure(figsize=[12,8])
sch.dendrogram(sch.linkage(X, method='ward'))
plt.title('Dendrogram')
plt.xlabel('Customers')
plt.ylabel('Eculidean Distances')
plt.show()

 

 

Training the Hierarchical Cluster model

 

 

from sklearn.cluster import AgglomerativeClustering

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

 

 

 

그루핑 정보를 확인

 

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()

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

반응형