• 追加された行はこの色です。
  • 削除された行はこの色です。
[[FrontPage]]

*changefinder [#s91f6ff5]

オンラインで時系列の変化点検出を行うライブラリ。ChangeFinderアルゴリズムを利用(忘却型ARモデルは現状手抜き)。~
一サンプルずつ与えて変化点スコアを逐次に計算するようになっているので、センサーデータの監視なんかに使いやすそう。

ARIMAモデルとかまじめに計算すると結構重いので普通にn次のARモデルぐらいしか実用的な速度でないかも。

todo: 忘却型ARをcythonで書く
-Repository
--https://bitbucket.org/aihara/changefinder
-require 
--numpy
--scipy
--nose
--statsmodels

**Install [#q62f4abe]
 pip install changefinder

**usage [#k363c3a1]
-changefinder.ChangeFinder(term=30,smooth=7,order=(1,0,0))
: term | 逐次的にARモデルを計算する際に利用する時系列長
: smooth | 計算した外れ値スコアを移動平均平滑化する際の区間長
: order | ARモデル(ARIMA)のパラメータ。デフォルトでは1次のARモデル。
: 返り値 | なし

-changefinder.ChangeFinder.update(sample)
: sample | 最新の観測サンプル
: 返り値 | 現時点での変化点スコア

**sample [#v6e92a1d]
平均を変えてホワイトノイズを100サンプルづつ、計400サンプル生成して、changefinderに掛けてみる。~
ARIMAのパラメータは次数3で、普通に3次のARモデルで計算している。~
ARモデルの次数を計算する際に利用する時系列の長さは30サンプルで、平滑化は7次の移動平均を用いている。


 # -*- coding: utf-8 -*-
 import matplotlib.pyplot as plt
 import changefinder
 import numpy as np
 data=np.concatenate([np.random.normal(0.7, 0.1, 100),
 np.random.normal(1.5, 0.1, 100),
 np.random.normal(0.6, 0.1, 100),
 np.random.normal(1.3, 0.1, 100)])
 
 cf = changefinder.ChangeFinder(30,7,order=(3,0,0))
 
 ret = []
 for i in data:
     score = cf.update(i)
     ret.append(score)
 
 fig = plt.figure()
 ax = fig.add_subplot(111)
 ax.plot(ret)
 ax2 = ax.twinx()
 ax2.plot(data,'r')
 plt.show()

***result [#d8d8e084]
赤線が生成した時系列データで、青線が変化点スコア
#ref(changefinder.png,,50%)

&hatena_bookmark_anywhere();


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS