17

時間t 0 ... t Nに多くのプロセスx 0 ... x Nによって取得されたxの一連の測定値があるとします。時間tで、私が知っている長期的な傾向はなく、xは指数平滑法などのアルゴリズムから予測できるという仮定に基づいて、 xの現在の値を推定したいとします。多くのプロセスがあり、Nが非常に大きくなる可能性があるため、いくつかの値 (以前の状態など) しか保存できません。

ここでの 1 つのアプローチは、通常の指数平滑化アルゴリズムを適応させることです。サンプルが定期的に取得される場合、次のような推定量y nを維持します。

y n = α . y n-1 + ( 1 - α ). × n

サンプリングが不規則な場合、このアプローチは適切ではありません。多くのサンプルを一緒に使用すると、不均衡な影響が生じるからです。したがって、この式は次のように適用できます。

y n = α n . y n-1 + (1 - α n )。× n

どこ

α n = e -k.(t n - t n-1 )

前の 2 つのサンプル間の間隔に応じて平滑化定数を動的に調整する IE。私はこのアプローチに満足しており、うまくいっているようです。これはここで与えられた最初の回答であり、この種の手法の優れた要約は、この 2012 年の論文 ( PDF ) で Eckner によって与えられています。

さて、私の質問は次のとおりです。上記を適応させて、発生率を推定したいと思います。ときどきイベントが発生します。同様の指数手法を使用して、イベントの発生率を推定したいと考えています。

2 つの明白な戦略は次のとおりです。

  • データ系列x nとして最後の 2 つのイベント間の遅延を使用して、最初または 2 番目の手法を使用するには。
  • 最後の 2 つのイベント間の遅延の逆数 (つまり、速度) をデータ系列x nとして使用して、最初または 2 番目の手法を使用します。

私が知る限り、これらはどちらも良い戦略ではありません。まず、500 ミリ秒ごとに発生するイベント (一方で) と、他方で 200 ミリ秒の遅延と 800 ミリ秒の遅延で発生するイベントを取り上げます。明らかに、これらは両方とも 1 秒間に 2 回発生するため、指定されたレート推定値は同じになるはずです。最後のサンプルの時間を無視するのは無謀に思えるので、2 番目の戦略に集中します。200 ミリ秒/800 ミリ秒のサンプル ストリームをシミュレートすると、約 1.5 の推定値が生成されるため (逆数ではなく) 遅延を使用しても、適切な予測因子にはなりません (逆数の平均は平均の逆数ではないことに基づく)。

しかし、はるかに重要なことは、どちらの戦略も、実際に実際に起こっていること、つまり突然すべてのイベントが長時間停止することに対応していないことです。したがって、 yの「最新」の値は最後のイベントの値であり、レートの推定値は計算されません。したがって、レートは一定に見えます。もちろん、データを遡及的に分析していれば問題ありませんが、リアルタイムで分析しています。

これを行う別の方法は、スレッドを定期的に (たとえば 10 秒ごとに) 実行し、この 10 秒間隔で発生回数をカウントすることです。統計は頻繁に必要とされないため、これは非常にリソースが多く、ミューテックスの問題のためにすべてをポーリングするスレッドを実行するのは嫌いです。したがって、(どういうわけか)最後のサンプルが取得されてからの時間(たとえば)によって読み取られた状態を調整するアルゴリズムを使用したいと思います。これは、パフォーマンスがサンプルとは無関係に選択された時間に測定される場合、合理的なアプローチのように思われます。測定時間は平均してサンプル間の期間の半分になるため、レートの非常に粗い平滑化されていない推定値は、最後のサンプルからの時間。さらに複雑なことに、測定時間はサンプルとは無関係ではありません。

これには簡単な答えがあると感じていますが、私にはわかりません。イベントがポアソン分布であると仮定し、最後のサンプルからの間隔と何らかの形の移動平均に基づいてλの推定値を導き出すのが正しいルートだと思いますが、私の統計はさびすぎてこれを機能させることができません。

ここにこの質問のほとんどだましがありますが、答えはあまり満足のいくものではないようです(理由を説明したいと思います)。推定する変数が 1 つあり、それについて何も知らないことを考えると、カルマン フィルターは重く見えると付け加えておきます。他にも多くの似たようなものがありますが、そのほとんどは値の大きなビンを保持することを提案するか (ここではメモリの観点からは現実的ではありません)、上記の 2 つの問題に対処していません。

