출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리] 데이터분석_공모전_DBI] 기법 정리 K-means :: 하나둘셋넷
728x90

K-Means

1) 라이브러리 로딩
import pandas as pd
import numpy as np
import matplotlib.pyplt as plt
import sklearn as sns

2) 군집모델 만들기
model = KMeans(n_clusters = 2, init='auto')
model.fit(x)

pred = model.predict(x)

pred = pd.DataFrame(pred, columns = ['predicted'])

# 모델의 중심 좌표 얻기

centers = pd.DataFrame(model.cluster_centers_, columns = ['x1', 'x2'])

plt.scatter(result['x1'], result['x2'], c=result['predicted'], alpha=0.5)
plt.scatter(centers['x1'], centers['x2'], s=50, marker='D', c='r')
# k means 모델을 생성하게 되면 inertia 값을 확인 가능
model.inertia_

# k를 증가시켜가면서 inertia 구하기
kvalues = range(1,10)
inertias = []

for k in kvalues:
    model = KMeans(n_clusters=k, n_init = 'auto')
    model.fit(x)
    inertias.append(model.inertia_)

plt.plot(kvalues, inertias, '-o')
plt.xlabel('number of clusters, k')
plt.ylabel('inertia')
plt.grid()
plt.show()
 

K-Means 실습

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

from sklearn.cluster import KMeans
from sklearn,preprocessing import MinMaxScaler
# 군집화 할 변수 선택
x = data.loc[:, ['Age', 'Income', 'Score' ] ]
스케일링
scaler = MinMaxScaler()
x_s = scaler.fit_transform(x)

# k값을 늘려가면서(1~20) 모델을 만들어, inertia 값을 저장
# 그래프를 통해 최적의 k값 결정


# 반복문으로 KMeans 모델
kvalues = range(1,21)
iv = []

for k in kvalues:
    model = KMeans(n_clusters = k, n_init='auto')
    model.fit(x_s)
    iv.append(model.inertia_)

# 그래프 그려서 적절한 k값 찾기
plt.plot(kvalues, iv, marker='.')
plt.grid()
# 적절한 k 찾으면 모델 선언
model = KMeans(n_clusters=5, n_init = 'auto', random_state=10)

한 번에 분석하기

# 'Age', 'Income', 'Score', 'pred'만 추출

temp = result.loc[:, ['Age', 'Income', 'Score', 'pred' ]]

sns.pairplot(temp, hue = 'pred')
plt.show()

 

 

728x90

+ Recent posts