매일공부

[Machine Learning] 군집분석; Hierarchical clustering 본문

IT/ML

[Machine Learning] 군집분석; Hierarchical clustering

aram 2022. 11. 17. 15:16

 

군집 (clustering)

[비지도 학습]

  • 데이터 간 유사성 측정해서 상호 유사성이 높은 대상을 동일 집단으로 분류하는 기법
     > 유사성 = 유클리드 거리
  • 타당성 검증 방법x  >> 군집간의 거리, 군집의 분산도, 군집의 지름 등을 종합적으로 고려하여 평가
  • 최적의 군집 모양과 개수 : (군집 분산 = 최대) & (군집 분산 = 최소)

군집 분석 활용

  • 홍보분야 - 고객 세분화
  • 의학 분야 - 특정 질병에 대한 공간 군집 분석을 통해 질병의 분포 면적과 확산 경로 등을 파악하는 역학 조사
  • 이상치 탐색

군집화 알고리즘 종류

  1. 계층적(탐색적) 군집분석
    • 데이터 집합을 계층적으로 분해
    • Hierarchical clustering
  2. 비계층적(확인적) 군집분석
    • 분할 기법
    • 각 그룹은 정확히 하나의 그룹에 속하는 데이터를 적어도 하나는 가지고 있어야한다는 규칙을 가지고 분할
    • K-means, DBSCAN

https://velog.io/@lifeisbeautiful/ 군집 분석 Clustering Analytic

 

계층적 군집 방식 Hierarchical clustering

  • Tree기반 모델
  • 가까운 집단부터 순차적, 계측적으로 차근차근 묶어 나가는 방식
  • 군집 내 군집이 속할 수 있는 중복 허용
  • 3차원 이상의 군집에서도 dendogram을 통해 직관적인 cluster 형성이 가능
  • 덴드로그램 (Dendrogram) : 표본들이 군을 형성하는 과정을 나타내는 나무 형식의 그림
  • 군집개수 정하지 않아도 수행 가능

학습과정

  1. 모든 개체들 사이의 거리에 대한 유사도 행렬 계산
  2. 거리가 인접한 관측치끼리 cluster 형성
  3. 유사도 행렬 업데이트

거리 측정 방법

  • L1 norm (manhattan distance) 
  • L2 norm (euclidean distance) 
  • mahalanobis (feature간의 공분산 행렬을 고려한 거리) 
  • corr distance (상관계수 높을수록 거리 짧게)

[응집형] cluster 간의 거리 측정 방법

>> 상향식(Bottom-up) 방식

  1. single linkage (군집 간 element끼리의 거리 중 min을 군집 간 거리로 설정) 
  2. complete linkage (군집 간 element끼리의 거리 중 max를 군집 간 거리로 설정) 
  3. average linkage (군집 간 element끼리의 모든 거리를 average
  4. centroid (군집의 centroid끼리의 거리 = 중앙점 비교)
  5. ward ( 두 군집 간 제곱합 - (군집 내 제곱합의 합) ) : 병합되었을 때, 증가되는 변동성 양을 기준으로 하는 방법

출처 https://joyfuls.tistory.com/64
출처 https://heung-bae-lee.github.io/2020/06/04/machine_learning_20/

[분리형] cluster 간의 거리 측정 방법

>> 향식(Top-down) 방식

  1. DIANA
    : 유클리드 거리가 먼 순서대로 먼저 분리하면서 각각의 개체로 분리될 때까지 수행
    : 복잡도 높음 >> 실제 많이 사용x
    : 참고링크 https://curriculum.cosadama.com/machine-learning/4-2/

 

from scipy.cluster.hierarchy import dendrogram, linkage

X = np.array([[5,3], [10,15], [15,12], [24,10], [30,30], [85,70], [71,80], [60,78], [70,55], [80,91],])
labels = range(1,11)
plt.figure(figsize=(10,7))
plt.subplots_adjust(bottom=0.1)
plt.scatter(X[:,0], X[:,1], label='True Position')
plt.show()

from scipy.cluster.hierarchy import dendrogram, linkage
linked = linkage(X, 'single')
labelList = range(1,11)
plt.figure(figsize=(10,7))
dendrogram(linked, 
    orientation='top', 
    labels=labelList, 
    distance_sort='descending', 
    show_leaf_counts=True)
plt.show()

 

* 공식문서 https://docs.scipy.org/doc/scipy/reference/cluster.hierarchy.html#module-scipy.cluster.hierarchy

 

Hierarchical clustering (scipy.cluster.hierarchy) — SciPy v1.10.1 Manual

These functions cut hierarchical clusterings into flat clusterings or find the roots of the forest formed by a cut by providing the flat cluster ids of each observation. fcluster(Z, t[, criterion, depth, R, monocrit]) Form flat clusters from the hiera

docs.scipy.org

 

계층적 병합 군집 agglometrative clustering

출처 https://kolikim.tistory.com/31

  • 모든 샘플이 각자 하나의 클러스터로 시작 > 조건 부합 > 서로 병합 > 반복 > 종료조건 도달까지 군집 커짐
  • 강력하고 유연
  • 한번 군집 형성 > 군집에 속한 개체가 다른 군집으로 이동X

 

from sklearn.cluster import AgglomerativeClustering 

  • linkage 매개변수
    • {‘ward’, ‘complete’, ‘average’, ‘single’}, default=’ward’
    • 병합전략 결정 [병합된 클러스터의 분산(ward), 샘플 간의 최대 거리(complete) 최소, 샘플 간의 평균 거리(average), 샘플 간의 최소거리(single)]
  • affinity 매개변수
    • {'minkowski', 'euclidean' 등}, default='euclidean'
    • linkage에서 사용할 거리 측정 방식
  • n_clusters 매개변수
    • 찾을 클러스터 수 지정 (최종 군집의 수)
from sklearn.cluster import AgglomerativeClustering
cluster = AgglomerativeClustering(n_clusters=2, affinity='euclidean', linkage='single') # 병합 군집 객체 생성 
cluster.fit_predict(X) # 모델 훈련 
cluster.labels_ # 클러스터 소속을 확인
array([1, 1, 1, 1, 1, 0, 0, 0, 0, 0], dtype=int64)
plt.figure(figsize=(10,7))
plt.scatter(x=X[:,0], y=X[:,1], c=cluster.labels_, cmap='rainbow')
plt.grid(False)
plt.show()

 

* 공식문서 

 

sklearn.cluster.AgglomerativeClustering

Examples using sklearn.cluster.AgglomerativeClustering: A demo of structured Ward hierarchical clustering on an image of coins A demo of structured Ward hierarchical clustering on an image of coins...

scikit-learn.org

 

* 내용참고&출처 : 태그의 수업을 복습 목적으로 정리한 내용입니다.

Comments