계층적 클러스터링은 비슷한 군집끼리 묶으면서 최종적으로 한개가 될 때 까지 묶는 클러스터 기법이다. k-means 기법이 최적으로 응집된 지점을 찾아서 데이터를 "나누는" 데 집중하는 반면 이 아이는 데이터를 "분리하는 데" 집중한다.
그러니까 이 아이는 모든 데이터셋 자체를 그냥 시작부터 하나의 클러스터로 간주하고 계산을 시작하면서 결합해 나가는 방식으로 작동하는거다. 그렇다보니...
특이점이나 비정상적인 그룹을 발견하는 데 유리하고 시각화가 편하다는 장점이 있지만 다만 컴퓨팅 소스가 많이 들어가기 때문에 데이터셋의 크기가 너무 크면 안된다!
1. 작동 방식
준비물!
d = 두 개의 데이터셋 i 와 j 사이의 거리를 측정하는 "거리 측정 지표"
D = 두 개의 클러스터 A 와 B 사이의 차이를 측정하는 d 를 기반으로 한 "비유사도 측정 지표"
를 가지고... https://ratsgo.github.io/machine%20learning/2017/04/18/HC/ 요렇게 측정합니다.
2. 예제코드
파이썬에서는 scipy.cluster.hierarchy 모듈을 이용해서 계층적 클러스터링을 할 수 있다.
요 데이터프레임을 쓰겠다
주식시장의 데이터셋을 쓸거다. 근데 형태가 일반적이지 않죠? transpose 를 써줘서 행렬전환을 해줬다! 왜냐면 각각의 데이터들을 하나의 클러스터로 간주할거니깐, 데이터로 지정해줄 애들을 행에 넣어준다.
사용한 코드는 다음과 같다. dendogram 안에 method 를 넣어도 되고, 이 코드처럼 한 번 할당해줘도 된다.
syms1 = ['AAPL', 'AMZN', 'AXP', 'COP', 'COST', 'CSCO', 'CVX', 'GOOGL', 'HD',
'INTC', 'JPM', 'MSFT', 'SLB', 'TGT', 'USB', 'WFC', 'WMT', 'XOM']
df = sp500_px.loc[sp500_px.index >= '2011-01-01', syms1].transpose()
Z = linkage(df, method='complete')
print(Z.shape)
fig, ax = plt.subplots(figsize=(5, 5))
dendrogram(Z, labels=list(df.index), color_threshold=0)
plt.xticks(rotation=90)
ax.set_ylabel('distance')
plt.tight_layout()
plt.show()
그러면 이런식으로 계층적 클러스터가 시각화되어 나타난다.
중요한 건 지금 가장 중요한 파라미터인 method = 'complete' 로 되어있다는 점인데,
메서드 별 차이는 여기서 확인하자. https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.linkage.html
'데이터 과학 Data Science > 비지도학습' 카테고리의 다른 글
DBSCAN으로 클러스터링 (1) | 2022.10.04 |
---|---|
유사도 전파 Affinity Propagation 모델로 클러스터링 (1) | 2022.09.20 |
가우시안 혼합 모델로 클러스터링 (1) | 2022.09.19 |
평균 이동 알고리즘으로 데이터 클러스터링 (1) | 2022.09.19 |
k-means 알고리즘으로 패턴 찾고 평가까지 (0) | 2022.09.18 |