sktimeの時系列予測

目次

1. sktime
2. 実験:
_2.1 環境構築
_2.2 データロード
_2.3 モデル学習
_2.4 予測
_2.5 モデル評価

 

1. sktime

Sktimeとはオープンソースのscikit-learns互換の時系列アルゴリズムのPythonライブラリです。時系列関連のタスクを使用した機械学習の統合インターフェースを提供します。これらのタスクは、次のような学習ベースのタスクと密接に関連しています。

時系列予測

時系列回帰

時系列分類

ディープラーニングについては、コンパニオンパッケージsktime-dlを参照してください。

https://github.com/sktime/sktime-dl

 

今回の記事は時系列分類を開設したいと思います。

 

2. 実験:

環境:Colab

データセット:BasicMotions データセットは、4つのアクティビティのスマートウォッチから生成されます。 参加者は、ウォーキング、休憩、ランニング、バドミントンの動きを記録する必要がありました。 データは、10秒間、10分の1秒ごとに1回記録されます。

http://www.timeseriesclassification.com/description.php?Dataset=BasicMotions

 

2.1 環境構築

ライブラリをインストールします。

!pip install sktime

 

ライブラリをインポートします。

import numpy as np

from sklearn.model_selection import train_test_split

from sklearn.pipeline import Pipeline

from sktime.classification.compose import (

ColumnEnsembleClassifier,

TimeSeriesForestClassifier,

)

from sktime.classification.dictionary_based import BOSSEnsemble

from sktime.classification.shapelet_based import MrSEQLClassifier

from sktime.datasets import load_basic_motions

from sktime.transformations.panel.compose import ColumnConcatenator

 

2.2 データロード

basic_motionsのデータセットをロードします。

X, y = load_basic_motions(return_X_y=True)

X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=42)

print(X_train.shape, y_train.shape, X_test.shape, y_test.shape)

(60, 6) (60,) (20, 6) (20,)

 

データを確認します。

fig, ax = plt.subplots(1, figsize=plt.figaspect(0.5))

labels = np.unique(y_train)

for label in labels:

X_train.loc[y_train == label, “dim_0″].iloc[0].plot(ax=ax, label=f”class {label}”)

plt.legend()

ax.set(title=”time series”, xlabel=”Time”);

#  multivariate input data

X_train.head(1)

# multi-class target variable

np.unique(y_train)

array([‘badminton’, ‘running’, ‘standing’, ‘walking’], dtype=object)

 

2.3 モデル学習

steps = [

(“concatenate”, ColumnConcatenator()),

(“classify”, TimeSeriesForestClassifier(n_estimators=100)),

]

clf = Pipeline(steps)

clf.fit(X_train, y_train)

Pipeline(steps=[(‘concatenate’, ColumnConcatenator()),

(‘classify’, TimeSeriesForestClassifier())])

 

2.4 予測

y_pred = clf.predict(X_test)

y_pred

array([‘badminton’, ‘standing’, ‘walking’, ‘badminton’, ‘running’,

‘walking’, ‘running’, ‘badminton’, ‘standing’, ‘running’,

‘standing’, ‘badminton’, ‘walking’, ‘badminton’, ‘walking’,

‘standing’, ‘badminton’, ‘walking’, ‘running’, ‘standing’],

dtype=object)

 

y_pred_prob = clf.predict_proba(X_test)

y_pred_prob

array([[0.66, 0.34, 0.  , 0.  ],

[0.  , 0.  , 0.99, 0.01],

[0.  , 0.  , 0.06, 0.94],

[0.96, 0.04, 0.  , 0.  ],

[0.01, 0.98, 0.  , 0.01],

[0.  , 0.  , 0.04, 0.96],

[0.02, 0.98, 0.  , 0.  ],

[1.  , 0.  , 0.  , 0.  ],

[0.  , 0.  , 1.  , 0.  ],

[0.14, 0.86, 0.  , 0.  ],

[0.  , 0.  , 1.  , 0.  ],

[0.77, 0.23, 0.  , 0.  ],

[0.01, 0.  , 0.  , 0.99],

[0.99, 0.01, 0.  , 0.  ],

[0.  , 0.  , 0.01, 0.99],

[0.  , 0.  , 1.  , 0.  ],

[0.97, 0.03, 0.  , 0.  ],

[0.24, 0.  , 0.  , 0.76],

[0.  , 1.  , 0.  , 0.  ],

[0.04, 0.  , 0.69, 0.27]])

 

2.5 モデル評価

y_pred = clf.score(X_test, y_test)

y_pred

1.0

 

担当者:HM

香川県高松市出身 データ分析にて、博士(理学)を取得後、自動車メーカー会社にてデータ分析に関わる。その後コンサルティングファームでデータ分析プロジェクトを歴任後独立 気が付けばデータ分析プロジェクトだけで50以上担当

理化学研究所にて研究員を拝命中 応用数理学会所属