오랑우탄의 반란
[ML] 비지도학습 K-Means Clustering 군집화(클러스터링) 본문
반응형
지금까지 머신러닝의 대표적인 지도학습인 회귀/분류를 살펴봤는데요
머신러닝의 다른 종류인 비지도학습과 그 대표적인 예시 K-Means Clustering을 알아보겠습니다.
비지도학습이란?
데이터의 유사성을 기반으로 레이블링해서 답을 지정하는 작업
정답이 없는 문제이기 때문에 주관적인 판단이 개입됨
예시) 고객 특성에 따른 그룹화 (헤비유저 vs 일반유저)
K-Means Clustering 이론
- K개의 군집 수 설정
- 임의의 중심점 선정
- 해당 중심점과 거리가 가까운 데이터를 그룹화
- 데이터 그룹의 무게중심으로 중심점 이동
- 중심점을 이동했기 때문에 다시 거리가 가까운 데이터 그룹화
- 위 과정 3~5번 반복
장점 | - 일반적이고 적용이 쉬움 |
단점 | - 거리 기반 가까움 측정이기 때문에 차원 많을수록 정확도 떨어짐 - 반복 횟수가 많을수록 느려짐 - K 개수 선정이 주관적임 - 중심점이 평균을 이용하기 때문에 이상치에 취약함 |
라이브러리 | sklearn.cluster.KMeans | |
함수 입력값 | n_cluster | 군집화 갯수 |
max_iter | 최대 반복 횟수 | |
메소드 |
labels_ | 각 데이터 포인트가 속한 군집 중심점 레이블 |
cluster_centers | 각 군집 중심점의 좌표 |
iris 데이터로 군집화
iris_df = sns.load_dataset('iris')
# 복사본 생성
iris_df2 = iris_df[['sepal_length', 'sepal_width','petal_length','petal_width']]
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3, init= 'k-means++', max_iter=300, random_state=42)
kmeans.fit(iris_df2)
iris_df2['target'] = iris_df['species']
iris_df2['cluster'] = kmeans.labels_ # 0, 1, 2 로 그룹화
군집화를 진행했을 때 실제 원본 데이터에서는 species 가 어떻게 분류되어 있는지 간단하게 확인해줍니다.
원본 데이터는 여러 기준으로 이미 species 가 분류된 것이기 때문에 군집화 결과가 틀렸다고 할 수는 없고 참고만 하겠습니다.
plt.figure(figsize=(12,6))
plt.subplot(1,2,1)
sns.scatterplot(data= iris_df2, x='sepal_length',y='sepal_width',hue='target')
plt.title('Original')
plt.subplot(1,2,2)
sns.scatterplot(data= iris_df2, x='sepal_length',y='sepal_width',hue='cluster', palette='viridis')
plt.title('Clustering')
plt.show()
군집평가 지표 (실루엣 계수)
일반적으로 비지도학습은 정답이 없기 때문에 평가가 쉽진 않지만, 군집화가 잘 되어있는지 (다른 군집과의 거리가 멀고 동일한 군집과 가까이 있는지)는 평가가 가능합니다.
실루엣 분석 silhouette analysis
군집 내의 데이터는 잘 모여있고, 군집 간의 구분은 잘 되어있는지 측정
실루엣 계수 silhouette coefficient
b(i) - a(i) : 데이터 i에 대해 얼마나 떨어져 있는지 측정 (클수록 멀리 떨어짐)
max( a(i), b(i) ) : 단위 정규화를 위해 둘 중 큰 값으로 나눠주기
실루엣 값이 1에 가까울수록, 개별 군집의 평균값의 편차가 작을수록 좋은 군집화가 됩니다.
먼저 i에 대해 군집A 내에서 각 데이터와의 거리를 계산해줍니다.
다음 다른 군집 B, C 의 데이터와의 거리를 계산해줍니다.
군집 A 와 인접한 군집은 군집 B 이기 때문에 군집 A = a(i) 군집 B = b(i) 로 정의해서 s(i) 를 계산해줍니다.
라이브러리 | sklearn.metrics.sihouette_score | 전제 데이터의 실루엣 계수 평균 값 반환 |
함수 입력값 | X | 데이터셋 |
labels | 레이블 | |
metrics | 측정 기준 (default euclidean) |
반응형
'PYTHON > 머신러닝' 카테고리의 다른 글
[ML] 분류 모델 불균형 데이터에 대한 솔루션 Classification Model Imbalanced Data Solution (0) | 2024.08.21 |
---|---|
[ML] 딥러닝 기초이론 (+Tensorflow) (0) | 2024.08.14 |
[ML] 의사결정나무, 랜덤포레스트, KNN, 부스팅 알고리즘 (회귀/분류 모델링 알고리즘) (2) | 2024.08.14 |
[ML] 데이터분석 예측모델링 파이썬 실습 (타이타닉) (0) | 2024.08.13 |
[ML] (다중)로지스틱회귀 분류 분석 파이썬 실습 (VSCode) (0) | 2024.08.12 |