클러스터링과 클러스터 모델

Python으로 배우는 이산 사건 시뮬레이션

Diogo Costa (PhD, MSc)

Adjunct Professor, University of Saskatchewan, Canada & CEO of ImpactBLUE-Scientific

모델 결과의 히스토그램

  • 모델 결과 탐색
  • 변곡점과 병목 식별
  • 시스템 최적화

히스토그램

  • 빈도 분포 그래프
  • 구간별 관측치 수 제공

Matplotlib 패키지

import matplotlib.pyplot as plt

사용: 데이터셋 data의 히스토그램(빈 50개) 생성

plt.hist(data, bins=50)

50개 빈의 히스토그램으로 두 개의 가우시안 분포가 보여 클러스터 2개를 시사합니다.

Python으로 배우는 이산 사건 시뮬레이션

클러스터 분석과 모델 적용

  • 활용 분야
    • 패턴 인식(예: 모델 결과)
    • 이미지 분석

북미 지역 야간 불빛의 위성 이미지.

  • 데이터 압축
  • 컴퓨터 그래픽스
  • 머신 러닝

    뇌 속 신경망을 형상화한 이미지로, 머신 러닝의 패턴과 클러스터링을 암시합니다.

  • 이산 사건 모델에서

    • 모델 출력 패턴 식별
    • 더 실행 가능한 인사이트
Python으로 배우는 이산 사건 시뮬레이션

k-means 클러스터링

핵심

  • k-means 클러스터링(중심점 모델)
  • 관측치를 k개 클러스터로 분할
  • 각 관측치는 가장 가까운 평균의 클러스터에 속함
  • 클러스터의 평균 = 클러스터 중심점

관측치와 클러스터 중심점

k-means로 계산된 클러스터 중심점을 포함한 데이터 그래프.

Python으로 배우는 이산 사건 시뮬레이션

SciPy로 k-means 클러스터링

SciPy 메서드

scipy.cluster.vq.kmeans()

구현

import scipy
scipy.cluster.vq.kmeans(
obs, k_or_guess, iter=20, thresh=1e-05,
check_finite=True, *, seed=None)
  • obs는 numpy 배열
  • 반환:
    1. 클러스터 중심점(centroid)
    2. 왜곡도(관측치와 생성된 중심점 간 평균거리)
Python으로 배우는 이산 사건 시뮬레이션

데이터 화이트닝: 상관 제거와 리스케일링

k-means 전: 데이터 화이트닝

  1. obs 데이터의 상관 제거
  2. obs 각 차원을 표준편차로 스케일 재조정

첫 패널은 상관된 데이터, 둘째는 상관 제거된 데이터, 셋째는 화이트닝된 데이터를 보여줍니다.

SciPy에서

scipy.cluster.vq.whiten(
obs, check_finite=True)
  • obs는 numpy 배열
Python으로 배우는 이산 사건 시뮬레이션

화이트닝과 k-means 예시

  • 여러 공정을 포함한 제조 활동
  • Process 1의 영향 살펴보기

DNT_CURLY_TAG_2 원시 데이터와 화이트닝 데이터에서 공정 1 소요 시간과 총 소요 시간을 k-means 클러스터로 비교한 플롯입니다.

패키지 임포트

import scipy.cluster.vq as scvq

화이트닝 수행

white_data = scvq.whiten(model_results)

클러스터 2개 찾기(파란 점)

cluster_centroids, distortion = 
scvq.kmeans(white_data, 2)
Python으로 배우는 이산 사건 시뮬레이션

최적 클러스터 수

기법

  • 단순 방법(클러스터 최대 개수)
  • 엘보우 방법
  • 실루엣 계수
  • 갭 통계량

단순 방법

  • 클러스터 최대 개수 결정
  • 사용법: $\Big(\dfrac{nobs}{2}\Big)^{0.5}$
    • nobs = 관측치 개수
num_clusters = 
  int((model_results.shape[0]/2)**0.5)
  • 콘솔 출력
    22
    
Python으로 배우는 이산 사건 시뮬레이션

최적 클러스터 수: 실루엣 점수법

  • 라이브러리 임포트
from sklearn.metrics import silhouette_score

k 클러스터 수에 대한 실루엣 점수 계산

for k in range(2, 6):
  model = KMeans(n_clusters=k)
  model.fit(model_results)
  pred = model.predict(model_results)
  score = silhouette_score(model_results, pred)

콘솔 출력

Silhouette Score for k = 2: 0.591
Silhouette Score for k = 3: 0.472
Silhouette Score for k = 4: 0.381
Silhouette Score for k = 5: 0.364
Silhouette Score for k = 6: 0.373

결과 해석

  • 최상값: score = 1
  • 최하값: score = -1
  • 클러스터 중첩: score가 0에 가까움
Python으로 배우는 이산 사건 시뮬레이션

Ayo berlatih!

Python으로 배우는 이산 사건 시뮬레이션

Preparing Video For Download...