본문 바로가기

Codestates AI 부트캠프/1. Introduction to Data Sceince

[DS 기초] 3-3 clustering

clustering 

수많은 데이터들을 군집화하는 일. 예를 들어, 온라인 쇼핑몰 고객을 한달동안 방문 빈도와 총 구매건수를 통해 적극적 유저와 비적극적 유저, 유령회원 등을 나눌 수 있다.

또, 머신러닝 중 데이터가 분류가 되어있지 않은 경우에 클러스터링을 통해 자동으로 라벨을 붙여줄 수도 있다.

K-Means Clustering

클러스터링도 여러 방법이 있지만 오늘 배울 방법은 K-Means Clustering이다. 만약 데이터를 4개의 집단으로 나누고 싶다면, 먼저 4개의 임의의 점을 찍는다. 그리고 가까운 데이터들을 해당 클러스터로 할당한다. 클러스터별로 평균을 구해 다시 4개의 점을 찍고, 또 가까운 점들을 배정한다. 연속적으로 위 행위를  반복하다보면 평균으로 찍힌 점의 위치가 변하지 않고, 특정 성격을 가진 데이터끼리 클러스터링 되어있는 것을 볼 수 있다.

 

과정

① 클러스터링도 pca와 마찬가지로 데이터셋 표준화를 먼저 한 후에 과정을 진행한다.
② elbow method 통해 데이터를 몇개의 집단으로 나누면 좋을지 알아본다

sse = {}

for k in range(1,10):
  kmeans = KMeans(n_clusters=k, random_state=1)
  kmeans.fit(df_scaled)
  sse[k] = kmeans.inertia_


# 결과 시각화

plt.title('The Elbow Method')
plt.xlabel('Values of k')
plt.ylabel('SSE')
sns.pointplot(x=list(sse.keys()), y=list(sse.values()))
plt.show()


위는 클러스터 갯수별 분산의 정도를 보여준다. 클러스터 갯수가 늘수록 분산의 정도는 적어진다. 하지만 너무 많은 클러스터를 만드는 것 또한 분석의 의미가 없다. 그렇기에 최대한 클러스터별로 모아주지만, 클러스터의 갯수를 최소로 유지하기 위한 갯수를 구한다. 위의 이미지에서는 정확하게 보이지 않지만, 기울기가 급격하게 하강하다가 완만해지는 구간이 있다. 그 구간을 클러스터링 갯수로 통상 둔다. 그때 그래프가 팔 모양을 닮았고, 팔꿈치 부분에 해당하는 구간을 주목해야한다고 해서 elbow method라고 부른다. 

 


③ 정해진 클러스터 갯수를 토대로 K-Means clustering 진행

#클러스터 갯수는 4개로 지정
kmeans = KMeans(n_clusters=4, max_iter=50, random_state=42)
kmeans.fit(df_scaled)

#데이터셋에 클러스터 컬럼 만들기
cluster_labels = kmeans.labels_
df_k4 = df.assign(Cluster = cluster_labels)


④ scatter plot을 통해 시각화해본다

 

plt.figure(figsize = (13,10))
sns.scatterplot(x = df.x, y= df.y, hue = df.cluster, palette=['green','orange','brown','red'])