본문 바로가기
ML | DL/머신러닝 이론|실습

[clustering] tslearn의 TimeSeriesKmeans 사용방법

by Leeys 2022. 3. 19.
반응형

클러스터링Unsupervised Learning으로 데이터들의 군집을 예측하는 것이 목적이다.

일반적으로 kmeans는 각 데이터 사이의 distance를 구해서 군집마다 center에 가장 가까운

데이터 끼리의 패턴을 찾는다. 하지만 시계열로 되어있는 데이터를 클러스터링 해버리면

시간에 따른 정보가 사라지기 때문에 다른 방법이 필요하다.

 

그래서 이번에 소개할 TimeSeriesKmeans는 시간에 따른 군집화가 가능하기 때문에

위의 문제를 해결할 수 있는 알고리즘이며, tslearn 라이브러리로 쉽게 사용이 가능하다. 

 

1. 설치

 

해당 명령어로 tslearn을 설치할 수 있다.

 

!pip install tslearn

 

2. 데이터 생성

 

32row 1column의 array를 50개 생성한다.

 

import numpy as np
from tslearn.clustering import TimeSeriesKMeans
from tslearn.generators import random_walks

X = random_walks(n_ts=50, sz=32, d=1)

 

3. 학습

 

간단하게 4개의 군집을 찾아 학습 시켜보겠다..

 

km = TimeSeriesKMeans(n_clusters=4, verbose=False, random_state=42, n_jobs=-1)
y_pred = km.fit_predict(X)

n_clusters : int (기본값: 3)

형성할 클러스터의 수

 

max_iter : int (기본값: 50)

단일 실행에 대한 k-평균 알고리즘의 최대 반복 횟수

 

metric : {"euclidean", "dtw", "softdtw"} (기본값: "euclidean")

 

n_jobs : int 또는 None, 선택 사항(기본값=None), 몇개의 cpu를 사용할 것 인지 (-1은 전부 사용)

 

dtw_inertia: bool (기본값: False)

DTW가 선택된 메트릭이 아닌 경우에도 DTW 관성을 계산할지 여부

 

verbose : int (기본값: 0)

0이 아니면 모델 학습 중 관성에 대한 정보와 joblib 진행 메시지가 출력

 

random_state : seed 값

 

 

학습한 후

군집의 거리를 계산해서 군집의 center에 얼마나 잘 뭉쳤는지를 알 수 있다.

값이 낮을수록 더욱 잘 뭉쳤다는 뜻이다.

 

print(f'Inertia: {km.inertia_}')

 

각 군집의 center 값을 볼 수 있다.

 

print(f'cluster_center {km.cluster_centers_}')

 

 

반응형

댓글