인공지능/머신러닝
K-평균 군집(K-means Clustering) 2
2^7
2022. 6. 9. 16:46
군집분석 성능평가
1. Import Packages and Lead Dataset
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
DF = pd.DataFrame(data = iris.data,
columns = ['sepal_length',
'sepal_width',
'petal_length',
'petal_width'])
DF.head(3)
2. K-means Modeling
- n_clusters : 군집 개수 지정
- init : 초기 중심 설정 방식(기본값)
- max_iter : 최대 반복 횟수
from sklearn.cluster import KMeans
kmeans_3 = KMeans(n_clusters = 3,
init ='k-means++',
max_iter = 15,
random_state = 2045)
kmeans_3.fit(DF)
3. Silhouette Analysis
- 실수엣 계수(Silhouette Coefficient) 측정지표
- 개별 데이터포인트가 가지는 군집화 지표
- 데이터포인트가 같은 군집 내의 다른 데이터포인트와 얼나마 가깝게 군집되어 있고
- 다른 군집에 있는 데이터포인트와 얼마나 멀게 분리되어 있는지 나타내는 지표
- 각 군집 간의 거리가 얼마나 효율적으로 분리되었는지 평가
- 다른 군집과의 거리는 멀고, 군집 내 데이터포인트 간의 거리는 가깝게 형성
3-1. DF에 'Clustering' 추가
DF['Clustering'] = kmeans_3.labels_
DF.head(3)
3-2. 실수엣 계수값
- 개별 데이터포인터들의 실수엣 계수값 계산
- 'Clustering' 정보 사용
- 'Clustering' 정보 사용
- 실수엣 계수는 -1 ~ 1 사이의 값을 가짐
- 1에 가까울 수록 근접한 다른 군집과 거리가 멀리 떨어져 있음을 의미
- 0에 가까울 수록 근접한 다른 군집과 거리가 가까운 것을 의미
- -1값은 전혀 다른 군집에 데이터포인트가 할당 되었음을 의미
from sklearn.metrics import silhouette_samples
silhouette_samples(iris.data, DF['Clustering'])
DF['Silh_Coef'] = silhouette_samples(iris.data, DF['Clustering'])
DF.head(3)
3-3. 실루엣 점수(Silhouette Score)
- 데이터포인트들의 실루엣 계수값의 평균
- 권장 실루엣 점수값
- 전체 실수엣 계수 평균이 0 ~ 1 사이의 값을 가지며, 1에 가까운 경우
- 개별 군집의 실루엣 계수 평균들이 전체 실루엣 계수 평균과 크게 차이나지 않는 경우
from sklearn.metrics import silhouette_score
silhouette_score(iris.data, DF['Clustering'])
0.5528190123564091
DF.groupby('Clustering')['Silh_Coef'].mean()
Clustering
0 0.417320
1 0.798140
2 0.451105
Name: Silh_Coef, dtype: float64
728x90