ML for Time Series 시계열을 위한 머신러닝¶
Clustering과 tree based method로 predict와 classification 문제를 다룬다.
시계열의 특징 생성은 tree based method에서 반드시 필요한 과정이다. 앞서 공부했던 ARIMA 모델과는 달리 '시간을 인식'하는 방법론이 아니기 때문이다.
Clustering, 거리 기반 classification은 input으로 원본 시계열이나 특징을 사용할 수 있다.
시계열 자체를 input으로 사용하려면, dynamic time warping(DTW, 동적시간워핑)이라는 거리 평가 지표를 알아야 한다.
시계열에 직접적으로 적용되는 동적시간워핑은 데이터 전체에 대한 시간 정보를 보존한다. 제한된 특징 목록을 사용하는 방법과는 다르다.
MachineLearningForTimeSeries.ipynb
Run, share, and edit Python notebooks
colab.research.google.com
0. 모듈 설치 및 라이브러리 import
!pip install cesium
Collecting cesium
Downloading cesium-0.9.12-cp37-cp37m-manylinux1_x86_64.whl (220 kB)
|████████████████████████████████| 220 kB 5.2 MB/s
Requirement already satisfied: dask>=2.5.0 in /usr/local/lib/python3.7/dist-packages (from cesium) (2.12.0)
Requirement already satisfied: toolz in /usr/local/lib/python3.7/dist-packages (from cesium) (0.11.2)
Collecting gatspy>=0.3.0
Downloading gatspy-0.3.tar.gz (554 kB)
|████████████████████████████████| 554 kB 63.8 MB/s
Requirement already satisfied: scikit-learn>=0.22.1 in /usr/local/lib/python3.7/dist-packages (from cesium) (1.0.2)
Requirement already satisfied: cloudpickle in /usr/local/lib/python3.7/dist-packages (from cesium) (1.3.0)
Requirement already satisfied: joblib>=0.14.1 in /usr/local/lib/python3.7/dist-packages (from cesium) (1.1.0)
Requirement already satisfied: scipy>=0.16.0 in /usr/local/lib/python3.7/dist-packages (from cesium) (1.4.1)
Requirement already satisfied: pandas>=0.17.0 in /usr/local/lib/python3.7/dist-packages (from cesium) (1.3.5)
Requirement already satisfied: numpy>=1.17.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.17.0->cesium) (1.19.5)
Requirement already satisfied: python-dateutil>=2.7.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.17.0->cesium) (2.8.2)
Requirement already satisfied: pytz>=2017.3 in /usr/local/lib/python3.7/dist-packages (from pandas>=0.17.0->cesium) (2018.9)
Requirement already satisfied: six>=1.5 in /usr/local/lib/python3.7/dist-packages (from python-dateutil>=2.7.3->pandas>=0.17.0->cesium) (1.15.0)
Requirement already satisfied: threadpoolctl>=2.0.0 in /usr/local/lib/python3.7/dist-packages (from scikit-learn>=0.22.1->cesium) (3.1.0)
Building wheels for collected packages: gatspy
Building wheel for gatspy (setup.py) ... done
Created wheel for gatspy: filename=gatspy-0.3-py3-none-any.whl size=43818 sha256=3d10bec5d7fe2d4644177022c6fc0fd553f2bccde4096abb26bbba2cb4a941c2
Stored in directory: /root/.cache/pip/wheels/1f/c1/4c/8de278f816259b4f67e2356c0bda260a593375661e400bf31f
Successfully built gatspy
Installing collected packages: gatspy, cesium
Successfully installed cesium-0.9.12 gatspy-0.3
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [20, 10]
import cesium
import xgboost as xgb
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import time
from cesium import datasets
from cesium import featurize as ft
import scipy
from scipy.stats import pearsonr, spearmanr
from scipy.stats import skew
import sklearn
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split, RandomizedSearchCV
1. 시계열 분류¶
- Electroencephalogram(EEG, 원시 뇌전도) 시계열 데이터에 대한 특징을 만드는 예
- 머신러닝 알고리즘에 사용
- EEG 시계열 특징 추출 후, decision tree(결정 트리) 기법으로 EEG 데이터 분류
1.1 특징의 선택과 생성¶
- cesium 패키지로 특징 생성
- 장점 중 한 가지는, 여러 가지 유용한 데이터셋을 제공한다는 점
데이터셋에 다섯 종류의 EEG 시게열이 존재하고, 각 시계열은 모두 길이가 다르다.
# cesium 함수 사용해 데이터셋 다운로드
from cesium import datasets
eeg = datasets.fetch_andrzejak()
Downloading data from https://github.com/cesium-ml/cesium-data/raw/master/andrzejak/
type(eeg)
dict
# 샘플 확인
plt.subplot(3, 1, 1)
plt.plot(eeg["measurements"][0])
plt.legend(eeg['classes'][0])
plt.subplot(3, 1, 2)
plt.plot(eeg["measurements"][300])
plt.legend(eeg['classes'][300])
plt.subplot(3, 1, 3)
plt.plot(eeg["measurements"][450])
plt.legend(eeg['classes'][450])
<matplotlib.legend.Legend at 0x7fb8b444f510>
EEG 데이터셋 중 임의로 선택된 세 개의 표본에 대한 그래프.
건강한 사람과 간질 환자를 대상으로 서로 다른 두뇌 활동을 측정한 것. 서로 독립적이다.
이는 특징 생성에 대한 가이드를 제공한다.
가령 Z와 F는 S보다 덜 편향된 것으로 보이고, y축을 보면 각 범주는 꽤 다른 범위의 값으로 구성되었다.
- 진폭이 유용할 수 있다는 것을 시사
- 단지 진폭 뿐이 아니라, 서로 다른 특성을 지닌 것으로 보이는 데이터의 전반적인 분포도 유용
eeg['measurements']
[array([ 40., 48., 35., ..., -34., -27., -42.]),
array([ -56., -50., -64., ..., -173., -162., -82.]),
array([-37., -22., -17., ..., 3., 4., 82.]),
array([-31., -43., -39., ..., -6., 10., 33.]),
array([ 14., 26., 32., ..., -32., -6., -17.]),
array([-87., -89., -73., ..., 18., 7., 7.]),
array([ -2., 20., 42., ..., -18., -6., -37.]),
array([-31., -16., 10., ..., 1., 1., 0.]),
array([ 8., 17., 29., ..., -40., -36., 7.]),
array([-41., -38., -31., ..., 1., -13., -1.]),
array([ 14., 25., 31., ..., -26., -28., 21.]),
array([-64., -72., -52., ..., -36., -58., 20.]),
array([ 10., -6., -14., ..., 15., 6., -46.]),
array([31., 25., 17., ..., 23., 28., 65.]),
array([ 30., 19., -3., ..., -11., -13., -6.]),
array([ 34., 34., 31., ..., -7., -20., 91.]),
array([-62., -55., -44., ..., -20., -22., 35.]),
array([-18., -9., 9., ..., 109., 67., 50.]),
array([ 0., 2., -1., ..., 23., 21., -16.]),
array([-20., -3., 2., ..., -28., -10., 3.]),
array([-58., -59., -60., ..., -43., -59., 23.]),
array([ 6., -14., -33., ..., 22., 26., -88.]),
array([-40., -13., 43., ..., -21., -26., 28.]),
array([ -1., -40., -56., ..., 20., 4., 15.]),
array([ 28., 30., 8., ..., -105., -95., -26.]),
array([67., 86., 89., ..., -5., 9., -1.]),
array([19., 14., 23., ..., 62., 54., 40.]),
array([ -4., 4., 10., ..., -40., -45., -58.]),
array([-42., -49., -37., ..., -16., -19., -40.]),
array([ 96., 43., 71., ..., 51., 90., -28.]),
array([-21., -29., -34., ..., 18., 6., 25.]),
array([-41., -37., -29., ..., -20., -23., -59.]),
array([-26., -29., -39., ..., 73., 16., 55.]),
array([-10., -9., -33., ..., -29., -18., -51.]),
array([-19., -39., -41., ..., 60., 46., 46.]),
array([ 40., 60., 74., ..., -12., 8., 61.]),
array([-49., -48., -46., ..., 18., -1., -9.]),
array([ -73., -66., -59., ..., -113., -109., -93.]),
array([ 18., 34., 45., ..., -57., -53., 83.]),
array([ 63., 43., 47., ..., -1., 14., -14.]),
array([ -45., -105., -106., ..., 22., 5., 96.]),
array([-81., -79., -76., ..., -27., -39., -70.]),
array([-19., 9., 35., ..., -53., -48., -1.]),
array([-46., -44., -47., ..., 43., 56., 14.]),
array([-21., -6., 1., ..., -40., -15., 23.]),
array([-13., -27., -39., ..., -30., -34., -85.]),
array([ 7., 11., 20., ..., -56., -48., -23.]),
array([ -7., 4., 21., ..., -94., -95., 59.]),
array([ 26., 10., 7., ..., 96., 82., -18.]),
array([81., 68., 35., ..., 15., 10., 17.]),
array([-12., 6., 13., ..., -46., -30., -46.]),
array([ 43., 48., 44., ..., -47., -21., 27.]),
array([-20., -12., -6., ..., 9., 2., -14.]),
array([ 69., 68., 58., ..., -83., -75., 58.]),
array([ -91., -116., -70., ..., 7., -22., -121.]),
array([46., 42., 29., ..., 36., 60., 44.]),
array([ 37., 50., 58., ..., -54., -56., -41.]),
array([-44., -35., -18., ..., 44., 55., 66.]),
array([-20., -23., -24., ..., 14., 13., 2.]),
array([-64., -62., -59., ..., -30., -41., -93.]),
array([-53., -46., -47., ..., -74., -80., -54.]),
array([-55., -32., 1., ..., -73., -65., -39.]),
array([-40., -33., -16., ..., 23., 5., 10.]),
array([-20., -43., -47., ..., 18., 8., -63.]),
array([ -9., 15., 35., ..., -30., -12., -3.]),
array([-15., -23., -25., ..., 34., 12., -51.]),
array([-49., -59., -56., ..., 8., -1., -44.]),
array([20., 21., 19., ..., 39., 18., 30.]),
array([-25., 7., 37., ..., -83., -69., -75.]),
array([-13., -4., 2., ..., 74., 61., -5.]),
array([ 13., 21., 39., ..., -107., -109., -25.]),
array([113., 129., 108., ..., -41., -22., -5.]),
array([-17., -36., -52., ..., -6., -31., -19.]),
array([-48., -52., -63., ..., -5., -9., 0.]),
array([ 24., 10., -9., ..., -33., -28., -19.]),
array([ 39., 41., 43., ..., -29., -16., 1.]),
array([ 57., 82., 93., ..., -72., -55., -20.]),
array([ -8., -19., -32., ..., 27., 41., -21.]),
array([ 69., 69., 65., ..., -17., -1., -3.]),
array([-34., -21., -17., ..., -73., -61., -69.]),
array([36., 27., 24., ..., 66., 59., 6.]),
array([ 20., 27., -5., ..., -111., -71., -9.]),
array([ -56., -55., -53., ..., -102., -73., -115.]),
array([-20., -14., -12., ..., -66., -53., 5.]),
array([-44., -63., -85., ..., 20., -25., 15.]),
array([-21., -14., -12., ..., -82., -66., -10.]),
array([ -2., -8., -27., ..., 21., 17., -16.]),
array([ -1., -11., -11., ..., -31., -31., -111.]),
array([ 16., 24., 33., ..., -75., -45., -68.]),
array([-30., -34., -33., ..., 1., -20., -27.]),
array([ 13., 30., 42., ..., -36., -22., -39.]),
array([ 12., 22., 35., ..., -11., 8., 77.]),
array([-19., -1., 33., ..., -70., -25., -2.]),
array([-45., -62., -76., ..., -24., -56., 49.]),
array([ 6., -6., -8., ..., 98., 78., -5.]),
array([-133., -144., -113., ..., -83., -87., -104.]),
array([ -3., -3., -12., ..., 30., 19., -64.]),
array([-51., -42., -39., ..., -2., 0., -49.]),
array([ 56., 55., 38., ..., -32., -4., 69.]),
array([ -36., -71., -120., ..., 3., -13., 30.]),
array([ -6., -19., -47., ..., -62., -43., -42.]),
array([-18., -13., 0., ..., 52., -4., -56.]),
array([27., 4., 1., ..., 65., 47., 36.]),
array([ -76., -102., -95., ..., -34., -32., 27.]),
array([ 29., 10., -26., ..., -86., -88., -35.]),
array([-53., -33., -23., ..., 53., 39., 72.]),
array([ 98., 178., 236., ..., 0., -12., -16.]),
array([ -83., -120., -123., ..., -27., -50., -38.]),
array([-128., -158., -161., ..., -79., -95., 46.]),
array([ 62., 49., 14., ..., -34., -24., 95.]),
array([-51., -33., -6., ..., -8., -49., -66.]),
array([-16., -26., -17., ..., 133., 97., -48.]),
array([ -95., -124., -143., ..., 17., -5., -69.]),
array([ -47., -99., -103., ..., -21., -11., 69.]),
array([-40., -19., -38., ..., -46., -41., -63.]),
array([-34., -39., -49., ..., 60., 29., -56.]),
array([ -9., -10., 7., ..., 99., 45., -18.]),
array([ -17., 31., 35., ..., -124., -88., -83.]),
array([ 92., 110., 103., ..., -46., -62., -5.]),
array([ 96., 99., 77., ..., -85., -48., 22.]),
array([ 51., 84., 105., ..., -97., -76., -74.]),
array([19., 6., 5., ..., 40., 7., 52.]),
array([ 23., 20., -5., ..., 225., 181., 79.]),
array([ 43., 86., 138., ..., 46., 47., 10.]),
array([-42., -54., -53., ..., 62., 24., -2.]),
array([ 89., 57., 22., ..., -91., -64., -10.]),
array([ -53., -54., -38., ..., -113., -93., -160.]),
array([-38., -18., -18., ..., 0., -52., 29.]),
array([-53., 7., 55., ..., -91., -90., 37.]),
array([-14., -8., -9., ..., 33., -11., 27.]),
array([ 13., -14., -50., ..., -78., -48., -108.]),
array([-38., -36., -76., ..., 84., 36., -14.]),
array([-136., -121., -84., ..., -12., -13., -31.]),
array([ 76., 57., 7., ..., -143., -145., 2.]),
array([31., 40., 41., ..., 16., 12., 1.]),
array([ 86., 74., 68., ..., 51., 45., -25.]),
array([-156., -168., -187., ..., -93., -95., -54.]),
array([ 75., 44., 0., ..., 154., 109., -15.]),
array([-166., -175., -138., ..., -93., -96., -5.]),
array([-28., 4., 21., ..., -51., -34., 0.]),
array([ 80., 55., 15., ..., -74., -45., 165.]),
array([ 0., -19., -9., ..., 14., -2., 61.]),
array([ -49., -32., -37., ..., -102., -29., -24.]),
array([-72., -85., -90., ..., -13., -21., 27.]),
array([-49., -57., -71., ..., 53., 23., -41.]),
array([ 11., -5., -20., ..., 39., 17., 113.]),
array([ 90., 108., 108., ..., 43., 48., -15.]),
array([ 72., 103., 102., ..., -28., -32., -24.]),
array([ -70., -60., -44., ..., -103., -85., -165.]),
array([-50., -42., -40., ..., -95., -92., -42.]),
array([-30., -25., -12., ..., -81., -58., 1.]),
array([-59., -56., -48., ..., -19., -22., -27.]),
array([ -4., 33., 65., ..., -137., -117., -11.]),
array([31., 8., -9., ..., 90., 76., 54.]),
array([ 67., 93., 112., ..., 40., 42., 11.]),
array([ -52., -37., -27., ..., -118., -107., -37.]),
array([ 16., 24., 40., ..., -32., -29., -9.]),
array([ 2., 2., 9., ..., -14., 5., 30.]),
array([ -71., -87., -106., ..., -61., -60., -31.]),
array([ 83., 90., 62., ..., -52., -34., -155.]),
array([ 15., -6., -28., ..., 141., 88., -114.]),
array([-161., -224., -239., ..., 57., 50., 162.]),
array([ -54., -74., -89., ..., 27., -56., -136.]),
array([127., 160., 166., ..., 3., 36., -28.]),
array([-12., -8., -12., ..., -48., -50., 18.]),
array([ 72., 102., 111., ..., -31., 7., 113.]),
array([-106., -114., -114., ..., -8., -20., -86.]),
array([-77., -75., -52., ..., -42., -52., -42.]),
array([-33., -44., -45., ..., 3., -28., 14.]),
array([-21., -28., -37., ..., 33., 23., -13.]),
array([ -35., -37., -32., ..., -74., -68., -102.]),
array([ -8., -13., -24., ..., 13., -1., -44.]),
array([ 58., 67., 79., ..., 23., 49., 100.]),
array([ -49., -28., 0., ..., -135., -102., -131.]),
array([ -84., -62., -42., ..., -111., -101., -26.]),
array([ 7., 17., 4., ..., -32., -19., -13.]),
array([-134., -116., -87., ..., -142., -129., 64.]),
array([ 5., -30., -56., ..., 37., 10., 8.]),
array([ 15., 12., 0., ..., -29., -8., -28.]),
array([ -35., -27., -14., ..., -76., -54., -138.]),
array([ -27., -14., -4., ..., 8., -2., -137.]),
array([ 14., 3., -14., ..., -68., -61., -27.]),
array([ 71., 82., 62., ..., -113., -55., 8.]),
array([-43., -30., -4., ..., -1., 6., 12.]),
array([41., 31., 28., ..., 11., 24., 52.]),
array([142., 142., 138., ..., 95., 66., 142.]),
array([ 29., 20., -8., ..., 55., 33., -73.]),
array([-69., -80., -81., ..., 46., 38., -43.]),
array([18., 14., 13., ..., 65., 7., 45.]),
array([-159., -176., -174., ..., -108., -97., -110.]),
array([ -53., -15., 11., ..., -103., -77., -92.]),
array([ 8., 0., -16., ..., -45., 0., 28.]),
array([ 2., -6., -22., ..., 59., 39., -42.]),
array([-52., -56., -49., ..., -37., -44., 31.]),
array([ 87., 98., 103., ..., 36., 58., -24.]),
array([-58., -78., -83., ..., -43., -44., 9.]),
array([-14., -5., 0., ..., 76., 57., 119.]),
array([-36., -40., -36., ..., 37., 20., -39.]),
array([-55., -48., -48., ..., -84., -60., 40.]),
array([-24., -22., -17., ..., 22., 9., -74.]),
array([-42., -39., -35., ..., -37., -40., -64.]),
array([ 13., 22., 29., ..., -55., -46., -2.]),
array([-11., -23., -22., ..., 16., 13., -29.]),
array([-82., -82., -83., ..., -73., -65., -66.]),
array([-92., -85., -68., ..., -20., -16., 92.]),
array([ 38., 56., 75., ..., -52., -54., 61.]),
array([133., 129., 124., ..., 26., 37., 25.]),
array([-11., -9., -11., ..., 9., 13., -1.]),
array([-108., -120., -137., ..., 26., -3., -40.]),
array([ 7., 30., 16., ..., -33., -58., -12.]),
array([-37., -44., -48., ..., -23., -21., 25.]),
array([-69., -75., -80., ..., -66., -72., -14.]),
array([ 40., 47., 51., ..., -12., 1., 40.]),
array([ 3., 3., 6., ..., 30., 31., 25.]),
array([ -3., 4., 18., ..., -12., -12., -43.]),
array([ 4., 3., 15., ..., -64., -33., -49.]),
array([ 26., 26., 15., ..., -4., 10., -11.]),
array([-63., -61., -60., ..., -45., -46., -55.]),
array([ 1., 12., 18., ..., 22., 5., -85.]),
array([47., 45., 40., ..., 37., 30., 34.]),
array([ -41., -40., -39., ..., -116., -69., -104.]),
array([ 118., 121., 114., ..., 6., 5., -101.]),
array([-11., 3., 0., ..., -91., -79., 112.]),
array([ 23., -19., -73., ..., -9., -14., -62.]),
array([-63., -70., -78., ..., -22., -20., 12.]),
array([-29., -28., -27., ..., -57., -41., 19.]),
array([ 39., 36., 35., ..., 8., 9., -18.]),
array([-31., -36., -44., ..., -21., -23., -47.]),
array([-34., -22., -9., ..., -64., -56., -34.]),
array([ 24., 30., 46., ..., -35., -53., 162.]),
array([ 28., 33., 26., ..., 46., 42., -19.]),
array([ 37., 40., 47., ..., -24., -11., 15.]),
array([-43., -57., -86., ..., 21., -8., -43.]),
array([ 15., 25., 25., ..., -37., -34., 11.]),
array([-39., -36., -39., ..., -48., -47., 149.]),
array([ 1., -4., -3., ..., 46., 24., -11.]),
array([23., 19., 10., ..., 88., 77., 37.]),
array([ 24., 19., 14., ..., 0., 11., -49.]),
array([-1., 1., -1., ..., 53., 65., -6.]),
array([ 6., 6., 1., ..., -55., -58., 9.]),
array([-64., -56., -52., ..., 7., 1., -10.]),
array([-14., -11., -11., ..., 17., 22., -20.]),
array([-28., -20., -18., ..., 1., -3., -8.]),
array([-17., -18., -10., ..., 4., -1., -5.]),
array([-29., -36., -51., ..., 64., 31., -18.]),
array([11., 1., -7., ..., 27., 28., 4.]),
array([ 21., 15., 15., ..., 42., 35., -15.]),
array([-71., -73., -74., ..., -99., -94., -57.]),
array([ 20., 0., -29., ..., 48., 60., 68.]),
array([-35., -42., -49., ..., 28., 25., 2.]),
array([-112., -100., -107., ..., 81., 64., 102.]),
array([82., 75., 71., ..., 7., 25., 80.]),
array([ 3., 8., -19., ..., -42., -16., 92.]),
array([ 17., 22., 19., ..., 27., 25., -110.]),
array([ 0., -2., -6., ..., -3., 3., -16.]),
array([-14., -16., -22., ..., 41., 32., -29.]),
array([-27., -27., -34., ..., -10., -11., -77.]),
array([ -93., -99., -105., ..., -49., -62., -117.]),
array([ 58., 63., 49., ..., -48., -51., -59.]),
array([-21., -23., -31., ..., 6., 7., 51.]),
array([-23., -18., -18., ..., -79., -88., -35.]),
array([-57., -70., -78., ..., -48., -57., 11.]),
array([ -4., -6., -6., ..., 10., 6., 100.]),
array([-77., -78., -73., ..., -5., -34., -36.]),
array([ 24., 31., 38., ..., -2., -1., -171.]),
array([-54., -62., -65., ..., -2., -12., -71.]),
array([-55., -64., -70., ..., -34., -34., -10.]),
array([-26., -21., -8., ..., -51., -47., -17.]),
array([-58., -54., -49., ..., -42., -46., -36.]),
array([ 5., -5., -7., ..., 39., 38., -22.]),
array([-83., -84., -82., ..., -88., -80., -24.]),
array([-37., -35., -40., ..., -8., 12., 42.]),
array([ 2., -1., -6., ..., -9., -7., 23.]),
array([ -9., -10., -9., ..., 4., -2., -7.]),
array([-16., -13., -15., ..., 6., 8., -11.]),
array([-19., -23., -23., ..., 25., 25., -30.]),
array([ 108., 109., 91., ..., 12., 8., -160.]),
array([ 1., 5., 7., ..., 19., 21., -39.]),
array([ 4., -2., -6., ..., 36., 28., -38.]),
array([ 9., 8., 12., ..., 23., 20., -2.]),
array([-63., -71., -77., ..., -31., -39., -53.]),
array([-3., -2., -6., ..., 55., 55., 36.]),
array([29., 27., 20., ..., 41., 32., 49.]),
array([-132., -154., -171., ..., -8., -4., -175.]),
array([39., 35., 35., ..., 82., 72., 13.]),
array([-55., -64., -91., ..., 67., 35., -15.]),
array([-104., -100., -94., ..., -45., -59., -53.]),
array([36., 42., 50., ..., -1., 5., -4.]),
array([-31., -36., -35., ..., 14., 9., 43.]),
array([ 34., 31., 29., ..., 5., 3., -29.]),
array([-41., -35., -28., ..., 2., -7., 28.]),
array([ 74., 92., 94., ..., -11., -14., -9.]),
array([-64., -73., -79., ..., -34., -39., -53.]),
array([-27., -26., -19., ..., -78., -72., -10.]),
array([-148., -155., -156., ..., -81., -77., 95.]),
array([-76., -10., 31., ..., 209., 150., -51.]),
array([ 9., -2., -9., ..., 67., 65., -31.]),
array([-54., -56., -57., ..., -38., -42., 5.]),
array([ 50., 48., 45., ..., -14., -9., -37.]),
array([-62., -64., -62., ..., -1., 0., 41.]),
array([-45., -53., -51., ..., -26., -14., -28.]),
array([ 60., 47., 38., ..., 149., 126., 42.]),
array([ 26., 16., 13., ..., 114., 99., -130.]),
array([-41., -42., -48., ..., -30., -23., -13.]),
array([ 13., 6., -1., ..., 161., 129., 1.]),
array([-15., -2., 0., ..., -44., -42., -25.]),
array([-24., -27., -23., ..., -57., -33., -52.]),
array([ 23., 17., 10., ..., 41., 39., -55.]),
array([-263., -263., -261., ..., -316., -316., -254.]),
array([ 59., 52., 51., ..., 109., 104., -57.]),
array([ 44., 50., 46., ..., -3., -5., -112.]),
array([-23., -31., -34., ..., 26., 26., -9.]),
array([ -6., -5., -10., ..., 43., 35., 3.]),
array([ -7., -12., -14., ..., -1., -10., -35.]),
array([48., 54., 56., ..., 1., 4., 28.]),
array([-97., -91., -74., ..., -58., -58., -39.]),
array([45., 42., 33., ..., 7., 11., 11.]),
array([-42., -44., -38., ..., 104., 88., 110.]),
array([-72., -78., -90., ..., -43., -40., -22.]),
array([ 21., 16., 14., ..., 73., 68., -10.]),
array([ 85., 91., 81., ..., -92., -80., -156.]),
array([ 26., 29., 26., ..., 49., 32., -150.]),
array([-53., -63., -73., ..., 94., 76., 14.]),
array([ 18., 18., 20., ..., -55., -62., 43.]),
array([163., 162., 168., ..., 12., 43., -34.]),
array([ -3., -3., -7., ..., -9., -10., 6.]),
array([-21., -15., 2., ..., -37., -44., 5.]),
array([ 36., 30., 24., ..., -26., -8., 7.]),
array([ 27., 29., 31., ..., 72., 58., -33.]),
array([-142., -142., -133., ..., -200., -202., -153.]),
array([ 88., 77., 69., ..., 176., 146., -35.]),
array([ 46., 41., 44., ..., -84., -75., -102.]),
array([-54., -59., -60., ..., 13., 16., -4.]),
array([-11., -11., -14., ..., 39., 25., 25.]),
array([ 47., 43., 34., ..., 1., 6., -31.]),
array([ 35., 34., 34., ..., 47., 42., -11.]),
array([37., 58., 70., ..., 10., 28., 8.]),
array([-20., -32., -35., ..., 38., 29., -54.]),
array([-50., -44., -37., ..., -98., -83., -92.]),
array([ 36., 40., 40., ..., 1., 3., -10.]),
array([ 0., 8., 8., ..., -33., 0., -5.]),
array([73., 71., 69., ..., 27., 32., 27.]),
array([ -8., -11., -16., ..., 112., 91., -93.]),
array([ -48., -56., -72., ..., -41., -37., -100.]),
array([ 62., 61., 56., ..., -18., -23., 32.]),
array([ 44., 47., 38., ..., -41., -23., -32.]),
array([-57., -55., -39., ..., -7., -5., 205.]),
array([ 46., 60., 68., ..., -12., -4., 167.]),
array([-29., -40., -44., ..., 23., 15., -41.]),
array([ -7., 2., 12., ..., -47., -44., -34.]),
array([ 63., 54., 52., ..., 74., 45., -90.]),
array([-66., -70., -67., ..., -21., -29., -36.]),
array([-32., -28., -25., ..., -39., -28., -26.]),
array([ -55., -59., -64., ..., 97., 79., -151.]),
array([ 34., 43., 48., ..., -55., -52., 38.]),
array([18., 2., -8., ..., 44., 34., 48.]),
array([ -7., -8., -6., ..., -20., -17., 55.]),
array([ 2., -5., -7., ..., 18., 7., 33.]),
array([-16., -16., -20., ..., 7., 3., -20.]),
array([ 162., 164., 164., ..., -32., 19., -342.]),
array([ 92., 96., 96., ..., 100., 83., -75.]),
array([-24., -15., -5., ..., -57., -54., -30.]),
array([-50., -51., -50., ..., -31., -31., -48.]),
array([ -13., -18., -16., ..., 68., 60., -234.]),
array([ 51., 38., 34., ..., -90., -101., 2.]),
array([ 12., 17., 14., ..., 9., 14., -15.]),
array([-28., -35., -37., ..., 4., -4., -13.]),
array([56., 57., 53., ..., 28., 42., 55.]),
array([-50., -54., -56., ..., -13., -20., -59.]),
array([-20., -13., 51., ..., 15., -4., 55.]),
array([ -2., 0., 1., ..., -15., -19., 16.]),
array([-33., -55., -78., ..., 10., 13., -57.]),
array([-38., -27., -4., ..., -57., -3., -63.]),
array([ 26., 20., 20., ..., -93., -100., 7.]),
array([49., 54., 62., ..., 12., 13., 40.]),
array([-183., -183., -182., ..., -215., -209., 502.]),
array([ 8., 0., 2., ..., -79., -85., -58.]),
array([ 13., 9., 15., ..., -74., -55., -8.]),
array([-29., -23., -1., ..., -85., -84., -30.]),
array([ 11., 32., 35., ..., -34., -19., -15.]),
array([36., 46., 57., ..., 7., 13., 2.]),
array([-28., -44., -63., ..., 25., 12., -54.]),
array([ 8., 9., 10., ..., -43., -46., -9.]),
array([ 5., -7., -9., ..., 35., 28., 46.]),
array([-37., -41., -46., ..., -29., -33., -51.]),
array([133., 130., 128., ..., 129., 124., -13.]),
array([39., 41., 41., ..., 57., 60., -1.]),
array([ -3., 0., 5., ..., 22., 17., -24.]),
array([ 43., 66., 102., ..., 18., 30., -71.]),
array([18., 30., 41., ..., 2., 10., -1.]),
array([ 99., 114., 122., ..., 84., 83., 54.]),
array([-131., -153., -177., ..., -41., -46., -15.]),
array([ 1., -4., -6., ..., -12., -10., 22.]),
array([-41., -41., -48., ..., 16., 12., -8.]),
array([-39., -27., -16., ..., -34., -39., -56.]),
array([45., 52., 79., ..., 18., 28., 35.]),
array([ 75., 72., 72., ..., -40., -43., 106.]),
array([67., 86., 99., ..., 17., 10., 26.]),
array([ 5., 2., -6., ..., 36., 36., -5.]),
array([34., 33., 28., ..., 39., 41., 7.]),
array([ 142., 262., 382., ..., -201., -140., -362.]),
array([-476., -518., -521., ..., 246., 556., 276.]),
array([-438., -561., -622., ..., -118., -163., -56.]),
array([ 187., 44., -147., ..., 703., 446., -537.]),
array([ -40., -58., -75., ..., -13., -16., -151.]),
array([-113., -185., -269., ..., 148., 111., -235.]),
array([-155., -283., -456., ..., -27., -85., -449.]),
array([ 308., 367., 413., ..., -557., -305., -859.]),
array([ -26., 1., 29., ..., -207., -210., -107.]),
array([-129., -309., -432., ..., 12., -254., -57.]),
array([ 134., 390., 446., ..., -153., -62., 72.]),
array([ 151., 25., -82., ..., 84., 119., -226.]),
array([80., 86., 91., ..., 54., 78., 89.]),
array([286., 251., 214., ..., 334., 188., 315.]),
array([ 43., 59., 69., ..., 27., 69., 105.]),
array([ 184., -160., -569., ..., 668., 530., 314.]),
array([-24., -29., -17., ..., -7., -7., 43.]),
array([ -34., -11., 8., ..., -203., -156., 24.]),
array([-127., -164., -184., ..., 110., 89., 716.]),
array([235., 168., 113., ..., 375., 354., 607.]),
array([249., 235., 220., ..., 231., 257., 327.]),
array([-459., -778., -981., ..., -8., -11., 949.]),
array([-177., -237., -266., ..., -70., -81., 44.]),
array([122., 117., 116., ..., -23., 55., 51.]),
array([ -985., -594., -120., ..., -1073., -734., -1111.]),
array([ 45., 51., 62., ..., -5., 9., -282.]),
array([ -21., -17., -16., ..., -230., -207., -32.]),
array([-133., -181., -166., ..., 95., 19., 385.]),
array([ 271., 291., 267., ..., -263., -229., -289.]),
array([ 61., 42., 23., ..., 318., 261., 177.]),
array([ -62., -87., -129., ..., -29., -23., 313.]),
array([ 68., -106., -149., ..., 343., 247., -468.]),
array([ -114., -248., -388., ..., 484., 397., -1566.]),
array([ 555., 611., 658., ..., 347., 369., -1468.]),
array([-358., -378., -365., ..., 50., 34., 62.]),
array([-300., -334., -341., ..., -142., -142., -184.]),
array([ 22., -67., -184., ..., 149., 69., 158.]),
array([ 224., 199., 149., ..., -56., -56., -101.]),
array([249., 218., 176., ..., 367., 299., 26.]),
array([-192., -207., -202., ..., 29., -149., -109.]),
array([ 509., 495., 464., ..., -175., 166., -448.]),
array([-635., -573., -525., ..., -370., -415., -593.]),
array([-187., -132., -53., ..., -130., -150., 375.]),
array([ 29., -68., -143., ..., 135., 81., 194.]),
array([ 39., 152., 257., ..., -94., -97., -108.]),
array([ -22., -63., -90., ..., 74., 60., -106.]),
array([111., 112., 125., ..., 211., 181., -51.]),
array([ 119., 125., 129., ..., -213., -180., 221.]),
array([-235., -94., 116., ..., -365., -274., 149.]),
array([ 98., 88., 76., ..., 244., 184., 70.]),
array([-183., -188., -199., ..., -174., -170., -141.]),
array([-224., -334., -411., ..., 380., 294., 32.]),
array([ 401., 577., 667., ..., -94., -77., -202.]),
array([ -10., -658., -1254., ..., 678., 540., -1852.]),
array([466., 481., 440., ..., -72., -67., 523.]),
array([-149., -145., -135., ..., -27., -27., 228.]),
array([-166., -204., -209., ..., 368., 313., 51.]),
array([-285., -308., -312., ..., -67., -55., -107.]),
array([-265., -440., -627., ..., -55., -74., -4.]),
array([ 15., -218., -643., ..., 271., 259., 159.]),
array([284., 358., 122., ..., 48., 95., 211.]),
array([-71., -83., -95., ..., 100., 94., 59.]),
array([264., 372., 410., ..., -5., 27., 464.]),
array([ 530., 523., 424., ..., 327., 285., -925.]),
array([258., 309., 308., ..., 66., 73., 206.]),
array([-458., -669., -914., ..., 356., 87., 215.]),
array([ -18., -55., -126., ..., -200., -127., -226.]),
array([216., 182., 146., ..., 355., 218., 391.]),
array([ -9., 68., 195., ..., -135., -129., -82.]),
array([-156., -74., 51., ..., -269., 30., -190.]),
array([475., 501., 477., ..., 103., 136., 55.]),
array([ 59., 37., 25., ..., 366., 199., -224.]),
array([-345., -166., 91., ..., -472., -302., 940.]),
array([ -782., -1221., -1406., ..., 96., -299., -279.]),
array([ 231., 214., 187., ..., 243., 198., -231.]),
array([-445., -645., -652., ..., 264., 219., -346.]),
array([ -40., -187., -254., ..., 478., 288., 87.]),
array([ 27., 55., 75., ..., -476., -307., -21.]),
array([ -54., -26., 20., ..., -470., -365., 28.]),
array([ 213., 210., 210., ..., -2., 20., -231.]),
array([ 1., -47., -100., ..., 77., 78., -320.]),
array([-501., -540., -523., ..., 418., 345., -230.]),
array([ -46., -43., -37., ..., -116., -128., 107.]),
array([ 800., 839., 857., ..., -670., -296., -677.]),
array([-115., -117., -127., ..., -14., -17., -25.]),
array([-174., -392., -470., ..., 187., 157., -260.]),
array([ -63., -107., -208., ..., 44., -37., 28.]),
array([746., 692., 562., ..., 565., 677., 11.]),
array([ 457., 420., 344., ..., -226., -206., 1002.]),
array([ 23., 144., 228., ..., -155., 6., -221.]),
array([ 374., -205., -871., ..., 633., 503., 803.]),
array([-377., -379., -396., ..., -89., -132., -279.]),
array([ 661., 721., 702., ..., 12., 29., -211.]),
array([ 176., 186., 189., ..., 101., 99., -554.]),
array([ -88., -115., -140., ..., 146., 140., 191.]),
array([343., 311., 284., ..., 480., 397., 217.]),
array([ 84., 75., 21., ..., -209., -165., -212.]),
array([-310., 93., 494., ..., -721., -491., 910.]),
array([340., 353., 400., ..., 512., 130., 196.]),
array([100., 124., 153., ..., 57., 95., 462.])]
eeg["measurements"][0]
array([ 40., 48., 35., ..., -34., -27., -42.])
len(eeg["measurements"][0])
4097
type(eeg["measurements"][0])
numpy.ndarray
type(eeg)
dict
eeg.keys()
dict_keys(['times', 'measurements', 'classes', 'archive', 'header'])
type(eeg['measurements'])
list
len(eeg['measurements'])
500
eeg['measurements'][0].shape
(4097,)
cesium으로 특징을 생성하는 방법¶
from cesium import featurize as ft
features_to_use = ["amplitude",
"percent_beyond_1_std",
"percent_close_to_median",
"skew",
"max_slope"]
fset_cesium = ft.featurize_time_series(times=eeg["times"],
values=eeg["measurements"],
errors=None,
features_to_use=features_to_use,
scheduler = None)
fset_cesium
feature | amplitude | percent_beyond_1_std | percent_close_to_median | skew | max_slope |
---|---|---|---|---|---|
channel | 0 | 0 | 0 | 0 | 0 |
0 | 143.5 | 0.327313 | 0.505004 | 0.032805 | 11107.796610 |
1 | 211.5 | 0.290212 | 0.640469 | -0.092715 | 20653.559322 |
2 | 165.0 | 0.302660 | 0.515987 | -0.004100 | 13537.627119 |
3 | 171.5 | 0.300952 | 0.541128 | 0.063678 | 17008.813559 |
4 | 170.0 | 0.305101 | 0.566268 | 0.142753 | 13016.949153 |
... | ... | ... | ... | ... | ... |
495 | 876.5 | 0.368318 | 0.364413 | -0.472757 | 94242.711864 |
496 | 433.0 | 0.361728 | 0.394923 | 0.046880 | 27595.932203 |
497 | 1359.0 | 0.270442 | 0.628265 | -0.468130 | 243156.610169 |
498 | 1590.0 | 0.305589 | 0.489138 | -0.674034 | 176856.949153 |
499 | 1396.0 | 0.225775 | 0.606785 | -1.347758 | 131037.288136 |
500 rows × 5 columns
*정규화되지 않은 값이 많다는 사실 유의(일부 기법은 정규화된 input을 가정)
- 잘 생성되었나 검증해보자
- 오류 검사와 상식적인 확인의 한 예로, 시계열 샘플의 percent_beyond_1_std 확인 가능
std = np.std(eeg['measurements'][0])
std
40.41100040099819
mean = np.mean(eeg['measurements'][0])
mean
-4.1320478398828415
sample_ts = eeg['measurements'][0]
sz = len(sample_ts)
ll = mean - std
ul = mean + std
quals = [i for i in range(sz) if sample_ts[i] < ll or
sample_ts[i] > ul]
len(quals) / sz
0.3273126678057115
fset_cesium.iloc[0, 1]
0.3273126678057115
특징 생성 라이브러리를 과하기 사용하지 말자.
자신만의 특징 생성용 코드를 작성해두자.
패키지가 제공할 수 없는 코드의 최적화가 가능하기 때문.
가령 시계열의 평균에 의존적인 여러 특징이 있다면, 평균을 매번 계산하기보다 한 번만 계산하는 코드를 작성할 수 있음.
1.2 결정 트리 기법¶
- 결정 트리(Decision Tree, 의사결정나무라고도 함)는, 나무 형태의 판단 규칙 조합을 만들어서 기존 데이터를 학습하고 그 다음에 예측하는 알고리즘을 말한다. 쉽게 생각하면 어렸을 적의 ‘스무고개’ 놀이와 같은 개념이다(삼성증권 김동영, 2019).
한 번에 한 단계씩, 비선형적인 방식으로 결정
한 번에 한 단계씩, 한 변수가 결정에 미치는 영향력을 생각하는 과정 반복
1.2.1 랜덤포레스트¶
- 앞서 언급한 ‘결정 트리’ 모델에 배깅(bagging, bootstrap aggregating) 기법을 적용한 앙상블 모델을, 특별히‘랜덤 포레스트’ 모델이라고 한다. 하나의 데이터 소스에서 랜덤하게 데이터들을 만들어 여러 개의 학습된 결정 트리 모델을 만들고 이를 종합하는 방식이다(삼성증권 김동영, 2019).
- 하나가 아닌, 여러 개의 결정 트리 사용
- 분류 혹은 회귀의 결과는 각 트리가 내놓은 출력의 평균을 사용
- 여러 간단한 결정 트리 모델을 합쳐 '군중의 지혜' 효과 기대(단 하나의 최고의 모델을 찾는 대산, 여러 모델 무리를 앙상블하여 예측)
- 랜덤포레스트는 학습될 트리의 개수, 각 트리에 허용되는 최대 깊이에 대한 파라미터에 따라 구조가 결정됨
- 각 개별 트리는 임의로 선정된 데이터 표본과 특징으로 학습됨
- 각 트리는 과적합을 피할 수 있도록 꽤 간단한 파라미터로 구성하는 것이 일반적
- 일반화된 여러 모델이 협력해 평균 도출
- 충분히 일반화된 결과 도출 가능
각 시계열 샘플의 계산된 특징을 모델에 입력.
원시 시계열 데이터는 다음의 잠재적인 문제를 가지고 있음
- 균일하지 않은 길이의 시계열을 다루는 건 복잡함
- (시간 단계의 개수와 동등한 수준의) 대규모 입력은 계산 비용이 비싼 모델과 학습 과정의 결과를 초래
- (모든 시간 단계는 한 특징으로 매핑되기 때문에) 특정 시간 단계가 매우 중요하지 않다고 가정하면, 트리 관점에서는 시간 단계를 개별 입력으로 봐서 매우 심한 노이즈와 약한 신호만 존재
따라서 원시 시계열 데이터로 작업할 때, 랜덤포레스트가 좋은 도구는 아님. 그러나 원시 데이터가 특징들로 압축되어 요약되면 매우 유용할 수 있다.
- 유용성을 뒷받침하는 구체적인 이유
- 효율성/계산 자원 관점에서, 매우 긴 시계열을 소수의 특징으로 추출하고 의미 있는 정확도를 가진 모델을 찾을 수 있다는 건 훌륭하다.
- 랜덤포레스트는 과적합의 위험을 줄이는 데 좋다. 고의적으로 단순한 방법을 사용하면 이런 우려의 일부를 해결할 수 있다.
- 랜덤포레스트는 process의 기본 동작에 대해 작동하는 모델이나, 가설이 없는 시계열 데이터에 특히 적합할 수 있다.
일반적으로 랜덤포레스트는 시계열 예측보다 시계열 분류에서 더 많은 성공을 거두었다.
1.2.2 그레이디언트 부스팅 트리¶
- Boosting은 모델들의 앙상블을 구축하는 또 다른 방법
- 차례대로 생성되는 모델 중, 나중에 생성되는 모델이 이전 모델의 실수를 바로잡는 방향을 가짐
- 즉 이전 모델에서 잘못 적합된 데이터는 나중 모델에서 더 큰 가중치를 가지게 되는 방식
- 그레이디언트 부스팅에 대해 잘 모른다면 참고:
XGBoost는 트리를 차례대로 만든다. 이때 각 트리는 이전 트리들의 결합에 대한 잔차를 예측한다.
가령 XGBoost로 구축된 첫 번째 트리는 데이터와 일치하려고 시도하고, 두 번째 트리는 참값(target)에서 예측된 값을 뺀 잔차를 예측한다. 세 번째 트리는 참값에서 첫 번째 트리가 예측한 값, 첫 번째 트리의 잔차에 대해 두 번째 트리가 예측한 값을 뺀 것을 예측한다.
# 학습용, 테스트용 데이터셋 분리
from sklearn.model_selection import train_test_split # 혼공머신 Ch.2에서도 나왔던 것
X_train, X_test, y_train, y_test = train_test_split(fset_cesium.values, eeg['classes'], random_state=21)
fset_cesium.values
array([[ 1.43500000e+02, 3.27312668e-01, 5.05003661e-01,
3.28049964e-02, 1.11077966e+04],
[ 2.11500000e+02, 2.90212351e-01, 6.40468636e-01,
-9.27149921e-02, 2.06535593e+04],
[ 1.65000000e+02, 3.02660483e-01, 5.15987308e-01,
-4.09990842e-03, 1.35376271e+04],
...,
[ 1.35900000e+03, 2.70441787e-01, 6.28264584e-01,
-4.68130248e-01, 2.43156610e+05],
[ 1.59000000e+03, 3.05589456e-01, 4.89138394e-01,
-6.74033914e-01, 1.76856949e+05],
[ 1.39600000e+03, 2.25774957e-01, 6.06785453e-01,
-1.34775823e+00, 1.31037288e+05]])
eeg['classes']
array(['Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z',
'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z',
'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z',
'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z',
'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z',
'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z',
'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z',
'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'Z', 'O', 'O', 'O', 'O',
'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O',
'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O',
'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O',
'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O',
'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O',
'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O',
'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O',
'O', 'O', 'O', 'O', 'O', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N',
'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N',
'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N',
'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N',
'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N',
'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N',
'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N',
'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N',
'N', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F',
'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F',
'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F',
'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F',
'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F',
'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F',
'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F',
'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'F', 'S', 'S', 'S',
'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S',
'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S',
'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S',
'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S',
'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S',
'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S',
'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S', 'S',
'S', 'S', 'S', 'S', 'S', 'S'], dtype='<U1')
X_train
array([[ 1.06750000e+03, 2.97778863e-01, 5.87503051e-01,
-6.26535406e-03, 1.01705763e+05],
[ 1.83500000e+02, 2.49938980e-01, 6.09714425e-01,
-9.37163974e-01, 1.18020339e+04],
[ 2.25000000e+02, 3.15596778e-01, 5.30388089e-01,
-1.15128193e-01, 1.38847458e+04],
...,
[ 8.95000000e+01, 3.15108616e-01, 5.25018306e-01,
-2.69978337e-01, 5.55389831e+03],
[ 9.40000000e+01, 3.08762509e-01, 5.15255065e-01,
-1.85895885e-01, 3.29762712e+03],
[ 3.75500000e+02, 3.19257994e-01, 4.91335123e-01,
-1.47063561e-01, 2.18684746e+04]])
y_train
array(['S', 'N', 'O', 'F', 'F', 'Z', 'N', 'Z', 'O', 'O', 'O', 'O', 'N',
'F', 'N', 'O', 'S', 'F', 'Z', 'S', 'O', 'S', 'F', 'O', 'N', 'Z',
'O', 'S', 'N', 'Z', 'O', 'N', 'F', 'F', 'S', 'Z', 'F', 'O', 'Z',
'O', 'S', 'Z', 'O', 'Z', 'N', 'S', 'Z', 'O', 'N', 'F', 'O', 'Z',
'O', 'S', 'O', 'O', 'O', 'O', 'S', 'F', 'O', 'S', 'F', 'F', 'S',
'Z', 'N', 'Z', 'F', 'S', 'F', 'S', 'S', 'S', 'Z', 'Z', 'O', 'F',
'S', 'Z', 'O', 'Z', 'O', 'Z', 'N', 'F', 'Z', 'Z', 'Z', 'F', 'F',
'Z', 'F', 'F', 'O', 'O', 'O', 'O', 'N', 'O', 'S', 'F', 'Z', 'N',
'F', 'O', 'O', 'F', 'N', 'O', 'F', 'N', 'F', 'F', 'S', 'S', 'S',
'N', 'F', 'S', 'O', 'S', 'O', 'F', 'F', 'F', 'F', 'O', 'S', 'S',
'S', 'S', 'F', 'Z', 'N', 'O', 'O', 'Z', 'Z', 'Z', 'Z', 'O', 'N',
'Z', 'Z', 'Z', 'N', 'N', 'F', 'Z', 'O', 'O', 'Z', 'S', 'O', 'N',
'O', 'Z', 'Z', 'F', 'Z', 'N', 'Z', 'F', 'Z', 'Z', 'N', 'N', 'S',
'F', 'S', 'O', 'F', 'F', 'O', 'O', 'S', 'N', 'F', 'O', 'F', 'S',
'S', 'S', 'O', 'O', 'S', 'N', 'O', 'N', 'S', 'S', 'Z', 'N', 'N',
'S', 'S', 'N', 'O', 'S', 'F', 'F', 'S', 'N', 'N', 'S', 'S', 'S',
'Z', 'F', 'F', 'F', 'O', 'S', 'Z', 'Z', 'Z', 'F', 'S', 'Z', 'F',
'Z', 'S', 'S', 'N', 'O', 'S', 'S', 'N', 'N', 'O', 'F', 'Z', 'Z',
'Z', 'S', 'N', 'Z', 'O', 'S', 'O', 'S', 'F', 'N', 'F', 'N', 'S',
'Z', 'F', 'S', 'Z', 'F', 'Z', 'F', 'F', 'N', 'F', 'F', 'O', 'N',
'Z', 'S', 'O', 'Z', 'F', 'F', 'Z', 'N', 'O', 'F', 'F', 'S', 'S',
'O', 'O', 'F', 'N', 'N', 'N', 'Z', 'O', 'Z', 'F', 'N', 'N', 'O',
'Z', 'O', 'O', 'N', 'N', 'O', 'Z', 'Z', 'Z', 'Z', 'O', 'F', 'O',
'S', 'S', 'Z', 'O', 'O', 'S', 'N', 'N', 'S', 'S', 'N', 'S', 'N',
'F', 'F', 'O', 'N', 'F', 'S', 'F', 'F', 'O', 'Z', 'F', 'F', 'N',
'F', 'N', 'N', 'S', 'N', 'S', 'N', 'Z', 'N', 'F', 'S', 'N', 'S',
'Z', 'S', 'N', 'N', 'O', 'O', 'O', 'N', 'F', 'O', 'F', 'Z', 'F',
'N', 'F', 'O', 'N', 'S', 'N', 'N', 'F', 'S', 'S', 'O', 'F', 'N',
'N', 'Z', 'O', 'S', 'O', 'F', 'Z', 'N', 'F', 'N', 'S'], dtype='<U1')
# 랜덤포레스트를 사용해 EEG 데이터를 분류하는 모델 생성
from sklearn.ensemble import RandomForestClassifier
rf_clf = RandomForestClassifier(n_estimators = 10,
max_depth = 3,
random_state = 21)
rf_clf.fit(X_train, y_train)
RandomForestClassifier(max_depth=3, n_estimators=10, random_state=21)
- max_depth: 루트 노드와 리프 노드 사이의 가장 긴 경로
- n_estimators: 나무 개수 (위 삼성증권 자료에서의 페이지 수라고 생각하면 됨)
# score method로 학습에 사용되지 않은 테스트 데이터셋에 대한 정확도 결정
rf_clf.score(X_test, y_test)
0.616
약간의 코드 작성으로 (의학에 대해 모르는) 사람이 직접 분류하는 것보다 더 나은 모델을 만들었다. 이 모델은 전체 EEG 데이터 대신, 요약 통계를 입력으로 사용한 것으로, 좋은 특징이 선택된 덕분이라는 것을 기억하자.
# XGBoost
import xgboost as xgb
xgb_clf = xgb.XGBClassifier(n_estimators = 10,
max_depth = 3,
random_state = 21)
xgb_clf.fit(X_train, y_train)
xgb_clf.score(X_test, y_test)
0.648
# 모델 학습에 소요된 시간 계산
start = time.time()
xgb_clf.fit(X_train, y_train)
end = time.time()
print(f'XGBoost 학습 소요 시간: {end - start}')
start = time.time()
rf_clf.fit(X_train, y_train)
end = time.time()
print(f'Random Forest 학습 소요 시간: {end - start}')
XGBoost 학습 소요 시간: 0.024992942810058594
Random Forest 학습 소요 시간: 0.01795220375061035
(일반적으로 XHBoost가 더 짧게 걸린다고 하는데.. 여긴 반대로 나와 있음. 그러나 상기 코드는 성능 테스트를 수행하는 방법이 아니라는 점을 인지하자.)
두 앙상블에 대해 통일한 트리 개수를 부여하고, 트리들의 깊이를 제한해서 복잡도를 낮춘 경우.
xgb_clf = xgb.XGBClassifier(n_estimators = 10,
max_depth = 1,
random_state = 21)
xgb_clf.fit(X_train, y_train)
print(xgb_clf.score(X_test, y_test))
from sklearn.ensemble import RandomForestClassifier
rf_clf = RandomForestClassifier(n_estimators = 10,
max_depth = 1,
random_state = 21)
rf_clf.fit(X_train, y_train)
print(rf_clf.score(X_test, y_test))
0.632
0.376
xgb_clf = xgb.XGBClassifier(n_estimators = 100,
max_depth = 10,
random_state = 21)
xgb_clf.fit(X_train, y_train)
print(xgb_clf.score(X_test, y_test))
from sklearn.ensemble import RandomForestClassifier
rf_clf = RandomForestClassifier(n_estimators = 100,
max_depth = 10,
random_state = 21)
rf_clf.fit(X_train, y_train)
print(rf_clf.score(X_test, y_test))
0.6
0.64
모델 세부 튜닝: 최적 하이퍼파라미터 찾기
랜덤 포레스트를 비롯한 많은 머신러닝 모델들은 여러 가지 하이퍼파라미터(모델 외적인 조정 변수)를 가진다. 하이퍼파라미터의 설정에 따라서, 모델의 성능이 차이가 크게 날 수 있다. 따라서, 머신러닝 기법에서는 trial and error 방식으로 하이퍼파라미터를 조금씩 바꿔가면서 모델을 여러 번 테스트해, 최적의 파라미터 세팅을 찾는 기법을 많이 쓴다. 이 때 RandomizedSearchCV가 사용된다. RandomizedSearchCV는 최적 파라미터를 찾을 때 랜덤하게 적절한 수의 조합으로 테스트를 해주는 객체다.
(출처: 김동영. “코스피 단기예측 AI 모델: 랜덤 포레스트 기법을 활용한 머신러닝 기반 모델.” 삼성증권 Quantitative Issue:, 2019, 20.)
param_dist_rf = {
'n_estimators': list(range(10, 310, 50)),
'max_depth': list(range(1, 20, 1))
}
rf_search = RandomizedSearchCV(rf_clf, param_dist_rf, cv=10, random_state=21)
rf_search.fit(X_train, y_train)
print(rf_search.best_params_)
{'n_estimators': 110, 'max_depth': 11}
rf_clf = RandomForestClassifier(n_estimators = 110,
max_depth = 11,
random_state = 21)
rf_clf.fit(X_train, y_train)
print(rf_clf.score(X_test, y_test))
0.632
param_dist_rf = {
'n_estimators': list(range(10, 310, 50)),
'max_depth': list(range(1, 20, 1))
}
xgb_search = RandomizedSearchCV(xgb_clf, param_dist_rf, cv=10, random_state=21)
xgb_search.fit(X_train, y_train)
print(xgb_search.best_params_)
{'n_estimators': 60, 'max_depth': 2}
xgb_clf = xgb.XGBClassifier(n_estimators = 60,
max_depth = 2,
random_state = 21)
xgb_clf.fit(X_train, y_train)
print(xgb_clf.score(X_test, y_test))
0.712
- 이유
- 분류 작업에 선택된 모든 특징들이 유용하지는 않을 수 있음
- 부스팅은 항상 모든 특징을 사용하고, 관련도가 높은 것에 특혜를 줘서 의미 없는 특징이 무시될 가능성이 높음
- 배깅(랜덤포레스트)은 덜 의미 있는 특징을 사용하도록 강요 받을 수 있음
- 때문에 현실적으로 점검 불가능한 수준으로, 수백 개에 달하는 시계열의 특징을 생성할 때, 부스팅은 최악의 결과에 대한 일종의 안전 장치가 될 수 있다.
여러 통계학자는 예측에 있어서 머신러닝이 전통적인 통계 분석보다 덜 성공했다고 주장한다. 그러나 그레이디언트 부스팅 트리가 등장한 이래로, 큰 데이터가 주어질 때 머신러닝이 전통적인 통계 모델의 성능을 앞지른 경우를 많이 볼 수 있다.
그레이디언트 부스팅 트리 모델의 한 가지 장점은 '자율적으로' 접근하는 능력을 가졌다는 것이다.
즉 모델이 스스로 관련성이 적거나 노이즈가 많은 특징은 제거하고, 가장 중요한 특징들에 초점을 맞춘다는 것이다.
그러나 아무리 좋아봐야 input 데이터를 뛰어넘을 수는 없다.
모델을 향상시키기 위한 가장 중요한 벙법은 검증된 고품질 input 특징을 제공하는 것이다.
- 모델을 향상하는 여러 방법
- XGBoost 옵션으로 생성 가능한 특징 중 요도 이용
- 특징의 유용성 파악에 도움
- 유용하다고 판단된 특징과 유사한 특징을 추가하는 방식으로 데이터셋 확장 가능
- 하이퍼파라미터 격자 탐색으로 모델 파라미터 조정
- 원시 시계열의 잘못 레이블링된 데이터 찾아보고, 현재 모델에 사용된 특징으로 표현 가능한지 확인
- 잘못 레이블링된 데이터를 보다 잘 묘사하는 특징을 추가해, input을 보강
- XGBoost 옵션으로 생성 가능한 특징 중 요도 이용
! pip install dtaidistance
Collecting dtaidistance
Downloading dtaidistance-2.3.6.tar.gz (797 kB)
|████████████████████████████████| 797 kB 5.5 MB/s
Installing build dependencies ... done
Getting requirements to build wheel ... done
Preparing wheel metadata ... done
Requirement already satisfied: numpy in /usr/local/lib/python3.7/dist-packages (from dtaidistance) (1.19.5)
Building wheels for collected packages: dtaidistance
Building wheel for dtaidistance (PEP 517) ... done
Created wheel for dtaidistance: filename=dtaidistance-2.3.6-cp37-cp37m-linux_x86_64.whl size=1592312 sha256=cff14d7ae94aa9057f182ca29eda155968f671af25119665fc88c5aef9a4a8fb
Stored in directory: /root/.cache/pip/wheels/a4/04/e5/ff7fd821276e7ec68893652d36b6a13f230ecdcafdc3283b3f
Successfully built dtaidistance
Installing collected packages: dtaidistance
Successfully installed dtaidistance-2.3.6
%matplotlib inline
import matplotlib.pyplot as plt
plt.rcParams['figure.figsize'] = [15, 10]
from math import sqrt
from datetime import datetime
import pandas as pd
import numpy as np
import pdb
from scipy.cluster.hierarchy import dendrogram, linkage
from scipy.spatial.distance import squareform
from sklearn.metrics.pairwise import pairwise_distances
from sklearn import preprocessing
from sklearn.cluster import AgglomerativeClustering
from sklearn.metrics.cluster import homogeneity_score, completeness_score
from sklearn.metrics.cluster import contingency_matrix
from sklearn.metrics.cluster import homogeneity_score
from dtaidistance import dtw
from collections import Counter
from scipy.stats import pearsonr
2. 클러스터링¶
기본 개념: 분석의 목적상 서로 유사한 데이터가 의미 있는 집단을 구성한다는 것
(시계열 데이터뿐이 아니라 다른 데이터에도 적용됨)
클러스터링 기법에 대해 잘 모른다면,
words = pd.read_csv('https://raw.githubusercontent.com/AileenNielsen/TimeSeriesAnalysisWithPython/master/data/50words_TEST.csv',
header = None)
words
0 | 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 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | ... | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 4 | -0.89094 | -0.86099 | -0.82438 | -0.78214 | -0.73573 | -0.68691 | -0.637540 | -0.589370 | -0.543420 | -0.500440 | -0.460820 | -0.424690 | -0.39240 | -0.36389 | -0.339060 | -0.317950 | -0.300560 | -0.286920 | -0.277270 | -0.271050 | -0.267770 | -0.266780 | -0.267420 | -0.269270 | -0.272020 | -0.275290 | -0.278980 | -0.283200 | -0.288140 | -0.294310 | -0.301850 | -0.310860 | -0.321350 | -0.333260 | -0.346500 | -0.361030 | -0.376590 | -0.39297 | -0.409950 | ... | 0.052471 | -0.01492 | -0.082568 | -0.14848 | -0.21193 | -0.27229 | -0.32905 | -0.38303 | -0.432220 | -0.476280 | -0.515870 | -0.55188 | -0.58534 | -0.61763 | -0.64653 | -0.67227 | -0.69521 | -0.71576 | -0.735170 | -0.752860 | -0.76798 | -0.78120 | -0.79326 | -0.80474 | -0.81719 | -0.82831 | -0.837680 | -0.845380 | -0.85165 | -0.85731 | -0.86309 | -0.86791 | -0.87271 | -0.87846 | -0.88592 | -0.89619 | -0.90783 | -0.91942 | -0.93018 | -0.93939 |
1 | 12 | -0.78346 | -0.68562 | -0.58409 | -0.47946 | -0.37398 | -0.27008 | -0.172250 | -0.087463 | -0.019191 | 0.035301 | 0.080601 | 0.121210 | 0.16167 | 0.20223 | 0.239730 | 0.273860 | 0.305240 | 0.334170 | 0.364750 | 0.399670 | 0.436950 | 0.474700 | 0.509190 | 0.534400 | 0.547550 | 0.549650 | 0.542360 | 0.529090 | 0.515230 | 0.503070 | 0.491830 | 0.482130 | 0.472450 | 0.459290 | 0.443090 | 0.424040 | 0.400530 | 0.37585 | 0.351890 | ... | 0.711070 | 0.64773 | 0.579890 | 0.50674 | 0.42767 | 0.34155 | 0.24849 | 0.15221 | 0.056228 | -0.036684 | -0.123520 | -0.20472 | -0.28299 | -0.35917 | -0.43397 | -0.50794 | -0.57864 | -0.64302 | -0.700170 | -0.749010 | -0.78785 | -0.81818 | -0.84200 | -0.85809 | -0.86830 | -0.87519 | -0.877210 | -0.876610 | -0.87728 | -0.87899 | -0.88318 | -0.89189 | -0.90290 | -0.91427 | -0.92668 | -0.93966 | -0.95244 | -0.96623 | -0.98050 | -0.99178 |
2 | 13 | -1.32560 | -1.28430 | -1.21970 | -1.15670 | -1.09980 | -1.04960 | -1.015500 | -0.996720 | -0.985040 | -0.971990 | -0.964030 | -0.963550 | -0.96236 | -0.95077 | -0.917330 | -0.871050 | -0.817930 | -0.760640 | -0.701060 | -0.644150 | -0.594710 | -0.529310 | -0.409210 | -0.205990 | 0.066333 | 0.344810 | 0.565100 | 0.703590 | 0.785270 | 0.840450 | 0.870940 | 0.857640 | 0.775790 | 0.634510 | 0.480380 | 0.351620 | 0.241000 | 0.11593 | -0.022140 | ... | -0.443510 | -0.43741 | -0.444480 | -0.45708 | -0.46691 | -0.47419 | -0.47495 | -0.46916 | -0.456730 | -0.439730 | -0.421350 | -0.40614 | -0.40352 | -0.41293 | -0.42965 | -0.44611 | -0.45623 | -0.46585 | -0.484310 | -0.520100 | -0.56853 | -0.61788 | -0.65943 | -0.68651 | -0.70204 | -0.71318 | -0.726460 | -0.745680 | -0.77144 | -0.80390 | -0.83499 | -0.86204 | -0.88559 | -0.90454 | -0.93353 | -0.99135 | -1.06910 | -1.13680 | -1.19800 | -1.27000 |
3 | 23 | -1.09370 | -1.04200 | -0.99840 | -0.95997 | -0.93997 | -0.93764 | -0.926490 | -0.857090 | -0.693320 | -0.312890 | 0.339420 | 0.989090 | 1.33000 | 1.34950 | 1.222900 | 1.044500 | 0.829670 | 0.602100 | 0.365250 | 0.128330 | -0.046387 | -0.165640 | -0.265030 | -0.362500 | -0.449520 | -0.510830 | -0.562550 | -0.608530 | -0.635880 | -0.632320 | -0.597000 | -0.520320 | -0.427310 | -0.291990 | -0.066752 | 0.241280 | 0.610500 | 0.96181 | 1.211600 | ... | 1.115600 | 1.76630 | 2.558000 | 3.33430 | 3.84940 | 3.90180 | 3.62190 | 3.18950 | 2.623000 | 2.031000 | 1.497900 | 1.00600 | 0.55445 | 0.16993 | -0.12355 | -0.31586 | -0.43344 | -0.50570 | -0.532680 | -0.536880 | -0.54374 | -0.56792 | -0.60857 | -0.63638 | -0.64471 | -0.64440 | -0.653820 | -0.669570 | -0.69135 | -0.71082 | -0.72810 | -0.74512 | -0.76376 | -0.78068 | -0.80593 | -0.84350 | -0.89531 | -0.96052 | -1.05090 | -1.12830 |
4 | 4 | -0.90138 | -0.85228 | -0.80196 | -0.74932 | -0.69298 | -0.63316 | -0.570380 | -0.506920 | -0.446040 | -0.390180 | -0.339310 | -0.292310 | -0.24833 | -0.20635 | -0.165850 | -0.127190 | -0.091931 | -0.059946 | -0.030921 | -0.004628 | 0.018364 | 0.038239 | 0.054732 | 0.067206 | 0.075442 | 0.080507 | 0.083344 | 0.083628 | 0.081179 | 0.075684 | 0.066456 | 0.051670 | 0.032078 | 0.008739 | -0.017323 | -0.046021 | -0.075800 | -0.10581 | -0.136220 | ... | -0.394410 | -0.37672 | -0.357160 | -0.33905 | -0.32255 | -0.30807 | -0.29818 | -0.29607 | -0.300260 | -0.310800 | -0.328090 | -0.35262 | -0.38035 | -0.41034 | -0.44236 | -0.47573 | -0.50864 | -0.54145 | -0.575060 | -0.608890 | -0.64237 | -0.67593 | -0.71042 | -0.74502 | -0.77959 | -0.81402 | -0.848050 | -0.879590 | -0.90785 | -0.93276 | -0.95452 | -0.97322 | -0.98984 | -1.00520 | -1.01880 | -1.02960 | -1.03700 | -1.04110 | -1.04180 | -1.04030 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
450 | 11 | -0.89862 | -0.85293 | -0.78905 | -0.70726 | -0.61085 | -0.50441 | -0.392470 | -0.280390 | -0.174080 | -0.076882 | 0.008894 | 0.081224 | 0.14049 | 0.18779 | 0.223500 | 0.247470 | 0.260450 | 0.263160 | 0.256140 | 0.242740 | 0.226750 | 0.210640 | 0.196780 | 0.186660 | 0.179380 | 0.172280 | 0.164110 | 0.153280 | 0.136730 | 0.114840 | 0.088567 | 0.058478 | 0.026118 | -0.005642 | -0.035135 | -0.062688 | -0.087383 | -0.10948 | -0.131200 | ... | -0.694180 | -0.70144 | -0.707840 | -0.71394 | -0.71998 | -0.72433 | -0.72729 | -0.72966 | -0.730690 | -0.730800 | -0.731150 | -0.73229 | -0.73443 | -0.73821 | -0.74402 | -0.75053 | -0.75720 | -0.76379 | -0.769460 | -0.773960 | -0.77752 | -0.78013 | -0.78155 | -0.78244 | -0.78402 | -0.78688 | -0.791820 | -0.799050 | -0.80765 | -0.81679 | -0.82681 | -0.83912 | -0.85513 | -0.87581 | -0.90009 | -0.92415 | -0.94357 | -0.95528 | -0.95874 | -0.95623 |
451 | 4 | -0.63348 | -0.55768 | -0.46741 | -0.36414 | -0.25243 | -0.13981 | -0.037418 | 0.049385 | 0.117580 | 0.167390 | 0.201360 | 0.221120 | 0.23254 | 0.23840 | 0.240210 | 0.236260 | 0.222240 | 0.197480 | 0.162500 | 0.121990 | 0.080388 | 0.040528 | 0.005007 | -0.024547 | -0.044868 | -0.053745 | -0.050615 | -0.037103 | -0.015971 | 0.011371 | 0.042285 | 0.075513 | 0.106420 | 0.130390 | 0.143310 | 0.139480 | 0.118800 | 0.07992 | 0.026598 | ... | -0.575890 | -0.58564 | -0.591350 | -0.59990 | -0.62116 | -0.65165 | -0.67944 | -0.69555 | -0.695200 | -0.686790 | -0.678530 | -0.67518 | -0.67553 | -0.67469 | -0.67222 | -0.66897 | -0.66688 | -0.66354 | -0.652820 | -0.629970 | -0.59335 | -0.54709 | -0.49707 | -0.44930 | -0.40937 | -0.38140 | -0.368630 | -0.371140 | -0.38657 | -0.41166 | -0.44401 | -0.48290 | -0.52685 | -0.57233 | -0.61411 | -0.64817 | -0.67433 | -0.69544 | -0.71425 | -0.73015 |
452 | 25 | -1.10540 | -1.08980 | -1.06850 | -1.05060 | -1.03600 | -1.02670 | -1.024300 | -1.021400 | -1.015500 | -1.010700 | -1.006400 | -1.001400 | -0.99615 | -0.98875 | -0.979000 | -0.968370 | -0.956340 | -0.945870 | -0.940070 | -0.936040 | -0.930210 | -0.922960 | -0.916410 | -0.911590 | -0.909110 | -0.906500 | -0.893450 | -0.866030 | -0.831520 | -0.780930 | -0.711700 | -0.636050 | -0.558580 | -0.502580 | -0.467640 | -0.424430 | -0.362980 | -0.27063 | -0.110800 | ... | 0.630670 | 0.75190 | 0.827710 | 0.87086 | 0.88763 | 0.87961 | 0.85125 | 0.80810 | 0.748570 | 0.671280 | 0.586830 | 0.51246 | 0.45764 | 0.41914 | 0.38476 | 0.33904 | 0.26962 | 0.17698 | 0.073393 | -0.037076 | -0.15456 | -0.28188 | -0.41802 | -0.54538 | -0.65503 | -0.75047 | -0.827290 | -0.881700 | -0.91598 | -0.93430 | -0.94246 | -0.94047 | -0.93004 | -0.92016 | -0.91745 | -0.92684 | -0.95196 | -0.99402 | -1.04620 | -1.08780 |
453 | 15 | -1.54970 | -1.49970 | -1.43140 | -1.34580 | -1.24470 | -1.13110 | -1.008400 | -0.880330 | -0.750450 | -0.621620 | -0.496130 | -0.375520 | -0.26064 | -0.15177 | -0.048833 | 0.048284 | 0.139990 | 0.226440 | 0.307590 | 0.383170 | 0.452720 | 0.515640 | 0.571220 | 0.619170 | 0.659220 | 0.691370 | 0.715770 | 0.732780 | 0.742790 | 0.746180 | 0.743630 | 0.735690 | 0.722890 | 0.705670 | 0.684460 | 0.659490 | 0.630960 | 0.59937 | 0.565030 | ... | 0.657340 | 0.59160 | 0.525020 | 0.45789 | 0.39034 | 0.32240 | 0.25316 | 0.18334 | 0.113360 | 0.042852 | -0.028639 | -0.10147 | -0.17581 | -0.25247 | -0.33012 | -0.40784 | -0.48527 | -0.56213 | -0.638230 | -0.713500 | -0.78882 | -0.86307 | -0.93602 | -1.00780 | -1.07850 | -1.14800 | -1.215700 | -1.281700 | -1.34360 | -1.39980 | -1.44920 | -1.49070 | -1.52380 | -1.54820 | -1.56510 | -1.57390 | -1.57560 | -1.57220 | -1.56540 | -1.55740 |
454 | 16 | -1.13830 | -1.11750 | -1.08600 | -1.05880 | -1.04260 | -1.03480 | -1.030400 | -1.023800 | -1.019700 | -1.014100 | -1.011000 | -1.003700 | -0.99626 | -0.98654 | -0.975850 | -0.961990 | -0.939300 | -0.906350 | -0.857730 | -0.790880 | -0.688520 | -0.530510 | -0.295720 | 0.012420 | 0.362860 | 0.704280 | 0.989140 | 1.195700 | 1.330800 | 1.419100 | 1.480700 | 1.522900 | 1.537800 | 1.515200 | 1.447800 | 1.339000 | 1.200700 | 1.04880 | 0.893560 | ... | 0.524870 | 0.51820 | 0.507740 | 0.49748 | 0.48748 | 0.48360 | 0.49253 | 0.51891 | 0.555280 | 0.593430 | 0.625580 | 0.65525 | 0.68770 | 0.72889 | 0.77773 | 0.82742 | 0.86324 | 0.86752 | 0.827730 | 0.745030 | 0.63697 | 0.52074 | 0.41149 | 0.30748 | 0.20794 | 0.10741 | 0.005904 | -0.098838 | -0.20753 | -0.31721 | -0.42525 | -0.52516 | -0.62123 | -0.71320 | -0.80249 | -0.87908 | -0.94166 | -0.99577 | -1.05090 | -1.10410 |
455 rows × 271 columns
Warning: Total number of columns (271) exceeds max_columns (20) limiting to first (20) columns.
words
0 | 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 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | ... | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 4 | -0.89094 | -0.86099 | -0.82438 | -0.78214 | -0.73573 | -0.68691 | -0.637540 | -0.589370 | -0.543420 | -0.500440 | -0.460820 | -0.424690 | -0.39240 | -0.36389 | -0.339060 | -0.317950 | -0.300560 | -0.286920 | -0.277270 | -0.271050 | -0.267770 | -0.266780 | -0.267420 | -0.269270 | -0.272020 | -0.275290 | -0.278980 | -0.283200 | -0.288140 | -0.294310 | -0.301850 | -0.310860 | -0.321350 | -0.333260 | -0.346500 | -0.361030 | -0.376590 | -0.39297 | -0.409950 | ... | 0.052471 | -0.01492 | -0.082568 | -0.14848 | -0.21193 | -0.27229 | -0.32905 | -0.38303 | -0.432220 | -0.476280 | -0.515870 | -0.55188 | -0.58534 | -0.61763 | -0.64653 | -0.67227 | -0.69521 | -0.71576 | -0.735170 | -0.752860 | -0.76798 | -0.78120 | -0.79326 | -0.80474 | -0.81719 | -0.82831 | -0.837680 | -0.845380 | -0.85165 | -0.85731 | -0.86309 | -0.86791 | -0.87271 | -0.87846 | -0.88592 | -0.89619 | -0.90783 | -0.91942 | -0.93018 | -0.93939 |
1 | 12 | -0.78346 | -0.68562 | -0.58409 | -0.47946 | -0.37398 | -0.27008 | -0.172250 | -0.087463 | -0.019191 | 0.035301 | 0.080601 | 0.121210 | 0.16167 | 0.20223 | 0.239730 | 0.273860 | 0.305240 | 0.334170 | 0.364750 | 0.399670 | 0.436950 | 0.474700 | 0.509190 | 0.534400 | 0.547550 | 0.549650 | 0.542360 | 0.529090 | 0.515230 | 0.503070 | 0.491830 | 0.482130 | 0.472450 | 0.459290 | 0.443090 | 0.424040 | 0.400530 | 0.37585 | 0.351890 | ... | 0.711070 | 0.64773 | 0.579890 | 0.50674 | 0.42767 | 0.34155 | 0.24849 | 0.15221 | 0.056228 | -0.036684 | -0.123520 | -0.20472 | -0.28299 | -0.35917 | -0.43397 | -0.50794 | -0.57864 | -0.64302 | -0.700170 | -0.749010 | -0.78785 | -0.81818 | -0.84200 | -0.85809 | -0.86830 | -0.87519 | -0.877210 | -0.876610 | -0.87728 | -0.87899 | -0.88318 | -0.89189 | -0.90290 | -0.91427 | -0.92668 | -0.93966 | -0.95244 | -0.96623 | -0.98050 | -0.99178 |
2 | 13 | -1.32560 | -1.28430 | -1.21970 | -1.15670 | -1.09980 | -1.04960 | -1.015500 | -0.996720 | -0.985040 | -0.971990 | -0.964030 | -0.963550 | -0.96236 | -0.95077 | -0.917330 | -0.871050 | -0.817930 | -0.760640 | -0.701060 | -0.644150 | -0.594710 | -0.529310 | -0.409210 | -0.205990 | 0.066333 | 0.344810 | 0.565100 | 0.703590 | 0.785270 | 0.840450 | 0.870940 | 0.857640 | 0.775790 | 0.634510 | 0.480380 | 0.351620 | 0.241000 | 0.11593 | -0.022140 | ... | -0.443510 | -0.43741 | -0.444480 | -0.45708 | -0.46691 | -0.47419 | -0.47495 | -0.46916 | -0.456730 | -0.439730 | -0.421350 | -0.40614 | -0.40352 | -0.41293 | -0.42965 | -0.44611 | -0.45623 | -0.46585 | -0.484310 | -0.520100 | -0.56853 | -0.61788 | -0.65943 | -0.68651 | -0.70204 | -0.71318 | -0.726460 | -0.745680 | -0.77144 | -0.80390 | -0.83499 | -0.86204 | -0.88559 | -0.90454 | -0.93353 | -0.99135 | -1.06910 | -1.13680 | -1.19800 | -1.27000 |
3 | 23 | -1.09370 | -1.04200 | -0.99840 | -0.95997 | -0.93997 | -0.93764 | -0.926490 | -0.857090 | -0.693320 | -0.312890 | 0.339420 | 0.989090 | 1.33000 | 1.34950 | 1.222900 | 1.044500 | 0.829670 | 0.602100 | 0.365250 | 0.128330 | -0.046387 | -0.165640 | -0.265030 | -0.362500 | -0.449520 | -0.510830 | -0.562550 | -0.608530 | -0.635880 | -0.632320 | -0.597000 | -0.520320 | -0.427310 | -0.291990 | -0.066752 | 0.241280 | 0.610500 | 0.96181 | 1.211600 | ... | 1.115600 | 1.76630 | 2.558000 | 3.33430 | 3.84940 | 3.90180 | 3.62190 | 3.18950 | 2.623000 | 2.031000 | 1.497900 | 1.00600 | 0.55445 | 0.16993 | -0.12355 | -0.31586 | -0.43344 | -0.50570 | -0.532680 | -0.536880 | -0.54374 | -0.56792 | -0.60857 | -0.63638 | -0.64471 | -0.64440 | -0.653820 | -0.669570 | -0.69135 | -0.71082 | -0.72810 | -0.74512 | -0.76376 | -0.78068 | -0.80593 | -0.84350 | -0.89531 | -0.96052 | -1.05090 | -1.12830 |
4 | 4 | -0.90138 | -0.85228 | -0.80196 | -0.74932 | -0.69298 | -0.63316 | -0.570380 | -0.506920 | -0.446040 | -0.390180 | -0.339310 | -0.292310 | -0.24833 | -0.20635 | -0.165850 | -0.127190 | -0.091931 | -0.059946 | -0.030921 | -0.004628 | 0.018364 | 0.038239 | 0.054732 | 0.067206 | 0.075442 | 0.080507 | 0.083344 | 0.083628 | 0.081179 | 0.075684 | 0.066456 | 0.051670 | 0.032078 | 0.008739 | -0.017323 | -0.046021 | -0.075800 | -0.10581 | -0.136220 | ... | -0.394410 | -0.37672 | -0.357160 | -0.33905 | -0.32255 | -0.30807 | -0.29818 | -0.29607 | -0.300260 | -0.310800 | -0.328090 | -0.35262 | -0.38035 | -0.41034 | -0.44236 | -0.47573 | -0.50864 | -0.54145 | -0.575060 | -0.608890 | -0.64237 | -0.67593 | -0.71042 | -0.74502 | -0.77959 | -0.81402 | -0.848050 | -0.879590 | -0.90785 | -0.93276 | -0.95452 | -0.97322 | -0.98984 | -1.00520 | -1.01880 | -1.02960 | -1.03700 | -1.04110 | -1.04180 | -1.04030 |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
450 | 11 | -0.89862 | -0.85293 | -0.78905 | -0.70726 | -0.61085 | -0.50441 | -0.392470 | -0.280390 | -0.174080 | -0.076882 | 0.008894 | 0.081224 | 0.14049 | 0.18779 | 0.223500 | 0.247470 | 0.260450 | 0.263160 | 0.256140 | 0.242740 | 0.226750 | 0.210640 | 0.196780 | 0.186660 | 0.179380 | 0.172280 | 0.164110 | 0.153280 | 0.136730 | 0.114840 | 0.088567 | 0.058478 | 0.026118 | -0.005642 | -0.035135 | -0.062688 | -0.087383 | -0.10948 | -0.131200 | ... | -0.694180 | -0.70144 | -0.707840 | -0.71394 | -0.71998 | -0.72433 | -0.72729 | -0.72966 | -0.730690 | -0.730800 | -0.731150 | -0.73229 | -0.73443 | -0.73821 | -0.74402 | -0.75053 | -0.75720 | -0.76379 | -0.769460 | -0.773960 | -0.77752 | -0.78013 | -0.78155 | -0.78244 | -0.78402 | -0.78688 | -0.791820 | -0.799050 | -0.80765 | -0.81679 | -0.82681 | -0.83912 | -0.85513 | -0.87581 | -0.90009 | -0.92415 | -0.94357 | -0.95528 | -0.95874 | -0.95623 |
451 | 4 | -0.63348 | -0.55768 | -0.46741 | -0.36414 | -0.25243 | -0.13981 | -0.037418 | 0.049385 | 0.117580 | 0.167390 | 0.201360 | 0.221120 | 0.23254 | 0.23840 | 0.240210 | 0.236260 | 0.222240 | 0.197480 | 0.162500 | 0.121990 | 0.080388 | 0.040528 | 0.005007 | -0.024547 | -0.044868 | -0.053745 | -0.050615 | -0.037103 | -0.015971 | 0.011371 | 0.042285 | 0.075513 | 0.106420 | 0.130390 | 0.143310 | 0.139480 | 0.118800 | 0.07992 | 0.026598 | ... | -0.575890 | -0.58564 | -0.591350 | -0.59990 | -0.62116 | -0.65165 | -0.67944 | -0.69555 | -0.695200 | -0.686790 | -0.678530 | -0.67518 | -0.67553 | -0.67469 | -0.67222 | -0.66897 | -0.66688 | -0.66354 | -0.652820 | -0.629970 | -0.59335 | -0.54709 | -0.49707 | -0.44930 | -0.40937 | -0.38140 | -0.368630 | -0.371140 | -0.38657 | -0.41166 | -0.44401 | -0.48290 | -0.52685 | -0.57233 | -0.61411 | -0.64817 | -0.67433 | -0.69544 | -0.71425 | -0.73015 |
452 | 25 | -1.10540 | -1.08980 | -1.06850 | -1.05060 | -1.03600 | -1.02670 | -1.024300 | -1.021400 | -1.015500 | -1.010700 | -1.006400 | -1.001400 | -0.99615 | -0.98875 | -0.979000 | -0.968370 | -0.956340 | -0.945870 | -0.940070 | -0.936040 | -0.930210 | -0.922960 | -0.916410 | -0.911590 | -0.909110 | -0.906500 | -0.893450 | -0.866030 | -0.831520 | -0.780930 | -0.711700 | -0.636050 | -0.558580 | -0.502580 | -0.467640 | -0.424430 | -0.362980 | -0.27063 | -0.110800 | ... | 0.630670 | 0.75190 | 0.827710 | 0.87086 | 0.88763 | 0.87961 | 0.85125 | 0.80810 | 0.748570 | 0.671280 | 0.586830 | 0.51246 | 0.45764 | 0.41914 | 0.38476 | 0.33904 | 0.26962 | 0.17698 | 0.073393 | -0.037076 | -0.15456 | -0.28188 | -0.41802 | -0.54538 | -0.65503 | -0.75047 | -0.827290 | -0.881700 | -0.91598 | -0.93430 | -0.94246 | -0.94047 | -0.93004 | -0.92016 | -0.91745 | -0.92684 | -0.95196 | -0.99402 | -1.04620 | -1.08780 |
453 | 15 | -1.54970 | -1.49970 | -1.43140 | -1.34580 | -1.24470 | -1.13110 | -1.008400 | -0.880330 | -0.750450 | -0.621620 | -0.496130 | -0.375520 | -0.26064 | -0.15177 | -0.048833 | 0.048284 | 0.139990 | 0.226440 | 0.307590 | 0.383170 | 0.452720 | 0.515640 | 0.571220 | 0.619170 | 0.659220 | 0.691370 | 0.715770 | 0.732780 | 0.742790 | 0.746180 | 0.743630 | 0.735690 | 0.722890 | 0.705670 | 0.684460 | 0.659490 | 0.630960 | 0.59937 | 0.565030 | ... | 0.657340 | 0.59160 | 0.525020 | 0.45789 | 0.39034 | 0.32240 | 0.25316 | 0.18334 | 0.113360 | 0.042852 | -0.028639 | -0.10147 | -0.17581 | -0.25247 | -0.33012 | -0.40784 | -0.48527 | -0.56213 | -0.638230 | -0.713500 | -0.78882 | -0.86307 | -0.93602 | -1.00780 | -1.07850 | -1.14800 | -1.215700 | -1.281700 | -1.34360 | -1.39980 | -1.44920 | -1.49070 | -1.52380 | -1.54820 | -1.56510 | -1.57390 | -1.57560 | -1.57220 | -1.56540 | -1.55740 |
454 | 16 | -1.13830 | -1.11750 | -1.08600 | -1.05880 | -1.04260 | -1.03480 | -1.030400 | -1.023800 | -1.019700 | -1.014100 | -1.011000 | -1.003700 | -0.99626 | -0.98654 | -0.975850 | -0.961990 | -0.939300 | -0.906350 | -0.857730 | -0.790880 | -0.688520 | -0.530510 | -0.295720 | 0.012420 | 0.362860 | 0.704280 | 0.989140 | 1.195700 | 1.330800 | 1.419100 | 1.480700 | 1.522900 | 1.537800 | 1.515200 | 1.447800 | 1.339000 | 1.200700 | 1.04880 | 0.893560 | ... | 0.524870 | 0.51820 | 0.507740 | 0.49748 | 0.48748 | 0.48360 | 0.49253 | 0.51891 | 0.555280 | 0.593430 | 0.625580 | 0.65525 | 0.68770 | 0.72889 | 0.77773 | 0.82742 | 0.86324 | 0.86752 | 0.827730 | 0.745030 | 0.63697 | 0.52074 | 0.41149 | 0.30748 | 0.20794 | 0.10741 | 0.005904 | -0.098838 | -0.20753 | -0.31721 | -0.42525 | -0.52516 | -0.62123 | -0.71320 | -0.80249 | -0.87908 | -0.94166 | -0.99577 | -1.05090 | -1.10410 |
455 rows × 271 columns
words.rename(columns = {0:'word'}, inplace = True)
words.head()
word | 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 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | ... | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 4 | -0.89094 | -0.86099 | -0.82438 | -0.78214 | -0.73573 | -0.68691 | -0.63754 | -0.589370 | -0.543420 | -0.500440 | -0.460820 | -0.42469 | -0.39240 | -0.36389 | -0.33906 | -0.31795 | -0.300560 | -0.286920 | -0.277270 | -0.271050 | -0.267770 | -0.266780 | -0.267420 | -0.269270 | -0.272020 | -0.275290 | -0.278980 | -0.283200 | -0.288140 | -0.294310 | -0.301850 | -0.31086 | -0.321350 | -0.333260 | -0.346500 | -0.361030 | -0.37659 | -0.39297 | -0.40995 | ... | 0.052471 | -0.01492 | -0.082568 | -0.14848 | -0.21193 | -0.27229 | -0.32905 | -0.38303 | -0.432220 | -0.476280 | -0.51587 | -0.55188 | -0.58534 | -0.61763 | -0.64653 | -0.67227 | -0.69521 | -0.71576 | -0.73517 | -0.75286 | -0.76798 | -0.78120 | -0.79326 | -0.80474 | -0.81719 | -0.82831 | -0.83768 | -0.84538 | -0.85165 | -0.85731 | -0.86309 | -0.86791 | -0.87271 | -0.87846 | -0.88592 | -0.89619 | -0.90783 | -0.91942 | -0.93018 | -0.93939 |
1 | 12 | -0.78346 | -0.68562 | -0.58409 | -0.47946 | -0.37398 | -0.27008 | -0.17225 | -0.087463 | -0.019191 | 0.035301 | 0.080601 | 0.12121 | 0.16167 | 0.20223 | 0.23973 | 0.27386 | 0.305240 | 0.334170 | 0.364750 | 0.399670 | 0.436950 | 0.474700 | 0.509190 | 0.534400 | 0.547550 | 0.549650 | 0.542360 | 0.529090 | 0.515230 | 0.503070 | 0.491830 | 0.48213 | 0.472450 | 0.459290 | 0.443090 | 0.424040 | 0.40053 | 0.37585 | 0.35189 | ... | 0.711070 | 0.64773 | 0.579890 | 0.50674 | 0.42767 | 0.34155 | 0.24849 | 0.15221 | 0.056228 | -0.036684 | -0.12352 | -0.20472 | -0.28299 | -0.35917 | -0.43397 | -0.50794 | -0.57864 | -0.64302 | -0.70017 | -0.74901 | -0.78785 | -0.81818 | -0.84200 | -0.85809 | -0.86830 | -0.87519 | -0.87721 | -0.87661 | -0.87728 | -0.87899 | -0.88318 | -0.89189 | -0.90290 | -0.91427 | -0.92668 | -0.93966 | -0.95244 | -0.96623 | -0.98050 | -0.99178 |
2 | 13 | -1.32560 | -1.28430 | -1.21970 | -1.15670 | -1.09980 | -1.04960 | -1.01550 | -0.996720 | -0.985040 | -0.971990 | -0.964030 | -0.96355 | -0.96236 | -0.95077 | -0.91733 | -0.87105 | -0.817930 | -0.760640 | -0.701060 | -0.644150 | -0.594710 | -0.529310 | -0.409210 | -0.205990 | 0.066333 | 0.344810 | 0.565100 | 0.703590 | 0.785270 | 0.840450 | 0.870940 | 0.85764 | 0.775790 | 0.634510 | 0.480380 | 0.351620 | 0.24100 | 0.11593 | -0.02214 | ... | -0.443510 | -0.43741 | -0.444480 | -0.45708 | -0.46691 | -0.47419 | -0.47495 | -0.46916 | -0.456730 | -0.439730 | -0.42135 | -0.40614 | -0.40352 | -0.41293 | -0.42965 | -0.44611 | -0.45623 | -0.46585 | -0.48431 | -0.52010 | -0.56853 | -0.61788 | -0.65943 | -0.68651 | -0.70204 | -0.71318 | -0.72646 | -0.74568 | -0.77144 | -0.80390 | -0.83499 | -0.86204 | -0.88559 | -0.90454 | -0.93353 | -0.99135 | -1.06910 | -1.13680 | -1.19800 | -1.27000 |
3 | 23 | -1.09370 | -1.04200 | -0.99840 | -0.95997 | -0.93997 | -0.93764 | -0.92649 | -0.857090 | -0.693320 | -0.312890 | 0.339420 | 0.98909 | 1.33000 | 1.34950 | 1.22290 | 1.04450 | 0.829670 | 0.602100 | 0.365250 | 0.128330 | -0.046387 | -0.165640 | -0.265030 | -0.362500 | -0.449520 | -0.510830 | -0.562550 | -0.608530 | -0.635880 | -0.632320 | -0.597000 | -0.52032 | -0.427310 | -0.291990 | -0.066752 | 0.241280 | 0.61050 | 0.96181 | 1.21160 | ... | 1.115600 | 1.76630 | 2.558000 | 3.33430 | 3.84940 | 3.90180 | 3.62190 | 3.18950 | 2.623000 | 2.031000 | 1.49790 | 1.00600 | 0.55445 | 0.16993 | -0.12355 | -0.31586 | -0.43344 | -0.50570 | -0.53268 | -0.53688 | -0.54374 | -0.56792 | -0.60857 | -0.63638 | -0.64471 | -0.64440 | -0.65382 | -0.66957 | -0.69135 | -0.71082 | -0.72810 | -0.74512 | -0.76376 | -0.78068 | -0.80593 | -0.84350 | -0.89531 | -0.96052 | -1.05090 | -1.12830 |
4 | 4 | -0.90138 | -0.85228 | -0.80196 | -0.74932 | -0.69298 | -0.63316 | -0.57038 | -0.506920 | -0.446040 | -0.390180 | -0.339310 | -0.29231 | -0.24833 | -0.20635 | -0.16585 | -0.12719 | -0.091931 | -0.059946 | -0.030921 | -0.004628 | 0.018364 | 0.038239 | 0.054732 | 0.067206 | 0.075442 | 0.080507 | 0.083344 | 0.083628 | 0.081179 | 0.075684 | 0.066456 | 0.05167 | 0.032078 | 0.008739 | -0.017323 | -0.046021 | -0.07580 | -0.10581 | -0.13622 | ... | -0.394410 | -0.37672 | -0.357160 | -0.33905 | -0.32255 | -0.30807 | -0.29818 | -0.29607 | -0.300260 | -0.310800 | -0.32809 | -0.35262 | -0.38035 | -0.41034 | -0.44236 | -0.47573 | -0.50864 | -0.54145 | -0.57506 | -0.60889 | -0.64237 | -0.67593 | -0.71042 | -0.74502 | -0.77959 | -0.81402 | -0.84805 | -0.87959 | -0.90785 | -0.93276 | -0.95452 | -0.97322 | -0.98984 | -1.00520 | -1.01880 | -1.02960 | -1.03700 | -1.04110 | -1.04180 | -1.04030 |
5 rows × 271 columns
2.1 데이터에서 특징 생성하기¶
시각 데이터는 시계열 데이터 대비 처리가 쉽고, 보다 많은 직관을 얻을 수 있는 형식임.
그러나 쉽지 않다.
words.iloc[1, 1:-1].plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7fb8ade42c50>
words.iloc[3, 1:-1].plot()
<matplotlib.axes._subplots.AxesSubplot at 0x7fb8ade2a650>
서로 다른 이 단어들을 구분하는 몇 가지 특징
- 최고점에 대한 시간의 위치(x축)
- 두 번째 최고점에 대한 시간의 위치
- 최고점의 개수
- 값들의 전체 범위
- 곡선의 볼록성 등
그러나.. 각 고점의 위치를 정하는 특징을 생성하기는 쉽지 않다.
그래서 모든 범주별 데이터나 개별 데이터의 1D 히스토그램을 활용해볼 수 있다.
(고점을 식별하거나, 시계열 전체 모양을 매핑하는 다른 대체 값을 찾는 데에 계산 측면에서 덜 부담스러움)
# 동일한 범주별 데이터 1D 히스토그램으로 표현하기
plt.subplot(3, 2, 1)
plt.plot(words.iloc[1, 1:-1])
plt.title("Sample Projection Word " + str(words.word[1]), fontweight = 'bold', y = 0.8, fontsize = 14)
plt.subplot(3, 2, 2)
plt.hist(words.iloc[1, 1:-1], 10)
plt.title("Histogram of Projection Word " + str(words.word[1]), fontweight = 'bold', y = 0.8, fontsize = 14)
plt.subplot(3, 2, 3)
plt.plot(words.iloc[3, 1:-1])
plt.title("Sample Projection Word " + str(words.word[3]), fontweight = 'bold', y = 0.8, fontsize = 14)
plt.subplot(3, 2, 4)
plt.hist(words.iloc[3, 1:-1], 10)
plt.title("Histogram of Projection Word " + str(words.word[3]), fontweight = 'bold', y = 0.8, fontsize = 14)
plt.subplot(3, 2, 5)
plt.plot(words.iloc[5, 1:-1])
plt.title("Sample Projection Word " + str(words.word[11]), fontweight = 'bold', y = 0.8, fontsize = 14)
plt.subplot(3, 2, 6)
plt.hist(words.iloc[5, 1:-1], 10)
plt.title("Histogram of Projection Word " + str(words.word[11]), fontweight = 'bold', y = 0.8, fontsize = 14)
plt.suptitle("Sample word projections and histograms of the projections", fontsize = 18)
Text(0.5, 0.98, 'Sample word projections and histograms of the projections')
이는 유용한 특징을 발견하기 위해 각 범주를 측정하는 또 다른 방법이다.
특히 범주별 데이터의 히스토그램은 국소적 고점의 개수, 뒤틀림, 첨도와 같이 시계열 곡선을 잘 표현할 수 있는 대체 속성을 나타낸다.
사람의 눈으로는 분명해보이는 속성들은 코드로 표현하기 어렵다.
words[words.word == 12]
word | 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 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | ... | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 12 | -0.78346 | -0.68562 | -0.58409 | -0.47946 | -0.37398 | -0.27008 | -0.17225 | -0.087463 | -0.019191 | 0.035301 | 0.080601 | 0.12121 | 0.16167 | 0.20223 | 0.239730 | 0.273860 | 0.305240 | 0.33417 | 0.364750 | 0.399670 | 0.436950 | 0.474700 | 0.509190 | 0.534400 | 0.54755 | 0.549650 | 0.542360 | 0.529090 | 0.515230 | 0.503070 | 0.491830 | 0.48213 | 0.47245 | 0.45929 | 0.44309 | 0.42404 | 0.40053 | 0.37585 | 0.35189 | ... | 0.711070 | 0.647730 | 0.579890 | 0.506740 | 0.427670 | 0.341550 | 0.248490 | 0.152210 | 0.056228 | -0.036684 | -0.123520 | -0.204720 | -0.282990 | -0.359170 | -0.433970 | -0.507940 | -0.578640 | -0.64302 | -0.70017 | -0.74901 | -0.78785 | -0.81818 | -0.84200 | -0.85809 | -0.86830 | -0.87519 | -0.87721 | -0.87661 | -0.87728 | -0.87899 | -0.88318 | -0.89189 | -0.90290 | -0.91427 | -0.92668 | -0.93966 | -0.95244 | -0.96623 | -0.98050 | -0.99178 |
55 | 12 | -0.65904 | -0.62525 | -0.58935 | -0.54896 | -0.50556 | -0.46049 | -0.41860 | -0.385650 | -0.359560 | -0.338580 | -0.322480 | -0.30840 | -0.29826 | -0.29244 | -0.286430 | -0.280400 | -0.273060 | -0.26323 | -0.256180 | -0.251520 | -0.248130 | -0.248420 | -0.248460 | -0.244590 | -0.23437 | -0.209560 | -0.164040 | -0.094924 | 0.001522 | 0.123680 | 0.267220 | 0.42740 | 0.59400 | 0.75686 | 0.90731 | 1.03640 | 1.14280 | 1.22850 | 1.29440 | ... | -0.596280 | -0.535420 | -0.466510 | -0.396300 | -0.331980 | -0.278860 | -0.240040 | -0.216740 | -0.208350 | -0.212990 | -0.227700 | -0.248870 | -0.272980 | -0.297360 | -0.320460 | -0.341570 | -0.360450 | -0.37710 | -0.39184 | -0.40539 | -0.41873 | -0.43267 | -0.44748 | -0.46287 | -0.47831 | -0.49349 | -0.50862 | -0.52425 | -0.54076 | -0.55814 | -0.57579 | -0.59332 | -0.61147 | -0.63093 | -0.65236 | -0.67554 | -0.69730 | -0.71463 | -0.72615 | -0.73123 |
147 | 12 | -0.71717 | -0.68091 | -0.63841 | -0.58892 | -0.53264 | -0.47139 | -0.40747 | -0.344300 | -0.286010 | -0.234900 | -0.191560 | -0.15565 | -0.12682 | -0.10352 | -0.084548 | -0.069375 | -0.057266 | -0.04693 | -0.037601 | -0.030110 | -0.024582 | -0.021632 | -0.022047 | -0.026295 | -0.03320 | -0.041518 | -0.051102 | -0.061371 | -0.071801 | -0.082305 | -0.093497 | -0.10396 | -0.11262 | -0.11996 | -0.12681 | -0.13336 | -0.14024 | -0.14992 | -0.16102 | ... | -0.784830 | -0.783840 | -0.782730 | -0.781010 | -0.778050 | -0.773490 | -0.767330 | -0.759800 | -0.751020 | -0.740750 | -0.728290 | -0.712870 | -0.694050 | -0.672090 | -0.648140 | -0.623910 | -0.601340 | -0.58208 | -0.56733 | -0.55774 | -0.55349 | -0.55441 | -0.56002 | -0.56960 | -0.58217 | -0.59674 | -0.61236 | -0.62830 | -0.64411 | -0.65961 | -0.67476 | -0.68960 | -0.70420 | -0.71863 | -0.73292 | -0.74692 | -0.76027 | -0.77238 | -0.78246 | -0.78987 |
222 | 12 | -0.53903 | -0.53955 | -0.55822 | -0.57715 | -0.58502 | -0.58534 | -0.58722 | -0.593270 | -0.599030 | -0.600760 | -0.599830 | -0.59923 | -0.59935 | -0.59871 | -0.597190 | -0.596470 | -0.597580 | -0.59959 | -0.601060 | -0.601560 | -0.601680 | -0.601870 | -0.602140 | -0.602580 | -0.60331 | -0.604060 | -0.603930 | -0.602670 | -0.600810 | -0.599260 | -0.598290 | -0.59718 | -0.59534 | -0.59307 | -0.59137 | -0.59080 | -0.59081 | -0.59048 | -0.58941 | ... | -0.538140 | -0.481500 | -0.398790 | -0.295750 | -0.184640 | -0.080971 | 0.003016 | 0.059882 | 0.088580 | 0.093776 | 0.083362 | 0.065894 | 0.046004 | 0.023565 | -0.004355 | -0.039651 | -0.080948 | -0.12445 | -0.16618 | -0.20356 | -0.23554 | -0.26209 | -0.28396 | -0.30240 | -0.31882 | -0.33409 | -0.34848 | -0.36135 | -0.37216 | -0.38132 | -0.38973 | -0.40127 | -0.41837 | -0.44366 | -0.47650 | -0.51240 | -0.54696 | -0.57395 | -0.59174 | -0.60066 |
294 | 12 | -0.77367 | -0.71285 | -0.64288 | -0.57090 | -0.50449 | -0.44685 | -0.39856 | -0.359380 | -0.326620 | -0.298220 | -0.273660 | -0.25145 | -0.23117 | -0.21394 | -0.200010 | -0.190320 | -0.185980 | -0.18589 | -0.188720 | -0.193360 | -0.197890 | -0.201860 | -0.206020 | -0.210410 | -0.21583 | -0.222780 | -0.230170 | -0.237380 | -0.243710 | -0.247940 | -0.250790 | -0.25284 | -0.25385 | -0.25559 | -0.25779 | -0.25931 | -0.26309 | -0.26884 | -0.27536 | ... | 0.406400 | 0.362000 | 0.314850 | 0.263510 | 0.207300 | 0.145950 | 0.080034 | 0.012174 | -0.054457 | -0.116750 | -0.171800 | -0.218160 | -0.255710 | -0.285430 | -0.308940 | -0.326750 | -0.339060 | -0.34738 | -0.35258 | -0.35647 | -0.36159 | -0.36660 | -0.37039 | -0.37437 | -0.37829 | -0.38335 | -0.39088 | -0.39758 | -0.40341 | -0.41378 | -0.43335 | -0.46619 | -0.51009 | -0.55327 | -0.58751 | -0.61489 | -0.64465 | -0.68912 | -0.75058 | -0.81450 |
297 | 12 | -0.76255 | -0.75278 | -0.74902 | -0.74730 | -0.74793 | -0.74661 | -0.74241 | -0.740560 | -0.739700 | -0.738300 | -0.738020 | -0.73382 | -0.72092 | -0.69712 | -0.653140 | -0.580850 | -0.478060 | -0.34100 | -0.173070 | 0.013170 | 0.208350 | 0.400650 | 0.576050 | 0.731040 | 0.86318 | 0.968840 | 1.055300 | 1.128800 | 1.191900 | 1.254200 | 1.318000 | 1.37550 | 1.42400 | 1.45530 | 1.46070 | 1.44500 | 1.41400 | 1.37230 | 1.33230 | ... | -0.025496 | -0.039172 | -0.044324 | -0.038239 | -0.020011 | 0.007645 | 0.041272 | 0.074471 | 0.099144 | 0.110720 | 0.107010 | 0.088522 | 0.060321 | 0.027318 | -0.007333 | -0.040569 | -0.071896 | -0.10221 | -0.13056 | -0.15674 | -0.18145 | -0.20429 | -0.22707 | -0.25267 | -0.28162 | -0.31533 | -0.35510 | -0.39917 | -0.44652 | -0.49595 | -0.54386 | -0.58911 | -0.63255 | -0.67379 | -0.71343 | -0.75055 | -0.78037 | -0.80005 | -0.80976 | -0.81065 |
341 | 12 | -0.67183 | -0.60365 | -0.53619 | -0.46514 | -0.39024 | -0.31902 | -0.26275 | -0.224380 | -0.199060 | -0.179960 | -0.163540 | -0.15232 | -0.14820 | -0.15213 | -0.163300 | -0.179620 | -0.200900 | -0.22520 | -0.251530 | -0.278280 | -0.302730 | -0.324480 | -0.342010 | -0.356640 | -0.36950 | -0.380290 | -0.389860 | -0.395900 | -0.399170 | -0.399040 | -0.395490 | -0.39061 | -0.38300 | -0.37528 | -0.36620 | -0.35534 | -0.34333 | -0.32674 | -0.30871 | ... | -0.514290 | -0.542340 | -0.568450 | -0.591510 | -0.611170 | -0.625830 | -0.636680 | -0.643760 | -0.648470 | -0.652490 | -0.656180 | -0.660940 | -0.665950 | -0.671240 | -0.676370 | -0.680470 | -0.683920 | -0.68533 | -0.68474 | -0.68206 | -0.67726 | -0.67140 | -0.66409 | -0.65660 | -0.65027 | -0.64615 | -0.64475 | -0.64438 | -0.64482 | -0.64743 | -0.65464 | -0.66805 | -0.68631 | -0.70782 | -0.73156 | -0.75684 | -0.78128 | -0.79975 | -0.80873 | -0.80899 |
361 | 12 | -0.78636 | -0.73338 | -0.68923 | -0.64340 | -0.59076 | -0.53677 | -0.49223 | -0.454820 | -0.421800 | -0.389430 | -0.362460 | -0.34396 | -0.32925 | -0.31240 | -0.284400 | -0.244790 | -0.191420 | -0.12600 | -0.049724 | 0.036458 | 0.127010 | 0.218710 | 0.303250 | 0.377480 | 0.43561 | 0.473580 | 0.489760 | 0.484380 | 0.466080 | 0.439590 | 0.414680 | 0.39299 | 0.37742 | 0.36824 | 0.36112 | 0.35698 | 0.34867 | 0.34250 | 0.33647 | ... | -0.359620 | -0.366990 | -0.377700 | -0.391880 | -0.410350 | -0.433300 | -0.460590 | -0.490310 | -0.520600 | -0.549420 | -0.575560 | -0.598650 | -0.618710 | -0.636830 | -0.654040 | -0.672240 | -0.692320 | -0.71511 | -0.73988 | -0.76461 | -0.78775 | -0.80634 | -0.82056 | -0.83016 | -0.83692 | -0.84210 | -0.84599 | -0.84954 | -0.85180 | -0.85437 | -0.85749 | -0.86166 | -0.86591 | -0.86948 | -0.87451 | -0.88273 | -0.89480 | -0.90649 | -0.91332 | -0.91404 |
367 | 12 | -0.52007 | -0.49940 | -0.48472 | -0.47249 | -0.45790 | -0.43804 | -0.41047 | -0.375340 | -0.334800 | -0.292880 | -0.251380 | -0.21037 | -0.16878 | -0.12666 | -0.083000 | -0.037020 | 0.010541 | 0.05590 | 0.096530 | 0.132320 | 0.163180 | 0.186940 | 0.202450 | 0.212250 | 0.21822 | 0.220120 | 0.217480 | 0.214480 | 0.214110 | 0.217060 | 0.221650 | 0.23028 | 0.24333 | 0.25920 | 0.27357 | 0.28744 | 0.30094 | 0.31379 | 0.32317 | ... | -0.608980 | -0.613130 | -0.616540 | -0.619440 | -0.622060 | -0.624410 | -0.626510 | -0.628310 | -0.629770 | -0.630740 | -0.631210 | -0.631290 | -0.631190 | -0.631060 | -0.631020 | -0.631150 | -0.631410 | -0.63156 | -0.63134 | -0.63062 | -0.62939 | -0.62770 | -0.62558 | -0.62305 | -0.62002 | -0.61624 | -0.61151 | -0.60602 | -0.60041 | -0.59569 | -0.59299 | -0.59328 | -0.59692 | -0.60346 | -0.61158 | -0.61969 | -0.62632 | -0.63059 | -0.63236 | -0.63224 |
9 rows × 271 columns
## 단어의 2D 히스토그램을 구성할 수도 있음 (word = 12)
x = np.array([])
y = np.array([])
w = 12 # word = 12
selected_words = words[words.word == w]
selected_words.shape
for idx, row in selected_words.iterrows():
y = np.hstack([y, row[1:271]])
x = np.hstack([x, np.array(range(270))])
fig, ax = plt.subplots()
hist = ax.hist2d(x, y, bins = 50)
plt.xlabel("Time", fontsize = 18)
plt.ylabel("Value", fontsize = 18)
Text(0, 0.5, 'Value')
단어(word=12)를 1D로 투영한 것에 대한 2D 히스토그램.
x축은 투영된 각 시계열의 샘플/단어에 대한 270개의 시간 단계,
y축은 각 시간 단계에서의 측정값.
데이터셋 중 word=12에 포함된 모든 단어의 2D 히스토그램이다.
앞서 보았던 곡선 그래프는 시계열을 지배하는 두 고점을 찾는 데 초점을 두지만,
이 2D 히스토그램은 범주별 데이터 대부분이 두 고점 사이에 평평함을 공통으로 가진다는 사실을, 120~200번째 시간 단계의 강도를 통해 보여준다.
또한 이 범주(word=12)에 속한 최고점을 특정할 수 있다.
50~150시간 단계 사이에서 위치가 미묘-하게 다른 것이 보임에 따라서,
최댓값이 50~150시간 단계 사이에 도달했는가?와 같은 특징을 만들어야 할 수도 있다.
## 단어의 2D 히스토그램을 구성할 수도 있음 (word = 23)
x = np.array([])
y = np.array([])
w = 23 # word = 23
selected_words = words[words.word == w]
selected_words.shape
for idx, row in selected_words.iterrows():
y = np.hstack([y, row[1:271]])
x = np.hstack([x, np.array(range(270))])
fig, ax = plt.subplots()
hist = ax.hist2d(x, y, bins = 50)
plt.xlabel("Time", fontsize = 18)
plt.ylabel("Value", fontsize = 18)
Text(0, 0.5, 'Value')
단어(work=23)
앞의 곡선 그래프에서는 정량화되기 어려웠던 특징인 작은 혹들이 많이 있다.
word=12와 비교하면 최고점이 겹치지 않는 시간 단계의 범위에 있다.
Time 150 이후에 등장.
생성하기 위한 특징들
- 단어 투영의 모양에서 파생된 특징
- 단어 투영 히스토그램의 모양에서 파생된 특징(1D 요약을 또 다른 1D 요약으로 투영)
- 이는 2D 히스토그램에서 볼 수 있는 큰 '얼룩짐'에 대한 대응으로, 고점은 있지만 그 위치가 안정적이지 않음을 표현한다.
히스토그램을 사용해 생성한 각 단어의 투영에 대한 2차적인 특징은,
단순히 단어 그 자체를 투영하는 것보다 더 안정적이고, 특징을 잘 나타낼 수도 있다.
히스토그램은 value들의 위치를 특정짓지 않고, 그 value의 종류를 나타낸다.
이는 고점이 안정적인 시간의 위치에 분포되지 않은, 투영된 시계열을 다루는 이번 예제에서 중요한 역할을 한다.
word_vals = words.iloc[:, 1:271]
word_vals.head()
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 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | ... | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | -0.89094 | -0.86099 | -0.82438 | -0.78214 | -0.73573 | -0.68691 | -0.63754 | -0.589370 | -0.543420 | -0.500440 | -0.460820 | -0.42469 | -0.39240 | -0.36389 | -0.33906 | -0.31795 | -0.300560 | -0.286920 | -0.277270 | -0.271050 | -0.267770 | -0.266780 | -0.267420 | -0.269270 | -0.272020 | -0.275290 | -0.278980 | -0.283200 | -0.288140 | -0.294310 | -0.301850 | -0.31086 | -0.321350 | -0.333260 | -0.346500 | -0.361030 | -0.37659 | -0.39297 | -0.40995 | -0.42731 | ... | 0.052471 | -0.01492 | -0.082568 | -0.14848 | -0.21193 | -0.27229 | -0.32905 | -0.38303 | -0.432220 | -0.476280 | -0.51587 | -0.55188 | -0.58534 | -0.61763 | -0.64653 | -0.67227 | -0.69521 | -0.71576 | -0.73517 | -0.75286 | -0.76798 | -0.78120 | -0.79326 | -0.80474 | -0.81719 | -0.82831 | -0.83768 | -0.84538 | -0.85165 | -0.85731 | -0.86309 | -0.86791 | -0.87271 | -0.87846 | -0.88592 | -0.89619 | -0.90783 | -0.91942 | -0.93018 | -0.93939 |
1 | -0.78346 | -0.68562 | -0.58409 | -0.47946 | -0.37398 | -0.27008 | -0.17225 | -0.087463 | -0.019191 | 0.035301 | 0.080601 | 0.12121 | 0.16167 | 0.20223 | 0.23973 | 0.27386 | 0.305240 | 0.334170 | 0.364750 | 0.399670 | 0.436950 | 0.474700 | 0.509190 | 0.534400 | 0.547550 | 0.549650 | 0.542360 | 0.529090 | 0.515230 | 0.503070 | 0.491830 | 0.48213 | 0.472450 | 0.459290 | 0.443090 | 0.424040 | 0.40053 | 0.37585 | 0.35189 | 0.32803 | ... | 0.711070 | 0.64773 | 0.579890 | 0.50674 | 0.42767 | 0.34155 | 0.24849 | 0.15221 | 0.056228 | -0.036684 | -0.12352 | -0.20472 | -0.28299 | -0.35917 | -0.43397 | -0.50794 | -0.57864 | -0.64302 | -0.70017 | -0.74901 | -0.78785 | -0.81818 | -0.84200 | -0.85809 | -0.86830 | -0.87519 | -0.87721 | -0.87661 | -0.87728 | -0.87899 | -0.88318 | -0.89189 | -0.90290 | -0.91427 | -0.92668 | -0.93966 | -0.95244 | -0.96623 | -0.98050 | -0.99178 |
2 | -1.32560 | -1.28430 | -1.21970 | -1.15670 | -1.09980 | -1.04960 | -1.01550 | -0.996720 | -0.985040 | -0.971990 | -0.964030 | -0.96355 | -0.96236 | -0.95077 | -0.91733 | -0.87105 | -0.817930 | -0.760640 | -0.701060 | -0.644150 | -0.594710 | -0.529310 | -0.409210 | -0.205990 | 0.066333 | 0.344810 | 0.565100 | 0.703590 | 0.785270 | 0.840450 | 0.870940 | 0.85764 | 0.775790 | 0.634510 | 0.480380 | 0.351620 | 0.24100 | 0.11593 | -0.02214 | -0.15289 | ... | -0.443510 | -0.43741 | -0.444480 | -0.45708 | -0.46691 | -0.47419 | -0.47495 | -0.46916 | -0.456730 | -0.439730 | -0.42135 | -0.40614 | -0.40352 | -0.41293 | -0.42965 | -0.44611 | -0.45623 | -0.46585 | -0.48431 | -0.52010 | -0.56853 | -0.61788 | -0.65943 | -0.68651 | -0.70204 | -0.71318 | -0.72646 | -0.74568 | -0.77144 | -0.80390 | -0.83499 | -0.86204 | -0.88559 | -0.90454 | -0.93353 | -0.99135 | -1.06910 | -1.13680 | -1.19800 | -1.27000 |
3 | -1.09370 | -1.04200 | -0.99840 | -0.95997 | -0.93997 | -0.93764 | -0.92649 | -0.857090 | -0.693320 | -0.312890 | 0.339420 | 0.98909 | 1.33000 | 1.34950 | 1.22290 | 1.04450 | 0.829670 | 0.602100 | 0.365250 | 0.128330 | -0.046387 | -0.165640 | -0.265030 | -0.362500 | -0.449520 | -0.510830 | -0.562550 | -0.608530 | -0.635880 | -0.632320 | -0.597000 | -0.52032 | -0.427310 | -0.291990 | -0.066752 | 0.241280 | 0.61050 | 0.96181 | 1.21160 | 1.25220 | ... | 1.115600 | 1.76630 | 2.558000 | 3.33430 | 3.84940 | 3.90180 | 3.62190 | 3.18950 | 2.623000 | 2.031000 | 1.49790 | 1.00600 | 0.55445 | 0.16993 | -0.12355 | -0.31586 | -0.43344 | -0.50570 | -0.53268 | -0.53688 | -0.54374 | -0.56792 | -0.60857 | -0.63638 | -0.64471 | -0.64440 | -0.65382 | -0.66957 | -0.69135 | -0.71082 | -0.72810 | -0.74512 | -0.76376 | -0.78068 | -0.80593 | -0.84350 | -0.89531 | -0.96052 | -1.05090 | -1.12830 |
4 | -0.90138 | -0.85228 | -0.80196 | -0.74932 | -0.69298 | -0.63316 | -0.57038 | -0.506920 | -0.446040 | -0.390180 | -0.339310 | -0.29231 | -0.24833 | -0.20635 | -0.16585 | -0.12719 | -0.091931 | -0.059946 | -0.030921 | -0.004628 | 0.018364 | 0.038239 | 0.054732 | 0.067206 | 0.075442 | 0.080507 | 0.083344 | 0.083628 | 0.081179 | 0.075684 | 0.066456 | 0.05167 | 0.032078 | 0.008739 | -0.017323 | -0.046021 | -0.07580 | -0.10581 | -0.13622 | -0.16717 | ... | -0.394410 | -0.37672 | -0.357160 | -0.33905 | -0.32255 | -0.30807 | -0.29818 | -0.29607 | -0.300260 | -0.310800 | -0.32809 | -0.35262 | -0.38035 | -0.41034 | -0.44236 | -0.47573 | -0.50864 | -0.54145 | -0.57506 | -0.60889 | -0.64237 | -0.67593 | -0.71042 | -0.74502 | -0.77959 | -0.81402 | -0.84805 | -0.87959 | -0.90785 | -0.93276 | -0.95452 | -0.97322 | -0.98984 | -1.00520 | -1.01880 | -1.02960 | -1.03700 | -1.04110 | -1.04180 | -1.04030 |
5 rows × 270 columns
from cesium import featurize as ft
dir(ft)
['Imputer',
'Iterable',
'TimeSeries',
'__all__',
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'assemble_featureset',
'copy',
'cull',
'dask',
'delayed',
'featurize_single_ts',
'featurize_time_series',
'featurize_ts_files',
'generate_dask_graph',
'impute_featureset',
'load_featureset',
'np',
'pack_exception',
'pd',
'reraise',
'save_featureset',
'time_series']
# 시간 단계 270개를 가진 시계열의 특징 생성
word_vals = words.iloc[:, 1:271]
times = []
word_values = []
for idx, row in word_vals.iterrows():
word_values.append(row.values)
times.append(np.array([i for i in range(row.values.shape[0])]))
features_to_use = ['amplitude',
'percent_beyond_1_std',
'percent_close_to_median']
featurized_words = ft.featurize_time_series(times = times,
values = word_values,
errors = None,
features_to_use = features_to_use,
scheduler = None)
featurized_words
feature | amplitude | percent_beyond_1_std | percent_close_to_median |
---|---|---|---|
channel | 0 | 0 | 0 |
0 | 1.674555 | 0.188889 | 0.451852 |
1 | 1.990520 | 0.118519 | 0.259259 |
2 | 2.903650 | 0.114815 | 0.637037 |
3 | 2.515050 | 0.211111 | 0.562963 |
4 | 1.966150 | 0.181481 | 0.533333 |
... | ... | ... | ... |
450 | 2.134920 | 0.122222 | 0.629630 |
451 | 2.218890 | 0.140741 | 0.681481 |
452 | 2.487500 | 0.155556 | 0.414815 |
453 | 1.545300 | 0.462963 | 0.111111 |
454 | 2.244800 | 0.170370 | 0.392593 |
455 rows × 3 columns
# 다음으로 히스토그램을 생성하고, 이를 또 다른 시계열로 취급하여 특징 생성
## 히스토그램에서 파생된 일부 특징 생성
times = []
hist_values = []
for idx, row in word_vals.iterrows():
hist_values.append(np.histogram(row.values,
bins=10,
range=(-2.5, 5.0))[0] + .0001) # 0은 하위 작업에서 문제 발생하기 때문
times.append(np.array([i for i in range(9)]))
features_to_use = ['amplitude',
'percent_close_to_median',
'skew']
featurized_hists = ft.featurize_time_series(times = times,
values = hist_values,
errors = None,
features_to_use = features_to_use,
scheduler = None)
len(hist_values)
455
featurized_hists
feature | amplitude | percent_close_to_median | skew |
---|---|---|---|
channel | 0 | 0 | 0 |
0 | 88.0 | 0.444444 | 2.262655 |
1 | 61.0 | 0.666667 | 1.285343 |
2 | 70.0 | 0.666667 | 1.683031 |
3 | 67.0 | 0.555556 | 1.724109 |
4 | 75.0 | 0.777778 | 1.902513 |
... | ... | ... | ... |
450 | 74.0 | 0.777778 | 1.661334 |
451 | 80.0 | 0.777778 | 1.971053 |
452 | 58.5 | 0.666667 | 1.263944 |
453 | 33.5 | 0.222222 | 0.077317 |
454 | 63.5 | 0.666667 | 1.561974 |
455 rows × 3 columns
주의해야 할 점:
- np.histogram()에 전달된 인수는 모든 히스토그램이 같은 개수의 구간, 같은 범위의 값들로 구성되도록 한다
- 이러한 '시간의 축'으로써의 일관성 없이는 히스토그램 간 비교가 불가능하여 생성된 특징이 무의미하다
# 서로 다른 방식으로 얻은 특징들 결합
features = pd.concat([featurized_words.reset_index(drop=True),
featurized_hists],
axis=1)
features
feature | amplitude | percent_beyond_1_std | percent_close_to_median | amplitude | percent_close_to_median | skew |
---|---|---|---|---|---|---|
channel | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 1.674555 | 0.188889 | 0.451852 | 88.0 | 0.444444 | 2.262655 |
1 | 1.990520 | 0.118519 | 0.259259 | 61.0 | 0.666667 | 1.285343 |
2 | 2.903650 | 0.114815 | 0.637037 | 70.0 | 0.666667 | 1.683031 |
3 | 2.515050 | 0.211111 | 0.562963 | 67.0 | 0.555556 | 1.724109 |
4 | 1.966150 | 0.181481 | 0.533333 | 75.0 | 0.777778 | 1.902513 |
... | ... | ... | ... | ... | ... | ... |
450 | 2.134920 | 0.122222 | 0.629630 | 74.0 | 0.777778 | 1.661334 |
451 | 2.218890 | 0.140741 | 0.681481 | 80.0 | 0.777778 | 1.971053 |
452 | 2.487500 | 0.155556 | 0.414815 | 58.5 | 0.666667 | 1.263944 |
453 | 1.545300 | 0.462963 | 0.111111 | 33.5 | 0.222222 | 0.077317 |
454 | 2.244800 | 0.170370 | 0.392593 | 63.5 | 0.666667 | 1.561974 |
455 rows × 6 columns
2.2 시간을 인식하는 거리 측정법¶
클러스터링(Clustering) 분석 시, 거리 지표를 선택해야 한다.
비시계열 데이터에 대한 표준 클러스터링 분석과 마찬가지로,
시계열 특징에도 다양한 표준 거리 지표를 적용할 수 있다.
거리 지표의 선택 과정에 익숙하지 않다면 참고:
이번 절에서는 시계열 간의 유사성 측정 문제를 다루기 위한 거리 지표를 정의한다.
이러한 목적의 거리 지표 중 가장 잘 알려진 것은 동적시간왜곡(DTW, Dynamic Time Warping)이다.
- DTW에 대하여 더 알아보고 싶다면 참고
DTW는 단어 투영과 같이, 전체적인 모양이 가장 중요한 특징인 시계열의 클러스터링에 적합하다.
이 기법의 이름은 시간축을 따라 시계열을 정렬하고,
모양을 비교하는 시간적 '왜곡'에 의존하는 방법론으로부터 영감을 받았다고 한다.
(출처: https://www.codetd.com/ko/article/10565218)
그림 B)에 표시된 두 곡선(두 시계열) 사이의 점선 중 최상의 정렬을 찾아서,
두 곡선의 모양을 비교하기 위해 시간축(x)이 왜곡(확장 or 축소)된다.
- 시계열의 각 점은 반대편 시계열의 점에 매핑되지만, 반드시 일대일 관계로 매핑될 필요하는 없음
- 시계열의 길이가 같거나 시간 범위가 같을 필요는 없다. 모양이 중요하다.
- 적합과정에서 각 시계열에 대한 시간이 항상 뒤로 이동하는 것은 아니며, 이동속도도 동일하지 않다(여기서 말하는 시간 이동은 x축 방향으로 곡선을 따라 진행되는 것).
위와 같은 성질 때문에, 나노초 단위로 측정된 시계열과 수천 년 단위로 측정된 시계열도 비교할 수 있다.
이 알고리즘의 목적 자체가 지나간 시간의 '양'보다는 알고리즘의 시각적 '모양'을 비교하는 것에 가깝다.
즉 '시간'이란 고유한 시간보다는, x축을 따라 균등한 간격으로 정렬된 점들이라는 일반화된 의미가 있다.
DTW의 규칙
- 한 시계열의 모든 시간은 최소한 다른 시계열의 하나의 시간에 대응해야 한다.
- 각 시계열의 처음과 끝은 서로의 처음과 끝에 대응해야 한다.
- 시간 간의 매핑은 과거가 아니라, 미래로 이동하는 관계만 표현해야 한다. 한 시계열의 시간축상에서 이미 지난 시간을 다른 시계열의 시간에 대응할 수는 없다. 가령, 그림 B)의 시간 단위 14 즈음에 위치하는 왜곡된 지점에서 알 수 있듯이, 적합 과정에서 시계열의 두 연속적인 시간 단계는 x축의 동일한 위치로 압축되어 왜곡된다.
이 규칙을 따르도록 시간 정렬을 조정하는 여러 방법이 있지만,
중요한 것은 적합으로부터 선택된 두 곡선을 매핑시킨 결과는 곡선의 거리를 최소화한 것이어야 한다는 점이다.
이 거리나 비용함수(cost function)는 대응된 점 간의 차이에 대한 절댓값의 합으로 측정되는 경우가 일반적이다.
차이에 대한 절댓값이란, 두 시계열이 서로 다른 정도를 말한다.
예제 code¶
이외의 시계열 간 거리 측정 방법
- 프레셰 거리(Frechet distance)
- 피어슨 상관(Pearson correlation)
- 최장공통부분수열(Longest common subsequence)
아쉽지만 거리 지표를 자동으로 택하는 방법은 없다.
다음의 균형을 찾기 위해 노력해야 한다.
- 계산 자원 사용의 최소화
- 최종 목표와 가장 관련 있는 시계열의 특징을 강조하는 지표 선택
- 거리 지표가 사용한 분석 방법의 가정, 강점 및 약점을 반영하는지 확인
- 가령 k-평균 클러스터링은 pairwise distance의 사용 대신 분산을 최소화하므로, 이 기법에는 유클리드와 비슷한 거리만 적절
ts1 = np.sin(np.linspace(1, 10))
ts2 = np.sin(2 * np.linspace(1, 10))
ts3 = np.zeros((50,))
plt.plot(ts1)
plt.plot(ts2)
plt.plot(ts3)
[<matplotlib.lines.Line2D at 0x7fb8ac17bd10>]
np.random.seed(215202)
ts3_noise = np.random.random(ts3.shape)
ts3 = np.zeros((50,))
ts3 = ts3 + ts3_noise
pearsonr(ts1, ts2)
(-0.10087714894729656, 0.485772279067736)
pearsonr(ts1, ts3)
(0.19217749375608117, 0.1812125015007657)
pearsonr(ts2, ts3 + np.random.random(ts3.shape))
(0.18666336432272013, 0.19429849424053683)
Exercise: use what we discussed about dynamic programming to code a DTW function
X = words.iloc[:, 1:271].values
def distDTW(ts1, ts2):
DTW = {}
for i in range(len(ts1)):
DTW[(i, -1)] = np.inf
for i in range(len(ts2)):
DTW[(-1, i)] = np.inf
DTW[(-1, -1)] = 0
# 한 번에 한 단계씩 최적값 계산
for i in range(len(ts1)):
for j in range(len(ts2)):
dist = (ts1[i] - ts2[j]) ** 2
DTW[(i, j)] = dist + min(DTW[(i-1, j)],
DTW[(i, j-1)],
DTW[(i-1, j-1)])
# 완전한 경로를 찾으면 그 경로의 거리를 반환
return sqrt(DTW[len(ts1)-1, len(ts2)-1])
distDTW(ts1, ts2)
3.760909773297475
distDTW(ts1, ts3)
3.7185005510322044
distDTW(ts2, ts3)
4.163253420528914
distDTW(X[0], X[1])
7.777960164340302
dtw.distance(X[0], X[1])
7.777960164340302
p = pairwise_distances(X, metric = distDTW)
---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
<ipython-input-144-7c1ba4bed4d6> in <module>()
----> 1 p = pairwise_distances(X, metric = distDTW)
/usr/local/lib/python3.7/dist-packages/sklearn/metrics/pairwise.py in pairwise_distances(X, Y, metric, n_jobs, force_all_finite, **kwds)
1887 func = partial(distance.cdist, metric=metric, **kwds)
1888
-> 1889 return _parallel_pairwise(X, Y, func, n_jobs, **kwds)
1890
1891
/usr/local/lib/python3.7/dist-packages/sklearn/metrics/pairwise.py in _parallel_pairwise(X, Y, func, n_jobs, **kwds)
1428
1429 if effective_n_jobs(n_jobs) == 1:
-> 1430 return func(X, Y, **kwds)
1431
1432 # enforce a threading backend to prevent data communication overhead
/usr/local/lib/python3.7/dist-packages/sklearn/metrics/pairwise.py in _pairwise_callable(X, Y, metric, force_all_finite, **kwds)
1455 iterator = itertools.combinations(range(X.shape[0]), 2)
1456 for i, j in iterator:
-> 1457 out[i, j] = metric(X[i], Y[j], **kwds)
1458
1459 # Make symmetric
<ipython-input-125-09e4f940cad9> in distDTW(ts1, ts2)
10 for i in range(len(ts1)):
11 for j in range(len(ts2)):
---> 12 dist = (ts1[i] - ts2[j]) ** 2
13 DTW[(i, j)] = dist + min(DTW[(i-1, j)],
14 DTW[(i, j-1)],
KeyboardInterrupt:
정규화된 특징에 대한 계층적 클러스터링
앞서 시계열로 표현된 단어의 원본 기록과 히스토그램 표현에 대한 특징을 모두 계산했다.
특징들은 서로 다른 단위의 크기를 가질 수 있어서, 단일 거리 지표를 적용하려면 이들을 정규화해야 한다(특징 기반 클러스터링에서 일반적인 과정).
from sklearn import preprocessing
feature_values = preprocessing.scale(features.values)
feature_values
array([[-1.25908671, -0.07215845, -0.18280839, 1.49242788, -0.55603133,
1.34838939],
[-0.22823873, -0.81390612, -1.254475 , -0.48903505, 0.44791413,
-0.54925525],
[ 2.75088306, -0.85294547, 0.84764028, 0.17145259, 0.44791413,
0.22293422],
...,
[ 1.39317766, -0.42351261, -0.38889812, -0.67250384, 0.44791413,
-0.5908059 ],
[-1.68078613, 2.81675353, -2.07883394, -2.50719174, -1.55997679,
-2.89487729],
[ 0.60135956, -0.2673552 , -0.51255196, -0.30556626, 0.44791413,
-0.01212226]])
feature_values.shape
(455, 6)
# 계층적 클러스터링 알고리즘을 사용하며,
# 데이터셋에 포함된 단어 50개에 매칭되는 클러스터를 찾기 위해서
# 클러스터 50개에 대한 적합을 수행한다.
from sklearn.cluster import AgglomerativeClustering
feature_clustering = AgglomerativeClustering(n_clusters = 50,
linkage = 'ward')
feature_clustering.fit(feature_values)
words['feature_labels'] = feature_clustering.fit_predict(p)
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-132-f5052b8a0ba2> in <module>()
7 linkage = 'ward')
8 feature_clustering.fit(feature_values)
----> 9 words['feature_labels'] = feature_clustering.fit_predict(p)
NameError: name 'p' is not defined
'Financial Time Series' 카테고리의 다른 글
[시계열 딥러닝] 신경망 학습 파이프라인 만들기 (0) | 2022.03.05 |
---|---|
[시계열 딥러닝] 딥러닝의 개념: 신경망, 순전파 네트워크(Neural Network, Feed Forward Network) (0) | 2022.02.26 |
[시계열의 상태공간 모델] Hidden Markov model(HMM) (0) | 2022.02.05 |
[시계열의 상태공간 모델] Kalman Filter (0) | 2022.02.05 |
댓글