데이터 분석/Python

[Sklearn] 군집화

eunki 2021. 5. 21. 16:51
728x90

1. K-Means Clustering

군집화에서 가장 대중적으로 사용되는 알고리즘이다.

centroid라는 중점을 기준으로 가장 가까운 포인트들을 선택하는 군집화 기법이다.

사용 예시) 스팸 문자 분류, 뉴스 기사 분류

 

 

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3)

cluster_data = kmeans.fit_transform(df.loc[:, 'sepal length (cm)':'petal width (cm)'])

 

 

 

 

 

 

2. DBSCAN (밀도 기반 클러스터링)

DBSCAN (Density-based spatial clustering of applications with noise)

밀도가 높은 부분을 클러스터링 하는 방식이다.

어느 점을 기준으로 반경 x내에 점이 n개 이상 있으면 하나의 군집으로 인식하는 방식이다.

KMeans 에서는 n_cluster의 갯수를 반드시 지정해 주어야 하나, DBSCAN에서는 필요없다.

기하학적인 clustering도 잘 찾아낸다.

 

 

from sklearn.cluster import DBSCAN

dbscan = DBSCAN(eps=0.6, min_samples=2)

dbscan_data = dbscan.fit_predict(df.loc[:, 'sepal length (cm)':'petal width (cm)'])

 

 

 

 


실루엣 스코어 (군집화 평가)

  • 클러스터링의 품질을 정량적으로 평가해 주는 지표이다.
  • 실루엣 스코어는 각 샘플의 클러스터 내부 거리의 평균 (a)와 인접 클러스터와의 거리 평균 (b)을 사용하여 계산한다.
  • 한 샘플의 실루엣 스코어는 (b - a) / max(a, b) 이다.
  • 가장 좋은 값은 1이고 최악의 값은 -1이다.
  • 0 근처의 값은 클러스터가 오버랩되었다는 것을 의미한다.
  • 음수 값은 샘플이 잘못된 클러스터에 배정되었다는 것을 의미한다.

 

from sklearn.metrics import silhouette_samples, silhouette_score

score = silhouette_score(data_scaled, kmeans.labels_)
score  # 0.44366157397640527

samples = silhouette_samples(data_scaled, kmeans.labels_)
samples[:5]  # array([0.73318987, 0.57783809, 0.68201014, 0.62802187, 0.72693222])

 

 

 

빨간 점선은 평균 실루엣 계수를 의미한다.

 

 

 

 

728x90