- 오라클
- 빅데이터분석기사
- Oracle
- SQL
- 파이썬
- 빅분기
- 네이버부스트캠프
- 코딩테스트
- 데이터베이스
- boostcoures
- 프로그래머스
- python
- 이기적
- 이것이 취업을 위한 코딩테스트다 with 파이썬
- 정보처리기사
- DB
- 인공지능기초다지기
- 코딩테스트 python
- AI 플랫폼을 활용한 데이터 분석
- boostcourse
- [멀티잇]데이터 시각화&분석 취업캠프(Python)
- Machine Learning
- PY4E
- r
- 난생처음 R코딩&데이터 분석 저서
- 빅데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- 기초다지기
- 데이터 분석 기반 에너지 운영 관리자 양성 및 취업과정
- Ai
- 부스트코스
- Today
- Total
매일공부
[Machine Learning] 군집분석; Hierarchical clustering 본문
군집 (clustering)
[비지도 학습]
- 데이터 간 유사성 측정해서 상호 유사성이 높은 대상을 동일 집단으로 분류하는 기법
> 유사성 = 유클리드 거리 - 타당성 검증 방법x >> 군집간의 거리, 군집의 분산도, 군집의 지름 등을 종합적으로 고려하여 평가
- 최적의 군집 모양과 개수 : (군집 간 분산 = 최대) & (군집 내 분산 = 최소)
군집 분석 활용
- 홍보분야 - 고객 세분화
- 의학 분야 - 특정 질병에 대한 공간 군집 분석을 통해 질병의 분포 면적과 확산 경로 등을 파악하는 역학 조사
- 이상치 탐색
군집화 알고리즘 종류
- 계층적(탐색적) 군집분석
- 데이터 집합을 계층적으로 분해
- Hierarchical clustering
- 데이터 집합을 계층적으로 분해
- 비계층적(확인적) 군집분석
- 분할 기법
- 각 그룹은 정확히 하나의 그룹에 속하는 데이터를 적어도 하나는 가지고 있어야한다는 규칙을 가지고 분할
- K-means, DBSCAN 등
계층적 군집 방식 Hierarchical clustering
- Tree기반 모델
- 가까운 집단부터 순차적, 계측적으로 차근차근 묶어 나가는 방식
- 군집 내 군집이 속할 수 있는 중복 허용
- 3차원 이상의 군집에서도 dendogram을 통해 직관적인 cluster 형성이 가능
- 덴드로그램 (Dendrogram) : 표본들이 군을 형성하는 과정을 나타내는 나무 형식의 그림
- 군집개수 정하지 않아도 수행 가능
학습과정
- 모든 개체들 사이의 거리에 대한 유사도 행렬 계산
- 거리가 인접한 관측치끼리 cluster 형성
- 유사도 행렬 업데이트
거리 측정 방법
- L1 norm (manhattan distance)
- L2 norm (euclidean distance)
- mahalanobis (feature간의 공분산 행렬을 고려한 거리)
- corr distance (상관계수 높을수록 거리 짧게)
[응집형] cluster 간의 거리 측정 방법
>> 상향식(Bottom-up) 방식
- single linkage (군집 간 element끼리의 거리 중 min을 군집 간 거리로 설정)
- complete linkage (군집 간 element끼리의 거리 중 max를 군집 간 거리로 설정)
- average linkage (군집 간 element끼리의 모든 거리를 average)
- centroid (군집의 centroid끼리의 거리 = 중앙점 비교)
- ward ( 두 군집 간 제곱합 - (군집 내 제곱합의 합) ) : 병합되었을 때, 증가되는 변동성 양을 기준으로 하는 방법
[분리형] cluster 간의 거리 측정 방법
>> 하향식(Top-down) 방식
- 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
- 모든 샘플이 각자 하나의 클러스터로 시작 > 조건 부합 > 서로 병합 > 반복 > 종료조건 도달까지 군집 커짐
- 강력하고 유연함
- 한번 군집 형성 > 군집에 속한 개체가 다른 군집으로 이동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
* 내용참고&출처 : 태그의 수업을 복습 목적으로 정리한 내용입니다.
'IT > ML' 카테고리의 다른 글
[Machine Learning] 오차행렬 - 모델 평가&분류 확인 (0) | 2022.11.20 |
---|---|
[Machine Learning] 비계층적 군집분석; K-means, DBSCAN (0) | 2022.11.18 |
[Machine Learning] Sampling (0) | 2022.11.11 |
[sklearn] kNN(k-Nearest Neighbors) (0) | 2022.11.11 |
[Machine Learning] Boost(AdaBoost, GBM, XGBoost, LightGBM, Catboost, Stacking) (0) | 2022.11.11 |