데이터분석/데이터 분류 및 군집화

중심 기반 군집의 K-Means 군집화 알고리즘

상선약수64 2023. 10. 6. 15:00
반응형

중심 기반 군집에 해당하는 KMeans 클러스터링 알고리즘은 n개의 중심점을 찍은 후에, 이 중심점에서 각 점간의 거리의 합이 가장 최소화가 되는 중심점 n의 위치를 찾고, 이 중심점에서 가까운 점들을 중심점을 기준으로 묶는 군집화 알고리즘 입니다. 중심 기반 군집에는 K-Means, K-Median, K-medoid 등이 있습니다. 

 

K-Means 군집화 알고리즘은
중심 기반 군집 종류 입니다. 

1. K-Means의 장점

  • 계층적으로  군집을  형성시키지  않고  개체들을  몇  개의  군집으로  구분
  • 초기에  부적절한  병합(분리)이  일어났을  때  회복 가능
  • 군집의  수를  사전에  정의
  • 개체의  수가  많을  때  유용
  • 계층적 군집법에 비하여 계산량이 적음
  • 대용량 데이터를 빠르게 처리할 수 있음

2. K-Means의 절차

1.군집의 수 k를 정의
2.초기 k개 군집의 중심 (centroid) 선택
3.  관측값들을 가장  가까운  중심의  군집에  할당
4.새로운  군집의  중심 계산
5.3, 4  과정을  중심에  변화가  없을  때까지  반복

 

3. iris 데이터를 이용한 K-Means 실습

#K-Means() 군집
from sklearn.cluster import KMeans #KMeans 모듈 가져옴
import matplotlib.pyplot  as plt
import seaborn as sns

# create model and prediction

model = KMeans(n_clusters=3,algorithm='auto') #군집수 지정(가장 중요함)

model.fit(data) #모델설정

predict = pd.DataFrame(model.predict(data)) #군집을 예측

predict.columns=['cluster']
data_result = pd.concat([data,predict],axis=1) #기존 데이터와  클러스팅한 군집을 합침

 

  • 초기의 군집의 수를 정하는 것이 매우 중요 합니다.  군집수를 구하기 위한 차트 입니다.
#초기 군집수가 매우 중요하기 때문에 군집수를 결정하기 위한 차트호 확인할 수 있음
ks =
range(1,10)

inertias = []

for k in ks:

    model = KMeans(n_clusters=k)

    model.fit(data)

    inertias.append(model.inertia_)


# Plot ks vs inertias

plt.plot(ks, inertias, '-o')

plt.xlabel('number of clusters, k')

plt.ylabel('inertia')

plt.xticks(ks)

plt.show()

https://github.com/sense64/data_viz/blob/main/h_clustering_prg1.ipynb