본문 바로가기

TIL(Today I Learned)

K-means

클러스터링 (군집화)

: 명확한 분류 기준이 없는 상황에서 비슷한 데이터들 끼리 묶어 주는 분류 알고리즘 

 

 

K-means 

: k개의 클러스터 개수가 주어져있을 때, 주어진 데이터들을 k개의 클러스터로 묶는 중심기반 알고리즘 

  • 임의로 지정한 k개의 중심점이 새로운 label역할을 한다. 
  • 중심점 간의 cost를 최소화 하는 방향으로 계속 update를 해주면서 그룹화를 수행한다. 

k-means알고리즘 작동순서

  1. 초기점 K를 설정한다. 
    • K : 중심점
    • 묶일 그룹의 수와 같다. 
    •  중심점(centroid)간의 평균 거리가 많이 차이나지 않는 k를 선택해야한다.
    • 적절한 k를 선택하기 위해 elbow curve를 사용한다.
  2. cluster를 부여한다
    • K개의 중심점과 개별 데이터간의 거리를 측정한다
    • 가장 가까운 중심점으로 clustering해준다.
  3. 중심점을 업데이트한다.
    • cluster된 데이터들의 평균값으로 중심점을 업데이트해준다. 
  4. 최적화를 수행한다
    • 2번, 3번 과정을 반복한다.
    • 반복 수행을 해도 변화가 없을 것 같은 적당한 iterationt수를 지정해주고 중단한다. 

 

points, labels = make_blobs(n_samples=100, centers=5, n_features=2, random_state=135)

make_blobs 함수는 다음과 같은 매개변수를 사용합니다:

  • n_samples: 생성할 데이터 포인트의 총 개수를 지정합니다.
  • n_features: 각 데이터 포인트가 가질 특성(feature)의 개수를 지정합니다. 이 예에서는 2차원 데이터를 생성하므로 2로 설정되었습니다.
  • centers: 생성할 클러스터의 개수를 지정합니다. 각 클러스터는 데이터 포인트가 몰려 있는 중심을 나타냅니다.
  • random_state: 무작위성을 제어하기 위한 시드(seed) 값으로, 동일한 시드를 사용하면 항상 동일한 데이터가 생성됩니다.

sklearn을 사용하여 kmeans 실습하기 

 

# Pandas, Numpy, Matplotlib, Seaborn을 호출
import pandas as pd
import matplotlib.pyplot as plt
plt.style.use('default')
import seaborn as sns

# customer_data 변수를 만들고 customer_for_cluster.csv 파일의 데이터를 할당
customer_data = pd.read_csv('~/aiffel/data_analysis_basic/data/customer_for_cluster.csv')

# customer_data의 head 값 확인하기
customer_data.head()

# customer_data의 정보 확인하기
customer_data.info()

# sklearn라이브러리 중 필요한 모듈을 호출
from sklearn.cluster import KMeans
from sklearn import preprocessing

# customer_data 중 Level_score와 Time_score를 골라내 temp_var로 저장
temp_var = customer_data[['Level_score','Time_score']]
temp_var

# sklearn의 preprocessing을 이용해 temp_var의 각 값들을 정규화
temp_var = preprocessing.StandardScaler().fit(temp_var).transform(temp_var)
temp_var

# 군집분석을 하기 위해 Kmeans 변수를 만들고 군집분석 초기 모델을 할당
Kmeans = KMeans(n_clusters=5, # 군집 개수는 5개 도출
                init='k-means++', # 모델 초기화 방법은 K-means++ 사용
                n_init=10, # 모델의 초기화 횟수 (초기화-학습 10회 반복 후 최선의 결과 선택)
                verbose=True, # 군집분석 수행 중 각 단계별 메세지 출력 여부
                max_iter=100, # 최대 반복 횟수
                random_state=1111 # 랜덤시드 고정
                               )

# 할당된 군집분석 모델에 temp_var를 적용(fit)
Kmeans.fit(temp_var)

# customer_data의 Cluster열의 각 고유값 계산하기
customer_data['Cluster'].value_counts()

'TIL(Today I Learned)' 카테고리의 다른 글

[python] 파이썬 슬라이싱 기본 개념  (0) 2024.09.26
모델 저장과 Callback  (0) 2023.10.13
클러스터링  (0) 2023.09.15
정보이론 / 엔트로피  (0) 2023.09.13
MLE / MAP  (0) 2023.09.13