目次
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以上担当
理化学研究所にて研究員を拝命中 応用数理学会所属