)に関する取組みをご紹介します。時系列こんにちは、ブレインズテクノロジーの柏木です。今回はPythonで扱える機械学習ライブラリのtslearnを使って、時系列データをクラスタリングしていきたいと思います。github.comtslearnとは時系列分析のための機械学習ツールを提供するPythonパッケージで、scikit-learnをベースとして作られているみたいです。主な機能として、クラスタリング、教師ありの分類、複数の時系列を重ねた際の重心の計算ができたりします。今回使用するに至った一番のモチベーションは、波形や振動などの時系列データに対してクラスタリングできるというところです。tslearnインストールpipコマンドでインストールできます。今回tslearnで使用するモジュールとして、Kshapeというクラスタリング手法を時系列データに適用していきたいと思います。Kshapeは2015年に下記の論文で提唱された方法で、以下の流れで実行されるアルゴリズムになります。SBD)1.に基づいた時系列クラスタの重心を計算(時系列の形状を保持する新しい重心ベースのクラスタリングアルゴリズム)各クラスタに分割する方法は一般的なkmeansと同じだが、距離尺度や重心を計算する時に上記1と2を使う細かい数式や理論については論文を確認下さい。個人的に、内容がしっかり記載されていてわかりやすい論文だと思います。SonyAIBORobotSurface1を加工したものになります。このサイトには様々な時系列データがありますので、色々見てみるのも楽しいかもしれないです。使用したサンプルデータはこちらに置いておきます。あるワーク単位でファイルが10個あり、1秒単位のセンサーデータを想定したものになります。時系列データのクラスタリングそれでは、時系列データのクラスタリングをしていきたいと思います。実際のPythonコードを記載します。ライブラリのインポートです。inline次に、いくつか関数を定義しておきます。transform_vector(time_series_array=tsdata)ここでは、使用するファイルを読み込んで配列に変換します。この時に、仮に時系列のデータの長さがファイル毎に異なる場合、長さを揃える必要があります。そのため、今回は時系列上一番最後の値で埋め合わせを行なっています。長さを揃えた後は、一次元のベクトルに変換しています。それでは、加工したデータを学習して実際にクラスタリングしていきます。0np.random.seed(seed)#相互相関を計算するために、正規化する必要があります。#TimeSeriesScalerMeanVarianceがデータを正規化してくれるクラスになります。1))plt.tight_layout()plt.show()以下、結果をプロットしたものになります。KShapeクラスの引数n_clustersでクラスタ数を指定することができ、今回はn_clusters=2としました。実際のデータセットのページを見てみると、AIBOがカーペットを歩いている場合とコンクリートを歩いている場合の二種類のデータとなっています。それを踏まえて、結果を見てみると良い感じに分離できているように見えます。今回はクラスタ数を2としましたが、クラスタリングする際によくあるクラスタ数をどのように決めたら良いかという問題について、エルボー法で確認した結果を次に示します。各点から割り当てられたクラスタ中心との距離の二乗の合計をクラスタ内誤差平方和(SSE)として計算します。クラスタ数を変えて、それぞれのSSE値をプロットし、「肘」のように曲がった点を最適なクラスタ数とする方法です。SSEが小さいほど歪みのない良いモデルであり、うまくクラスタリングできていることになります。エルボー法について、wikipediaに記載されています。clusters')plt.ylabel('Distortion')plt.show()n_clusters=2で肘のように曲がっているので、今回はクラスタ数2で正解のようです。一般的にエルボー法ではこのようにはっきりと曲がりがある場合は少なく、あまり精度はよくないようです。他にもクラスタ数を決める方法は色々ありシルエット分析、X-means、GAP法などがあります。興味がある方はX-means、GAP法は論文がありますので、参考文献をご覧下さい。クラスタリングの決め方について、wikipediaに記載されています。Wikipediaまとめ今回はtslearnを使って、時系列データのクラスタリングをしてみました。振動や波形データをうまくクラスタリングできるので、非常に重宝すると思います。tslearnにはKshape以外にもTimeSeriesKMeansという手法もあり、距離尺度としてDTW(動的時間伸縮法)やSoft-DTWを使ってクラスタリングをすることができます。時系列に対して重心線を引いてくれたりもします。今回はデータ点数も少なく振動も緩やかであるため、クラスタ数を決めることが容易でしたが、一般的に時系列データのクラスタ数を決めることは難しい問題だったりするので、その辺りを決める良い方法を模索していきたいと思います。ブレインズテクノロジーでは「共に成長できる仲間」を募集中です。09:05Pythonの機械学習ライブラリtslearnを使った時系列データのクラスタリングTweet関連記事2018-07-24AngularでPlotlyのグラフを描画してみたブレインズテクノロジーの加藤です。例年以上に暑い日々が続い...2018-06-11PythonでのARIMAモデルを使った時系列データの予測の基礎[後編]こんにちは。ブレインズテクノロジーの岩城です。SageMakerのDeepARアルゴリズムで時系列予測データ分析担当の青木です。Pipelinesを使ってみたImpulse開発チームの塚田です。)に関する取組みをご紹介します。Inc.または関連会社の登録商標およびサービス・マークであり、同社の許可に基づいて使用しています。reserved.ガートナーは、ガートナー・リサーチの発行物に掲載された特定のベンダー、製品またはサービスを推奨するものではありません。最高のレーティング又はその他の評価を得たベンダーのみを選択するように助言するものではありません。ガートナー・リサーチの発行物は、ガートナー・リサーチの見解を表したものであり、事実を表現したものではありません。ガートナーは、明示または黙示を問わず、本リサーチの商品性や特定目的への適合性を含め、一切の保証を行うものではありません。はてなブログをはじめよう!brains-techさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。