250x250
Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 | 31 |
Tags
- oracle
- 오라클
- Jupyter
- SQL
- 도커이미지
- 시계열
- psycopg2
- 머신러닝
- 복구
- jupyternotebook
- Python
- psql
- pgadmin
- Memory
- LOG
- 연결
- 도커
- Docker image
- GPU
- 교차검증
- 쿼리
- 리눅스
- TensorFlow
- 파이썬
- Linux
- cpu
- GridSearchCV
- sqldeveloper
- docker
- postgre
Archives
- Today
- Total
areum
[ML] K-Means Clustering (K-평균 군집) 본문
728x90
K-평균 군집분석 정의
군집 수만큼(k개) 초기값을 지정하고, 각 데이터를 가까운 초기값에 할당하여 군집을 형성한 뒤, 각 군집의 평균을 재계산하여 초기값을 갱신.
갱신된 값에 대해 위의 할당과정을 반복하여 k개의 최동군집을 형성.
K-Means algorithm 사용하여 분석하기
1. 필요한 라이브러리 및 예제 csv파일을 불러옵니다.
import matplotlib.pyplot as plt #시각화를 위한 설치
import matplotlib.font_manager as fm # 한글 폰트
import matplotlib #시각화를 위한 설치
import os, warnings
import pandas as pd #구조 변경 및 결합을 하기 위한 설치
import seaborn as sns #시각화를 위한 설치
import plotly.express as px
from sklearn.datasets import make_blobs
import math
import scipy as sp
warnings.filterwarnings('ignore')
pd.set_option('display.max_rows', None) #모든 행을 다 보여주라는 명령
pd.set_option('display.max_columns', None) #모든 열을 다 보여주라는 명령
# 그래프에서 마이너스 폰트 깨지는 문제에 대한 대처
matplotlib.rcParams['axes.unicode_minus'] = False
## 한글 폰트 적용 ( 안하면 한글 깨짐 )
f_name = fm.FontProperties(fname="C:/Windows/Fonts/malgunbd.ttf").get_name()
plt.rc('font', family=f_name)
# 예제에서 사용할 csv파일입니다.
cluster=pd.read_csv('VitalSign_Sample.csv',encoding='ANSI')
2. 데이터 형태 파악하기
위 자료의 데이터는 공공데이터포털의 의료데이터를 추출해온 자료입니다.

3. pairplot 시각화
데이터에 들어있는 각 컬럼들의 상관 관계를 출력하기 위한 과정입니다.
sns.pairplot(cluster_f,hue='fm')

4. KMeans 파라미터 정하기
- 파라미터 살펴보기
| 파라미터 | 의미 |
| n_clusters | k-means의 k를 의미하는 군집형성의 개수 |
| n_jobs | scikit-learn의 기본적인 병렬처리로 내부적으로 멀티프로세스를 사용하는 것 (CPU 코어의 수 확인 후 증설) |
| random_state | 학습결과의 동일성을 위해 난수를 고정init |
| init | k-means가 중심점(centroid)를 기준으로 군집을 형성하는데 있어서 초기중심점을 random으로 설정 |
| n_init | 초기중심점 선택의 반복 횟수 |
| max_iter | 학습의 최대 반복횟수 |
| tol |
inertia 이 지정해준 tol만큼 줄어들지 않으면 조기에 종료시킨다는 것 |
from sklearn.cluster import KMeans
ks=range(1,10)
inertias=[]
for k in ks:
model=KMeans(n_clusters=k)
model.fit(cluster_f)
inertias.append(model.inertia_)
plt.figure(figsize=(4,4))
plt.plot(ks,inertias,'-o')
plt.show()

위 출력된 그래프를 통해 n_clusters의 수를 정할 수 있습니다. 값이 급격하게 하강하면서 2부터는 변화의 폭이 크지 않은것을 볼 수 있습니다. 그렇기에 해당 데이터는 2~ 개의 클러스터로 분류하는 것이 적절하다고 판단할 수 있습니다.
5.모델 적용하여 군집화해보기
clust_model=KMeans(n_clusters=2)
clust_model.fit(cluster_f)
centers=clust_model.cluster_centers_
pred=clust_model.predict(cluster_f)
clust_df=cluster_f.copy()
clust_df['clust']=pred
clust_df.columns = ['x', 'y', 'z','clust']
#원본데이터 시각화
sns.scatterplot(x=clust_df.iloc[:,0],y=clust_df.iloc[:,1],data=clust_df,hue='z',palette='coolwarm')
#kmeans예측 군집화 시각화
sns.scatterplot(x=clust_df.iloc[:,0],y=clust_df.iloc[:,1],data=clust_df,hue='clust',palette='coolwarm')


clust_df.to_dict('records')

'Programming > Machine Learning' 카테고리의 다른 글
| [시계열 분석] Prophet을 이용한 기온 예측 (0) | 2023.03.22 |
|---|---|
| [ML] LogisticRegression(로지스틱 회귀) (0) | 2023.03.21 |
| [ML] Association Rule Analysis (연관 규칙 분석) (0) | 2023.03.14 |
| [시계열 분석] ARIMA를 이용한 기온 예측 (0) | 2023.01.31 |
| [Machine Learning] GridSearchCV 하이퍼 파라미터 튜닝 (0) | 2022.12.01 |