繁体   English   中英

在线性趋势上使用 pykalman 的卡尔曼滤波器是否给出正确答案?

[英]Does Kalman Filter using pykalman on linear trends give correct answers?

我正在尝试使用KalmanFilter来估计一个系列的平均值,但我无法找到与其相关的线性趋势的很多信息,所以我试图用它来预测当输入只是一条直线时的值。坡。

from pykalman import KalmanFilter as KF
y=np.arange(0,100,1)
y=pd.DataFrame(y)
x=y.shift(1)
x=pd.DataFrame(x,index=np.arange(0,100,1))
kf = KF(transition_matrices = [1],
    observation_matrices = [1],
    initial_state_mean = 10,
    initial_state_covariance = 1,
    observation_covariance=1,
    transition_covariance=.01)

state_means, _ = kf.filter(x.dropna().values)
d={'a':np.asarray(x),'b':np.asarray(state_means)}
sm = pd.DataFrame(state_means,index=x.index[:-1],columns=['state'])
sma=x.rolling(window=10).mean()
x['kalman']=sm
x['rolling']=sma
x.plot(figsize=(10,8))

我能够应用它,但我不确定这是否正确。 我看到实际值和卡尔曼 state 之间的差距意味着: 图形 .

我认为 KalmanFilter 会完成那个间隙并最终与直线重合,但一段时间后它们似乎是平行的。

这是正确的还是我做错了什么?

这是我在评论中分享的代码。

from pykalman import KalmanFilter as KF
import numpy as np
import pandas as pd

y=np.arange(0,100,1)
y=pd.DataFrame(y)
x=y.shift(1)
x=pd.DataFrame(x,index=np.arange(0,100,1))
kf = KF(initial_state_mean=0, n_dim_obs=1)
#kf = kf.em(x.dropna().values, n_iter=5)
state_means, _ = kf.filter(x.dropna().values)
d={'a':np.asarray(x),'b':np.asarray(state_means)}
sm = pd.DataFrame(state_means,index=x.index[:-1],columns=['state'])
sma=x.rolling(window=10).mean()
x['kalman']=sm
x['rolling']=sma
x.plot(figsize=(10,8))

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM