python - 卡尔曼滤波随着时间的推移改变已知方差?

标签 python bayesian kalman-filter pykalman pyro.ai

我有一个简单的卡尔曼模型:

y_1_t = (1 + phi) * alpha_t + e_1_t 

y_2_t = (1 - phi) * alpha_t + e_2_t 

alpha_t+1 = alpha_t + s_t

现在我知道 e_1_t 和 e_2_t 随时间的变化 - 它们不是恒定的。是否有一个 python 包可以用来估计这个模型?

参数 phi 未知。如果模型能够估计的话那就太好了。如果没有,也可以提供,因为存在近似估计。

非常感谢您的任何提示。

PS:我还检查了 pykalman 库。 https://pykalman.github.io/#mathematical-formulation 。似乎这里假设方差随着时间的推移保持不变。

最佳答案

如果您需要在估计期间更改转移协方差(矩阵Q)或测量协方差(矩阵R),您仍然可以使用pykalman 您在问题中提到的库。

看看函数 filter_update()。如果您想从一次调用更改某些过滤器参数(尤其是协方差矩阵)到另一次调用,它会很有用。

函数调用如下所示:

filter_update(filtered_state_mean、filtered_state_covariance、observation=None、transition_matrix=None、transition_offset=None、transition_covariance=None、observation_matrix=None、observation_offset=None、observation_covariance=None)

要修改协方差矩阵,您只需将自定义值放入 transition_covarianceobservation_covariance

看看我的帖子:Kalman filter with varying timesteps

在此示例中,我根据测量来源的传感器动态修改了观测协方差:

    if Sensor[t] == 0:
        obs = None
        obs_cov = None
    else:
        obs = [X[t], Y[t]]

        if Sensor[t] == 1:
            obs_cov = np.asarray(R_1)
        else:
            obs_cov = np.asarray(R_2)

    filtered_state_means[t], filtered_state_covariances[t] = (
    kf.filter_update(
        filtered_state_means[t-1],
        filtered_state_covariances[t-1],
        observation = obs,
        observation_covariance = obs_cov)
    )

由于某种原因,必须将观察协方差转换为 np.asarray,否则该库将无法工作。

关于python - 卡尔曼滤波随着时间的推移改变已知方差?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56596133/

相关文章:

c++ - KalmanFilter(6,2,0) 转换矩阵

filter - 卡尔曼滤波器与指数滤波器

python - 卡尔曼滤波器行为

python - 消费完所有消息后如何关闭kafka消费者?

r - 如何从 MCMCglmm 中的后验密度模拟感兴趣的量?

python - 平均连续的正数

nlp - 简单的情绪分析

php - 贝叶斯评级

python - plt.hist() 仅针对特定频率; Python

python : several cumprods per column