<Clustering>
1. K-means
(1) KMeans 함수 사용
- k : n_clusters
- n_inti : 초기값은 무작위 지정하여 결과가 조금씩 차이가 남.
- 지정된 회수 만큼 수행하여 가장 좋은 군집모델 선택
- 'auto' 데이터 크기와 군집 수에 맞게 적정하게 지정 (권장사항)
- 학습 시 x만 입력
# K means 학습
model = KMeans(n_cluster=2, n_init='auto')
model.fit(x)
# 예측
pred = model.predict(x)
(2) 클러스터 개수(k) 지정
① Inertia value : 군집화가 된 후에, 각 중심점에서 군집의 데이터 간의 거리를 합산한 값
- 값이 작을수록 군집화가 잘되어있음.
# k의 갯수에 따라 각 점과의 거리를 계산하여 적정한 k를 찾아 봅시다.
kvalues = range(1, 11)
inertias = []
for k in kvalues:
model = KMeans(n_clusters=k, n_init = 'auto')
model.fit(x)
inertias.append(model.inertia_)
# Plot k vs inertias
plt.figure(figsize = (8, 6))
plt.plot(kvalues, inertias, marker='o')
plt.xlabel('number of clusters, k')
plt.ylabel('inertia')
plt.grid()
plt.show()
② Silhouette_score (실루엣 점수) => 최소한 k가 2개 이상이어야 함.
: 1에 근접할 수록 적절 (클러스트 간 거리는 멀고, 내부의 거리는 가까움)
0에 근접 (클러스터 간 거리와 내부 거리 비슷_중첩)
-1에 근접 (클러스터링 결과 부적절)
from sklearn.metrics import silhouette_score
# 클러스터 개수에 따른 실루엣 점수를 저장할 리스트
kvalues = range(2, 11) # 최소 2개 이상이어야 함.
sil_score = []
for k in kvalues:
# KMeans 모델 생성
model = KMeans(n_clusters=k, n_init = 'auto')
# 모델을 학습하고 예측
pred = model.fit_predict(x)
# 실루엣 점수 계산
sil_score.append(silhouette_score(x, pred))
# 실루엣 점수 시각화
plt.figure(figsize = (8, 6))
plt.plot(kvalues, sil_score, marker='o')
plt.xlabel('n_clusters')
plt.ylabel('Silhouette Score')
plt.grid()
plt.show()
'머신러닝 > 비지도학습' 카테고리의 다른 글
[머신러닝(비지도)] #3 - Anomaly Detection (이상 탐지) (2) | 2024.10.22 |
---|---|
[머신러닝(비지도)] #1 - 차원축소_241021 (5) | 2024.10.21 |