I came across a problem when I was using pykalman 0.9.5
in Python 3.6.3
Refer to the code below, why are the results from kf2
and kf3
are different while the results from kf1
and kf3
are identical?
The difference of process between kf2
and kf3
is that I merely split the iteration into running 2 times of the function for kf2
.
Thanks for everyone looking into it.
>>>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]]
I edit the answer, since I misunderstood the question. I think the problem is that you are missing the keyword n_iter
See this code:
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)
I create one filter through KalmanFilter()
, loop 10 iterations and print, then 10 more and print.
This is equivalent as calling .em()
with 20 iterations straight away.
Would produce the following output
[[ 0.95500561]] [ 113.29118228] [[ 6431.66262464]]
[[ 0.93636512]] [ 119.32378005] [[ 249.67547612]]
[[ 0.93636512]] [ 119.32378005] [[ 249.67547612]]