데이터 분석/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