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
'프로젝트, 공모전 > 프로젝트 공모전_데이터 분석' 카테고리의 다른 글
데이터분석_공모전_DBI] 기법 정리 DecisionTreeRegressor & Random Search (0) | 2023.09.23 |
---|---|
데이터분석_공모전_DBI] 데이터 분석 (0) | 2023.09.23 |
데이터 분석_공모전_서울교육] 교직원 1인당 학생 수 (0) | 2023.08.20 |
데이터분석_공모전_서울교육] 서울 공공데이터 활용 (0) | 2023.08.20 |
데이터분석_공모전_서울교육] 서울 학교 데이터 분석 (0) | 2023.08.19 |