본문 바로가기

Python-머신러닝

K-Means Clustering 실습

반응형

 

 

- Nan 확인

df.isna().sum()

 

- X,y 구분

X = df.iloc[:, 3:]

ㄴ y값은 기존 데이터에 있는 것이 아니라, 우리가 그룹으로 묶어야하므로, 따로 만들어야한다. 

 

- 모델링.. 하기 전에!

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters= , random_state= )

 

- 적절한 k값(몇개 그룹)을 찾기 위해서는, WCSS값을 확인해야한다.

ㄴ 따라서 k를 1부터 10까지 다 수행해 보고나서

WCSS 값을 확인해 본다.

ㄴ 이때, 엘보우 메소드(Elbow Method)를 이용해서, 최적의 k값을 찾도록 한다.

wcss = []
for k in range(2, 10+1):
    kmeans = KMeans(n_clusters=k,random_state= 42)
    kmeans.fit(X)
    wcss.append(kmeans.inertia)
print(wcss)

inertia: WCSS 값 

 

- The Elbow Method 이용

plt.plot(range(2,10+1),wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of Clusters')
plt.ylabel('WCSS')

plt.show()

ㄴ 보아하니, 5개로 하는 게 더 나은 것 같다. 

 

- 모델링

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

 

- 훈련 및 예측

y_pred = kmeans.fit_predict(X)

 

- Grouping 한 결과를 데이터프레임에 추가해준다.

df['Group'] = y_pred

 

- 그래프로 보기

plt.figure(figsize=[12,8])
plt.scatter(X.values[y_pred == 0, 0], X.values[y_pred == 0, 1], s = 100, c = 'red', label = 'Cluster 1')
plt.scatter(X.values[y_pred == 1, 0], X.values[y_pred == 1, 1], s = 100, c = 'blue', label = 'Cluster 2')
plt.scatter(X.values[y_pred == 2, 0], X.values[y_pred == 2, 1], s = 100, c = 'green', label = 'Cluster 3')
plt.scatter(X.values[y_pred == 3, 0], X.values[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4')
plt.scatter(X.values[y_pred == 4, 0], X.values[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroids')
plt.title('Clusters of customers')
plt.xlabel('Annual Income (k$)')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()

 

전체적인 흐름

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sb

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

df.isna().sum()

X = df.iloc[:, 3:]
—------
wcss = []
for k in range(2, 10+1):
    kmeans = KMeans(n_clusters=k,random_state= 42)
    kmeans.fit(X)
    wcss.append(kmeans.inertia_)
print(wcss)

plt.plot(range(2,10+1),wcss)
plt.title('The Elbow Method')
plt.xlabel('Number of Clusters')
plt.ylabel('WCSS')

plt.show()
—------

from sklearn.cluster import KMeans
kmeans = KMeans(n_clusters=5,random_state=42)

y_pred = kmeans.fit_predict(X)

df['Group'] = y_pred
—-

plt.figure(figsize=[12,8])
plt.scatter(X.values[y_pred == 0, 0], X.values[y_pred == 0, 1], s = 100, c = 'red', label = 'Cluster 1')
plt.scatter(X.values[y_pred == 1, 0], X.values[y_pred == 1, 1], s = 100, c = 'blue', label = 'Cluster 2')
plt.scatter(X.values[y_pred == 2, 0], X.values[y_pred == 2, 1], s = 100, c = 'green', label = 'Cluster 3')
plt.scatter(X.values[y_pred == 3, 0], X.values[y_pred == 3, 1], s = 100, c = 'cyan', label = 'Cluster 4')
plt.scatter(X.values[y_pred == 4, 0], X.values[y_pred == 4, 1], s = 100, c = 'magenta', label = 'Cluster 5')
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s = 300, c = 'yellow', label = 'Centroids')
plt.title('Clusters of customers')
plt.xlabel('Annual Income (k$)')
plt.ylabel('Spending Score (1-100)')
plt.legend()
plt.show()


반응형