개발/머신러닝

파이썬. 머신러닝 - K-means, Elbow Method

웅'jk 2022. 12. 2. 17:42

Kmeans 는 unsupervised learning 이다

 

지금까지는 문제 - 결과를 통해 학습한 내용으로 결과를 도출해냈다면

 

이제는 결과가 없는 문제만 가지고 쌩으로 도출해내야한다.

 

그 방법 중 하나로 kmeans 방식으로 임의의 값을 주어지고 구역을 나눠 그 구역안에 값들의 

평균을 구해 값을 재지정하여 데이터의 이동을 파악하는 방식이다.

위 사진처럼 빨간점 , 푸른점 을 임의로 두고 두 값의 기울기가 90도인 선을 그어 구역을 나눈뒤

구역별 데이터의 평균을 구한 뒤 또다시 그 두 값의 기울기로 구역을 나눈다.

이러한 과정을 계속 반복하여 데이터의 이동이 없을 때 구역을 확정 짓고 결과값을 내놓게 된다.

 

# set lib
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# data read
df = pd.read_csv('../data/Mall_Customers.csv')

# set X -> y는 존재할수가 없다.
X = df.iloc[:,3:]

# 모델링
from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=3 , random_state=2 )

# predict
y_pred = kmeans.fit_predict(X)

 

Elbow MeThod 란 ? 

K-means의 n_cluster 값으로 어떤 값인게 좋은지 알아보는 방법이다.

 

wcss = list()
for k in np.arange(1,10+1) :
    kmeans=KMeans(n_clusters=k , random_state=5)
    kmeans.fit(X)
    wcss.append(kmeans.inertia_)
# 반복문을 통해 클러스터에 0~ 원하는 수만큼을 넣어 모든 결과값을 확인한다.

# 차트로 나타내어 기울기가 급감하는 구간이 보인다면 그 이상 그룹을 나누는 것은
# 의미가 없다.
plt.plot(np.arange(1,10+1) , wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of Clusters')
plt.ylabel('WCSS')
plt.show()

위 차트는 5개부터는 그룹의 의미가 크게 없기 때문에 n_cluster 값을 5로하는게 가장 좋은 선택이라

할 수 있다. 물론 꼭 이 값으로만 하라는 법은 없기 때문에 결과가 이렇다 정도로만 생각하자.