clustering : 그룹으로 나누는 작업
1. k-means
데이터 포인트를 가장 가까운 클러스터 중심에 할당

from sklearn.cluster import KMeans
X,y = make_blobs(random_state=1)
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
print(kmeans.labels_) #레이블 확인 가능
[1 0 0 0 2 2 2 0 1 1 0 0 2 1 2 2 2 1 0 0 2 0 2 1 0 2 2 1 1 2 1 1 2 1 0 2 0
0 0 2 2 0 1 0 0 2 1 1 1 1 0 2 2 2 1 2 0 0 1 1 0 2 2 0 0 2 1 2 1 0 0 0 2 1
1 0 2 2 1 0 1 0 0 2 1 1 1 1 0 1 2 1 1 0 0 2 2 1 2 1]
predict 메소드 존재
실패하는 경우
복잡한 형태면 구분 잘 못함
1. 모든 클러스터의 반경이 똑같다고 가정 -> 밀도가 다르면 잘 구분 못함
2. 모든 방향이 똑같이 중요하다고 가정 -> 대각선으로 늘어져 있으면 잘 구분 못함
PCA는 분산이 가장 큰 방향을 찾으려고 하고
NMF는 극단 또는 일부분에 상응되는 중첩할 수 있는 성분을 찾는다고 배움
KMeans는 클러스터 중심으로 각 데이터 포인트를 표현 -> 즉 포인트가 클러스터 중심, 하나의 성분으로 표현됨 == 벡터 양자화
장점 : 쉬움, 빠름, MiniBatchKMeans도 제공
단점 : 무작위 초기화를 사용하여 출력이 난수 초깃값에 따라 달라짐, 클러스터 개수를 지정해야함
개선
2. 병합 군집 agglomerative clustering
시작할 때 각 포인트를 하나의 클러스터로 지정, 가장 비슷한 두 클러스터를 합쳐나감
종료조건 : 클러스터 개수
linkage option
ward : 대부분 잘맞음 분산을 가장 작게 증가시키는 두 클러스터 합침
average
complete

새로운 포인트에 대해서는 예측못함-> predict 메서드 없음
대신 fit_predict 존재 : fit메서도에서 찾은 labels_를 반환하는 함수
from sklearn.cluster import AgglomerativeClustering
X,y = make_blobs(random_state=1)
agg = AgglomerativeClustering(n_clusters=3)
assignment = agg.fit_predict(X)
병합 군집이 적절한 클러스터 개수를 선택하는데 도움을 줌
3. 계층적 군집 hierarchical clustering
병합군집은 계층적 군집을 만듦
다차원 데이터 셋은 덴드로그램으로 시각화 처리
from scipy.cluster.hierarchy import dendrogram, ward
X, y = make_blobs(random_state=0, n_samples=12)
linkage_array = ward(X)
dendrogram(linkage_array)
가지의 길이는 합쳐진 클러스터가 얼마나 멀리 떨어져 있는지를 보여줌
4. DBSCAN
주요 장점 : 클러스터를 미리 지정할 필요 없음
복잡한 형태도 가능 그러나 좀 느림
특성 공간에서 가까이 있는 데이터가 많아 붐비는 지역의 포인트를 찾음 -> 밀집 지역
매개변수 : eps, min_samples
eps 거리 안에 데이터가 min_samples만큼 들어 있으면 이를 핵심 샘플로 분류
시작할 때 무작위로 포인트를 선택하고 eps거리 안의 모든 포인트를 찾음
eps거리 안에 있는 포인트 수가 min보다 작으면 == 어떤 클래스에도 속하지 않으면 noise로 분류

분석의 목적이 군집화라면 잡음점을 무시하거나 제거하면 되구요, 만약 분석의 목적이 군집화가 아니라 anomaly detection, outlier detection 이라면 잡음 점(noises)들이 주요 관심사가 되겠습니다.
출처 : https://yganalyst.github.io/ml/ML_clustering/
새로운 데이터 예측 불가능 fit_predict 존재
적절한 eps 쉽게 찾으려면 standardscaler나 MinMaxScaler 사용
dbscan = DBSCAN(min_samples=3, eps=15)
군집 알고리즘 비교와 평가
1. 타깃 값으로 군집 평가
ARI(adjusted rand index), NMI
from sklearn.metrics.cluster import adjusted_rand_score
실수 : accuracy_score를 사용하는것
2. 타깃 값없이 군집 평가
from sklearn.metrics.cluster import silhouette_score
성능 안좋음
모양이 복잡하면 평가 잘 안됨
견고성 기반 : 데이터에 잡음 포인터를 추가하거나 여러가지 매개변수 설정으로 알고리즘을 실행하고그 결과를 비교해도 결과가 일정하다면 신뢰할만하다
아직 sklearn에는 구현안됨
요약
k-means, 병합군집 : 클러스터 개수를 지정할 수 있음
DBSCAN : eps매개변수를 사용하여 클러스터 크기를 간접적으로 조절 가능
탐색적 데이터 분석과 데이터 전처리에 사용가능
'머신러닝' 카테고리의 다른 글
| 모델 평가와 성능 향상 (0) | 2021.08.05 |
|---|---|
| 데이터 표현과 feature engineering (0) | 2021.07.31 |
| 차원축소, 특성 추출, 매니폴드 학습 (0) | 2021.07.22 |
| 비지도 학습(데이터 전처리와 스케일 조정) (0) | 2021.07.22 |
| 지도학습 총정리 (0) | 2021.07.21 |