머신러닝

K-Means Clustering 예시풀이

HooSL 2022. 3. 28. 15:37

구글드라이브 import

from google.colab import drive
drive.mount('/content/drive')

필요한 라이브러리 한글 가능 import

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

%matplotlib inline

import platform

from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False

if platform.system() == 'Darwin':
    rc('font', family='AppleGothic')
elif platform.system() == 'Windows':
    path = "c:/Windows/Fonts/malgun.ttf"
    font_name = font_manager.FontProperties(fname=path).get_name()
    rc('font', family=font_name)
else:
    print('Unknown system... sorry~~~~')

 

df=pd.read_csv('/content/drive/MyDrive/위치/Mall_Customers.csv')

NaN값이 있는지 확인

df.isna().sum()

X값 세팅 (unsupervised learning 이므로 y값은 없습니다.)

X = df.iloc[:,3:]

모델링

from sklearn.cluster import KMeans

kmeans = KMeans(n_clusters=3,random_state=42)
y_pred=kmeans.fit_predict(X)

y_pred의 값은 각 행(사람)의 그룹 정보를 가지고 있습니다.

따라서 이 그룹 정보는 원래의 데이터프레임에 추가를 해줘야 이용할 수 있습니다.

df['Group']=y_pred

적절한 k값을 찾기위해서는 WCSS값을 확인해야합니다.

따라서 k를 1부터 10까지 다 수행해서, WCSS값은 리스트에 저장합니다.

wcss = []
for k in range(1,10+1):
    kmeans = KMeans(n_clusters=k,random_state=42)
    #WCSS 값만 확인할거니까 fit 함수만 이용하면 됩니다.
    kmeans.fit(X)
    wcss.append(kmeans.inertia_)
    
wcss

엘보우 메소드를 이용하기 위해서 차트로 표시합니다.

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

kmeans = KMeans(n_clusters=5,random_state=42)
y_pred=kmeans.fit_predict(X)
df['Group']=y_pred
sb.scatterplot(data=df,x='Annual Income (k$)',y='Spending Score (1-100)')
plt.show()

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()

 

'머신러닝' 카테고리의 다른 글

구글 Colab 을 이용한 파이썬 개발 환경 설정  (0) 2022.03.28
Hierarchical Clustering 과 Dendrogram 보기  (0) 2022.03.28
K-Means Clustering 설명, 알고리즘  (0) 2022.03.28
Decision Tree  (0) 2022.03.28
Support Vector Machine  (0) 2022.03.28