Как я могу оценить ошибку при использовании Пикальмана для регрессии Калмана? - PullRequest
0 голосов
/ 01 октября 2018

Я использую Pykalman для регрессии, но я хотел бы оценить ошибку коэффициента регрессии.В частности, у нас есть следующие выражения:

Y (t) = B (t) X (t) + v

, где сам коэффициент регрессии (B) является случайным процессом, определяемым как:

B (t) = B (t-1) + w

Таким образом, "шум", с которым я имею дело, дается v и w, представляя гауссов шум, где:

w ~ N (0, Q )

v ~ N (0, R )

Теперь - я хотел бы определитьотношение сигнал / шум выражается как Q / R .Мой вопрос заключается в том, как извлечь эти значения из процесса Пикальмана.В настоящее время мой код возвращает только коэффициент регрессии, но как мне получить Q и R?

 def UpdateKalman(self, ins1, ins2):
        obs_mat = np.array([[ins1, 1.0]])
        means, covs = self.kf.filter_update(self.previous_state_means.T,
                                            self.previous_state_covs[0],
                                            observation=np.asarray(ins2),
                                            observation_matrix=obs_mat)

        self.previous_state_covs = covs
        self.previous_state_means = means
        beta = means[:, 0][0]
        return beta

1 Ответ

0 голосов
/ 08 октября 2018

Если вы хотите получить наблюдательную дисперсию (которую, как я понимаю, вы назвали R в своем вопросе), и переходную дисперсию (которую, как я понимаю, вы назвали Q), вы можете получить их непосредственно из pykalman.standard.KalmanFilter объект класса.

Предполагая, что в вашем примере self.kf является отстойным объектом, вы можете получить их как:

   R = self.kf.observation_covariance
   Q = self.kf.transition_covariance

Насколько я понимаю, этот объект и эти матрицы обновляются вваш код с шагом filter_update даже через него не возвращается как вывод этой функции.

...