본문 바로가기

Machine Learning

[Machine Learning]머신러닝Unsupervised의K-Means Clustering

K-Means Clustering

K-Means Clustering은 비지도 학습 알고리즘으로, 데이터를 그룹화(클러스터링)하는데 사용된다.

K-Means Clustering 순서

  1. 데이터 준비: 우리는 각 데이터 포인트의 위치를 나타내는 좌표를 갖고 있다..
  2. K 설정: K-Means Clustering을 시작하기 전에 클러스터의 수 K를 정해야 한다. 여기서는 우리가 2개의 그룹으로 나누고 싶다고 가정한다.
  3. 중심 초기화: 무작위로 두 개의 점(중심)을 선택하여 각각의 그룹의 중심점으로 설정한다.
  4. 할당 단계: 각 데이터 포인트를 가장 가까운 중심에 할당한다. 이를 위해 일반적으로 유클리드 거리 등의 거리 측정 방법을 사용한다.
  5. 갱신 단계: 각 그룹의 중심을 해당 그룹에 속한 데이터 포인트들의 평균으로 업데이트한다.
  6. 반복: 할당 및 갱신 단계를 반복하여 중심이 더 이상 변하지 않을 때까지 반복한다.
  7. 수렴: 중심이 더 이상 변하지 않으면 알고리즘이 수렴되었다고 간주하고 종료한다.

k 개의 그룹을 만든다. 즉, 비슷한 특징을 갖는 것들끼리 묶는것

WCSS: 클러스터 내 제곱합을 나타낸다. K-Means Clustering에서는 클러스터의 중심과 각 데이터 포인트 사이의 거리를 측정하여 이 값을 최소화하는 방향으로 클러스터를 형성한다.

 

Elbow Method

  1. 여러 개의 클러스터 수(K)에 대해 K-Means 알고리즘을 실행하고, 각각의 클러스터링 결과에 대한 WCSS 값을 계산한다.
  2. 클러스터 수(K)를 x축으로, 해당 클러스터링 결과의 WCSS 값을 y축으로 하여 그래프를 그린다.
  3. 그래프를 통해 WCSS 값이 감소하다가 어느 시점부터 급격하게 감소하는 지점이 나타난다. 이 지점이 "엘보우(elbow)" 지점이라고 불리며, 이 지점에서의 클러스터 수를 선택한다.

 

이제 코드로 작성해보자

1.na가 있는지 확인

df.isna().sum() 했을때 모두 0이 나와 na 없음

 

2.X데이터 분리

Unsupervised이므로 X데이터만 분리한다.

X = df.iloc[ : , 1: ]

3.Label Encoding

from sklearn.preprocessing import LabelEncoder

encoder = LabelEncoder()

X['Genre']  = encoder.fit_transform(X['Genre'])

 

 

 

# 피쳐스케일링을 하지 않아도 된다.

4.KMeans  사용하기

from sklearn.cluster import KMeans

wcss = []
for i in range(1,10+1):
    kmeans = KMeans(n_clusters = i,random_state = 10)

#KMeans 객체를 생성
    kmeans.fit(X)

# KMeans 알고리즘을 사용하여 데이터 X를 클러스터링
    wcss.append(kmeans.inertia_)

# 클러스터링 결과의 WCSS 값을 wcss 리스트에 추

 

 

 

 

 

5.엘보우 메소드 확인하기

엘보우 메서드

import matplotlib.pyplot as plt

plt.plot(wcss)
plt.show()

6.Group화 하기

엘보우 메소드 확인하고 클러스터를 5로 정하였다.

kmeans에 X를 학습시키고 그룹화된 컬럼을 Group에 저장했다. 

kmeans = KMeans(n_clusters=5, random_state=1)

y_pred = kmeans.fit_predict(X)

df['Group'] = y_pred