4

2 に答える 2

20

まず、イベント自体の発生率が一定であると仮定する場合 (または、長期的な平均のみに関心がある場合)、単純に次のように見積もることができます。

        λ* = N / ( tt 0 )

ここで、tは現在の時刻、t 0は観測の開始時刻、Nはt 0以降に観測されたイベントの数、λ* は真の頻度 λ の推定値です。

この時点で、上記の推定式が積分として再定式化される可能性があることに注意してください。

        λ* = 積分 ( δイベント(τ) dτ ) / 積分 ( 1 dτ )

ここで、積分の変数 τ の範囲はt 0からtであり、δ event (τ) = sum( δ(τ − t i ), i = 1 .. N ) は、単一のデルタを持つディラック デルタ関数の和Nです。 -各イベントiの発生時刻t iにおけるピーク。

もちろん、これは λ* を計算するのにまったく役に立たない方法ですが、概念的には有用な定式化であることがわかります。基本的に、この式を表示する方法は、関数 δイベント(τ) がイベント数が時間 τ で増加する瞬間の速度を測定し、2 番目の被積分関数 (定数 1 のみ) が時間の速度を測定することです。時間の経過とともに増加します (もちろん、これは 1 秒あたり 1 秒です)。


わかりましたが、周波数 λ 自体が時間の経過とともに変化する可能性があり、その現在の値、または少なくとも最近の期間の平均を推定したい場合はどうでしょうか?

上記の積分比の定式化を使用すると、最近の時間に偏った重み関数w (τ) によって両方の被積分関数を重み付けするだけで、そのような推定値を取得できます。

        λ*最近= 積分 ( δイベント(τ) w (τ) dτ ) / 積分 ( w (τ) dτ )

あとは、これらの積分が計算しやすいものに単純化されるように、適切なw (τ) を選択するだけです。結局のところ、ある減衰率k に対してw (τ) = exp( k (τ − t ))の形式の指数関数的に減衰する重み関数を選択すると、積分は次のように単純化されます。

        λ*最近= sum( exp( k ( t it )), i = 0 .. N ) k / ( 1 − exp( k ( t 0t )) )

t 0 → −∞としての制限(つまり、実際には、総観測時間 ( tt 0 ) が重​​み減衰時間スケール 1/ kよりもはるかに大きい場合) では、これはさらに次のように単純化されます。

        λ*最近= k sum( exp( k ( t it )), i = 0 .. N )

