代码之家  ›  专栏  ›  技术社区  ›  Gabriel_F

EM algo使用pykalman返回不同的答案

  •  0
  • Gabriel_F  · 技术社区  · 7 年前

    我在使用时遇到了一个问题 pykalman 0.9.5 在里面 Python 3.6.3

    请参阅下面的代码,为什么结果来自 kf2 kf3 虽然 kf1 kf3 是否相同?

    过程的差异 kf2 kf3 我只是将迭代分为运行2次函数 kf2 .

    谢谢大家的关注。

    >>>pri_mean[:10]
    array([ 2827.2222,  2829.6   ,  2831.    ,  2832.1   ,  2833.1   ,  2835.3   ,  2833.9   ,
            2833.8   ,  2833.6   ,  2833.    ])
    
    >>>kf1 = KalmanFilter()
    >>>kf1 = kf1.em(pri_mean, 10, em_vars='all')
    >>>print(kf1.transition_matrices, kf1.transition_offsets, kf1.transition_covariance)
    [[ 0.99741876]] [ 10.04426882] [[ 2896.92752373]]
    >>>kf2 = kf1.em(pri_mean, 10, em_vars='all')
    >>>print(kf2.transition_matrices, kf2.transition_offsets, kf2.transition_covariance)
    [[ 0.99364606]] [ 20.02260806] [[ 2600.94151188]]
    
    >>>kf3 = KalmanFilter()
    >>>kf3 = kf3.em(pri_mean, 20, em_vars='all')
    >>>print(kf3.transition_matrices, kf3.transition_offsets, kf3.transition_covariance)
    [[ 0.99741876]] [ 10.04426882] [[ 2896.92752373]]
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   drublackberry    7 年前

    我编辑了答案,因为我误解了这个问题。我认为问题是你缺少关键词 n_iter

    请参阅此代码:

    kf1 = KalmanFilter()
    kf1 = kf1.em(pri_mean, n_iter=10, em_vars='all')
    print(kf1.transition_matrices, kf1.transition_offsets, kf1.transition_covariance)
    kf1 = kf1.em(pri_mean, n_iter=10, em_vars='all')
    print(kf1.transition_matrices, kf1.transition_offsets, kf1.transition_covariance)
    kf1 = KalmanFilter()
    kf1 = kf1.em(pri_mean, n_iter=20, em_vars='all')
    print(kf1.transition_matrices, kf1.transition_offsets, kf1.transition_covariance)
    

    我创建了一个过滤器 KalmanFilter() ,循环10次迭代并打印,然后再循环10次并打印。 这相当于调用 .em() 直接进行20次迭代。

    将产生以下输出

    [[ 0.95500561]] [ 113.29118228] [[ 6431.66262464]]
    [[ 0.93636512]] [ 119.32378005] [[ 249.67547612]]
    [[ 0.93636512]] [ 119.32378005] [[ 249.67547612]]