인턴하는 중 새로운 아이디어를 제안해주셔서 급하게 하게 된 군집분석. 까먹기 전에 기록해두기 위해 적어둔다.
우선 필요한 패키지를 불러온다.
# 항상 불러와주는 기본 패키지들
import pandas as pd
import numpy as np
# plotting 용 패키지들
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
# KMeans 알고리즘
from sklearn.cluster import KMeans
데이터를 정리하고 (보안상 생략) 모델링에 들어간다.
inertia = []
for i in range(1,11):
kmeans = KMeans(n_clusters=i)
kmeans.fit(Xs)
inertia.append(kmeans.inertia_)
plt.plot(range(1,11), inertia)
plt.title('The Elbow Method')
plt.xlabel('no of clusters')
plt.ylabel('inertia')
plt.show()
위의 elbow method를 쓰면 3이 가장 적합한 cluster 개수임을 알 수 있다.
모델링 하는 방법은 다음과 같이 간단하다.
kmeans = KMeans(n_clusters=3)
y_kmeans = kmeans.fit_predict(Xs)
이제 시각화를 통해 데이터 분포를 확인해보자.
# kmeans 결과를 두 변수에 대해 scatter plot 그려서 보기
def scatterKmeans(xCol, yCol, n_cluster):
for i in range(n_cluster):
plt.scatter(data_Xs[y_kmeans == i][xCol], data_Xs[y_kmeans == i][yCol], s =30, label = 'Cluster'+str(i))
x_idx = list(data_Xs.columns).index(xCol)
y_idx = list(data_Xs.columns).index(yCol)
plt.scatter(kmeans.cluster_centers_[:, x_idx], kmeans.cluster_centers_[:, y_idx], s = 80, c = 'yellow', label = 'Centroids')
plt.title('Clusters of customers')
plt.xlabel(xCol)
plt.ylabel(yCol)
plt.legend()
plt.show()
scatterKmeans('Age','Weight',3)
그리고 종속변수와의 관계를 알아보기 위해 pairplot을 그려본다.
i=0 # cluster 번호
sns.pairplot(data_conti[y_kmeans==i],diag_kind='hist')
plt.show()
참고 : https://www.kaggle.com/vjchoudhary7/kmeans-clustering-in-customer-segmentation
반응형
'DATA SCIENCE > MACHINE LEARNING' 카테고리의 다른 글
[R] Clustering Algorithms (kmeans, PAM, CLARA) (0) | 2020.02.17 |
---|---|
[Python] pandas 열에 na 들어갈 때 float type 처리 방법 (0) | 2020.02.14 |