머신러닝의 비지도 학습과 K-Means에 대해서 학습하였다.
비지도학습
- 데이터의 '유사성'을 기반으로 레이블링해서 답(y)를 지정하는 작업
- 정답이 없는 문제이기 때문에 주관적인 판단이 개입된다.
- ex) 고객 특성에 따른 그룹화 (헤비 vs 일반)
K-Means Clustering 이론
1. K개의 군집 수 설정
2. 임의의 중심점 선정
3. 해당 중심점과 거리가 가까운 데이터를 그룹화
4. 데이터 그룹의 무게중심으로 중심점 이동
5. 중심점을 이동했기 때문에 다시 거리가 가까운 데이터 그룹화
6. 위 3~5 과정을 계속 반복
위 그림에선 K 군집 수를 3으로 설정하였다.
장점
- 일반적이고 적용하기 쉽다.
단점
- 거리 기반으로 가까움을 측정하기 때문에 차원이 많을 수록 정확도가 떨어진다.
- 반복 횟수가 많을 수록 시간이 느려진다.
- 몇 개의 군집(K)을 설정할 지 주관적이다.
- 평균을 이용하기 때문에(중심성) 이상치에 취약하다.
라이브러리
● sklearn.cluster.KMeans
> 함수 입력값
- n_cluster : 군집화 갯수
- max_iter : 최대 반복 횟수
> 메소드
- labels_ : 각 데이터 포인트가 속한 군집 중심점 레이블
- cluster_centers : 각 군집 중심점의 좌표
군집평가 지표
실루엣 계수란 ?
- 군집 간의 거리가 얼마나 효율적으로 분리되어 있는가 ?
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 : 측정 기준
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) # 비지도 학습이기 때문에 x 값만 넣어줘도 됨
iris_df2['target'] = iris_df['species']
iris_df2['cluster'] = kmeans.labels_ # 0, 1, 2 로 그룹화
target 컬럼에 species를 넣어 cluster와 간단하게 비교해주고
원본 데이터와 비교해보자.
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()
'TIL > 머신러닝' 카테고리의 다른 글
시계열 데이터 분석 1 (5) | 2024.09.24 |
---|---|
머신러닝| 딥러닝 (0) | 2024.08.22 |
의사결정나무, 랜덤포레스트, KNN, 부스팅 알고리즘 (1) | 2024.08.20 |
데이터분석 예측 모델링 실습 (0) | 2024.08.19 |
데이터 프로세스 : 데이터 전처리, EDA (0) | 2024.08.16 |