悲しいかな、単純にこの式を適用しても、すべてのイベント時間t iを覚えておく必要があります。ただし、通常の指数加重平均を計算する場合と同じトリックを使用できます — 加重平均イベント率 λ* recent ( t' ) が以前の時間t'に与えられ、 t'tの間に新しいイベントが発生していないと仮定すると、現在の加重平均イベント率 λ* recent ( t ) は次のように簡単に計算できます。

        λ*最近( t ) = exp( k ( t't ) ) λ*最近( t' )

さらに、ちょうど時刻tに発生する新しいイベントを観察すると、イベント直後の加重平均イベント率は次のようになります。

        λ*最近( t ) = k + exp( k ( t't ) ) λ*最近( t' )


したがって、非常に単純なルールが得られます。保存する必要があるのは、以前に観測されたイベントの時間t lastと、そのイベントの直後に推定された最近のイベント率 λ* lastだけです。(たとえば、これらをt last = t 0および λ* last = 0に初期化することができます。実際、λ* last = 0 の場合、 t lastの値は違いはありませんが、非ゼロの λ* last の場合は違います。)

新しいイベントが発生するたびに (時刻t new )、これらの値を次のように更新します。

        λ* lastk + exp( k ( t lastt new ) ) λ* last
        t lastt new

現在の時刻tでの最近のイベント率の平均を知りたいときはいつでも、次のように単純に計算します。

        λ*( t ) = exp( k ( t lastt ) ) λ* last


Ps。t lastの(任意の) 初期に対する初期バイアスを補正するためtt 0 . これを行うには、単にt = t 0でt last = 0から開始し、上記のようにt lastを更新しますが、時間tで推定される最近のイベント率の平均を次のように計算します。

        λ* corr ( t ) = exp( k ( t lastt ) ) λ* last / ( 1 − exp( k ( t 0t )) )

(ここで、t 0は、最初のイベントの発生ではなく、イベントの測定を開始する時間を示します。)

これにより、初期の分散が増加するという犠牲を払って、ゼロに向かう初期バイアスがなくなります。k = 0.1 で真の平均イベント率が 2 の場合の補正の効果を示すプロットの例を次に示します。

初期バイアス補正あり/なしの λ* の経時プロット
赤い線は初期バイアス補正なし (λ*( t 0 ) = 0 から開始) の λ*( t )を示し、緑の線はバイアス補正された推定値 λ* corr ( t )を示します。


pps。上のプロットが示すように、上で計算された λ* は時間の連続関数ではありません。イベントが発生するたびにkだけ跳ね上がり、イベントが発生しないとゼロに向かって指数関数的に減衰します。

より滑らかな推定を希望する場合は、λ* 自体の指数関数的に減衰する平均を計算できます。

        λ**( t ) = 積分( λ*(τ) exp( k 2 (τ − t )) dτ ) / 積分( exp( k 2 (τ − t )) dτ )

ここで、λ* は上記で計算した指数関数的に減衰する平均イベント レート、k 2は 2 番目の平均の減衰レートで、積分は −∞ < τ ≤ tを超えています。

この積分は、上記のように段階的な更新規則によって計算することもできます。

        λ** lastWt ) λ* last + exp( − k 2 Δ t ) λ** last
        λ* lastk 1 + exp( − k 1 Δ t ) λ* last
        t lastt new

ここで、k 1k 2は 1 回目と 2 回目の平均の減衰率、Δ t = t newt lastはイベント間の経過時間です。

        Wt ) = k 2 ( exp( − k 2 Δ t ) − exp( − k 1 Δ t ) ) / ( k 1k 2 )

k 1k 2の場合、または

        Wt ) = k Δ t exp( − k Δ t )

k 1 = k 2 = kの場合(( k 1k 2 ) → 0のときの極限として前者から生じる後者の式)。

任意の時点tの 2 番目の平均を計算するには、同じ式を使用します。

        λ**( t ) = Wt ) λ*最後 + exp( − k 2 Δ t ) λ**最後

Δ t = tt lastを除いて。


上記のように、この推定値は、適切な時間依存のスケーリング係数を適用することによってバイアス補正することもできます。

        λ**相関( t ) = λ** ( t ) / (1 - S ( tt 0 ))

どこ:

        St ) = ( k 1 exp( − k 2 Δ t ) − k 2 exp( − k 1 Δ t ) ) / ( k 1k 2 )

k 1k 2の場合、または

        St ) = (1 + k Δ t ) exp( − k Δ t )

k 1 = k 2 = kの場合。

以下のプロットは、この平滑化の効果を示しています。赤と緑の線は上記の λ*( t ) と λ* corr ( t ) を示し、黄色と青の線はk 1 = 0.1で計算されたλ**( t ) と λ** corr ( t ) を示します。 (上記のように) k 2 = 0.2:

初期バイアス補正の有無にかかわらず、経時的な λ* および λ** のプロット

于 2014-05-12T19:53:08.993 に答える
2

これを試すことができます:

各イベントで次のように推定量 zn を維持します。

z n = ( z n-1 + κ ).e - κ .( t n -t n-1 )

これは、s -1のイベント レートに向かって収束します。次に、わずかに優れた推定器があります(イベントの直前または直後に推定値を計算すると、関連するエラー/ノイズがまだあるため):

w n = z n .e -κ/(2.z n )

あなたの例では、2s -1 (500ms の逆数) に収束します。

定数 κ は平滑化に関与し、s -1の中にあります。値が小さいほど滑らかになります。イベント レートがおよそ数秒の場合、κ の値は 0.01s-1 から始めるのが適切です。

この方法には開始バイアスがあり、収束を高速化するために z 0を推定値に設定できます。κ の値が小さいと、バイアスが長く維持されます。

ポアソンのような分布を分析するはるかに強力な方法がありますが、多くの場合、大きなバッファーが必要になります。フーリエ変換などの周波数解析もその一つです。

于 2014-05-12T19:50:43.840 に答える