Location : Home > Languages > Perl > Package Title : Statistics::DEA |
![]() |
Statistics::DEA - 離散指数平滑
use Statistics::DEA; my $dea = Statistics::DEA->new($alpha, $max_gap); while (($data, $time) = some_data_source(...)) { ... $dea->update($data, $time); print $dea->average(), "\n"; print $dea->standard_deviation(), "\n"; print $dea->completeness($time), "\n"; ... }
Statistics::DEA モジュールはデータにズレ(gap)が存在する場合にも、指数的に減衰する平均と標準偏差を計算するために利用される。このアルゴリズムは初期値バイアス(initial value bias)とギャップ後バイアス(post gap bias)を無視している。
new
my $dea = Statistics::DEA->new($alpha, $max_gap);
新しい指数平均オブジェクトを生成する。
$alpha はデータの指数減衰(exponential decay)を指し、0(含む)から1(含まない)までの値をとる。この値が小さいほどデータの減衰は速くなり、大きいと遅くなる。古いデータの重みは -1/log(alpha) (対数は自然対数)の時間に応じて減衰する値となる。
$max_gap はデータが失われたときからの時間差の最大値である。時間間隔が dt で更新されているなら、$max_gap として N*dt を用い、N-1 まで値を増加させていく。それをしたくなければ dt を用いる。
update
$dea->update($data, $time);
指定された時刻における新しいデータによる平均を更新する。この時刻のパラメータはデータ同士の時間差(time gap)で示す。もしデータに時間差がなければ、単調増加、つまり $time++ として処理する。
average
my $avg = $dea->average();
現在の平均を返す。機能的には avg() でも同様である。
standard_deviation
my $std_dev = $dea->standard_deviation();
現在の標準偏差を返す。機能的には std_dev() でも同様である。
completeness
my $completeness = $dea->completeness($time);
現在の completeness を返す。実際のデータの現在の平均と標準偏差にどの程度基づいているかを示す。$max_gap より大きい時間間隔の更新はこの値を小さくし、 $max_gap より小さい時間間隔の更新の列は徐々に初期値から増加していく。(最小値は 0 、最大値は 1 である。)
$time は現在時間を表示すべきである。これは最終アップデート時刻よりも新しくなければならない。
alpha
my $alpha = $dea->alpha();
はデータの現在の指数減衰を返す。また
$dea->alpha($alpha);
はデータの指数減衰を設定する。
max_gap
my $alpha = $dea->max_gap();
は現在の最大時間差(time gap)を返す。
$dea->max_gap($max_gap);
は最大時間差を設定する。
Jarkko Hietaniemi, <jhi@iki.fi>
このライブラリはフリーソフトであり、本ライブラリはフリーソフトウェアであり、Perl自身の配布条件と同等の条件のもとで変更/再配布してもよい。
このアイデアとコードは the Doctor Dobb's Journal Algorithm Alley(September 1998) の記事、"Discontiguous Exponential Averaging"(John C. Gunther)から許可を得て利用している。
彼はこの文書に対する価値ある示唆をしてくれたし Perl を使わずにバグフィクスもしてくれた。したがってこの文書におけるエラーは擬似コードの Perl 化の際に紛れ込んだものである。
![]() |
Updated : 2006/07/20 |