기본 임폴트 라이브러리
# Importing the libraries
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
오늘 포스팅에서 사용할 df
df = pd.read_csv('Mall_Customers.csv')
df.head()
데이터를 비슷한 정보끼리 묶으려고 한다
1. nan 있는지 확인한다
df.isna().sum()
>>>
CustomerID 0
Genre 0
Age 0
Annual Income (k$) 0
Spending Score (1-100) 0
dtype: int64
2. 필요한 데이터 X로 묶어준다
X = df.loc[ : , 'Genre':'Spending Score (1-100)']
3. X 에 Genre 의 문자열을 숫자로 바꿔준다
- Genre 에 몇가지의 문자열이 있는지 확인하고 라벨링 인코딩을 할지 원핫인코딩을 할지 결정해준다
X['Genre'].nunique()
# 2 # 2개 여서 라벨링인코딩을 해준다
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
X['Genre'] = encoder.fit_transform(X['Genre'])
sorted(X['Genre'].unique())
# [0, 1]
# 숫자로 변경 완료!
4. KMeans를 사용해서 그룹끼리 분류한다
- 클러스터 라이브러리 임폴트
from sklearn.cluster import KMeans
- KMeans(n_clusters= K, random_state= *) 사용 _K 값에 숫자를 넣어 잘 분류되는 값을 찾아야한다
- n_clusters= K 는 사람이 결정 해야하는 파라미터인 하이퍼 파라미터(hyper parameters)이다
kmeans = KMeans(n_clusters= 3, random_state= 10)
y_pred = kmeans.fit_predict(X)
y_pred
>>>
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 1, 2, 1, 2, 1, 2, 1,
2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1,
2, 1])
df['Group'] = y_pred
df.head()
5. WCSS 를 반복문을 사용해 K 값을 1-10의 수로 구해서 차트로 만들어 보자
- WCSS(Within Cluster Sum of Squares)란?
각 클러스터 내의 관측치 간의 분산의 합을 의미한다
각 관측치와 중심점(centroid) 간의 거리를 측정하고 두 값 사이의 제곱 차이를 계산하여 이름이 붙여졌다
따라서, WCSS는 클러스터 내의 총 변동성을 설명하는 데 일반적으로 사용되고,
WCSS 값과 클러스터의 수, K를 결정하는 데 사용된다.
- 클러스터 라이브러리 임폴트
from sklearn.cluster import KMeans
- 반목문을 사용해서 K 값 넣기
wcss = []
for k in range(1, 10+1):
kmeans = KMeans(n_clusters= k, random_state= 10)
kmeans.fit(X)
wcss.append(kmeans.inertia_)
- wcss 값을 확인한 후 차트로 만들자
wcss
>>>
[308862.06,
212889.442455243,
143391.59236035674,
104414.67534220166,
75399.61541401484,
58348.64136331505,
51167.19736842105,
45324.85021951262,
40811.455768566826,
37141.48254409704]
plt.plot(wcss)
plt.show()
6. 더 정확한 그룹 정보를 구할 수 있다
- 차트를 보고 K 값을 사람이 선택해서 그룹 정보를 정확하게 구해 df에 넣어야 한다
kmeans = KMeans(n_clusters=5, random_state= 1)
y_pred = kmeans.fit_predict(X)
y_pred
>>>
array([3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1,
3, 1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 2, 0, 2, 4, 2, 0, 2, 0, 2,
0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 4, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,
0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,
0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2,
0, 2])
df['Group'] = y_pred
df.head()