首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当使用pykalman (Python卡尔曼滤波器)时,对数似然函数采用什么数据类型?

当使用pykalman (Python卡尔曼滤波器)时,对数似然函数采用什么数据类型?
EN

Stack Overflow用户
提问于 2016-06-09 23:54:02
回答 2查看 1.3K关注 0票数 2

我正在学习如何使用pykalman package。在使用机器人数据的卡尔曼EM示例中,我遇到了一个错误。EM示例代码是here。机器人示例附带了用于生成数据的描述和代码。

当我运行此部分时:

代码语言:javascript
复制
    # Learn good values for parameters named in `em_vars` using the EM algorithm
    loglikelihoods = np.zeros(10)
    for i in range(len(loglikelihoods)):
    kf = kf.em(X=data.observations, n_iter=1)
    loglikelihoods[i] = kf.loglikelihood(data.observations)

对于kf.loglikelihood(data.observations)函数,我得到以下错误,指出不支持掩码数组。我应该使用什么作为kf.loglikelihood的参数呢?

代码语言:javascript
复制
    C:\Users\Jenny\Anaconda3\lib\site-packages\pykalman-0.9.5-py3.5.egg\pykalman\standard.py in loglikelihood(self, X)
       1472         loglikelihoods = _loglikelihoods(
       1473           observation_matrices, observation_offsets, observation_covariance,
    -> 1474           predicted_state_means, predicted_state_covariances, Z
       1475         )
       1476 

    C:\Users\Jenny\Anaconda3\lib\site-packages\pykalman-0.9.5-py3.5.egg\pykalman\standard.py in _loglikelihoods(observation_matrices, observation_offsets, observation_covariance, predicted_state_means, predicted_state_covariances, observations)
        168                 observation[np.newaxis, :],
        169                 predicted_observation_mean[np.newaxis, :],
    --> 170                 predicted_observation_covariance[np.newaxis, :, :]
        171             )
        172     return loglikelihoods

    C:\Users\Jenny\Anaconda3\lib\site-packages\pykalman-0.9.5-py3.5.egg\pykalman\utils.py in log_multivariate_normal_density(X, means, covars, min_covar)
         71                                       lower=True)
         72         cv_log_det = 2 * np.sum(np.log(np.diagonal(cv_chol)))
    ---> 73         cv_sol = solve_triangular(cv_chol, (X - mu).T, lower=True).T
         74         log_prob[:, c] = - .5 * (np.sum(cv_sol ** 2, axis=1) + \
         75                                      n_dim * np.log(2 * np.pi) + cv_log_det)

    C:\Users\Jenny\Anaconda3\lib\site-packages\scipy\linalg\basic.py in solve_triangular(a, b, trans, lower, unit_diagonal, overwrite_b, debug, check_finite)
        156     """
        157     a1 = _asarray_validated(a, check_finite=check_finite)
    --> 158     b1 = _asarray_validated(b, check_finite=check_finite)
        159     if len(a1.shape) != 2 or a1.shape[0] != a1.shape[1]:
        160         raise ValueError('expected square matrix')

    C:\Users\Jenny\Anaconda3\lib\site-packages\scipy\_lib\_util.py in _asarray_validated(a, check_finite, sparse_ok, objects_ok, mask_ok, as_inexact)
        183     if not mask_ok:
        184         if np.ma.isMaskedArray(a):
    --> 185             raise ValueError('masked arrays are not supported')
        186     toarray = np.asarray_chkfinite if check_finite else np.asarray
       187     a = toarray(a)

    ValueError: masked arrays are not supported
EN

回答 2

Stack Overflow用户

发布于 2016-11-13 23:13:15

我添加了下面这行

代码语言:javascript
复制
observation=observation.filled()    

就在pykalman.standard.py程序包文件的第168行之前,其内容为:

代码语言:javascript
复制
loglikelihoods[t] = log_multivariate_normal_density(
            observation[np.newaxis, :],
            predicted_observation_mean[np.newaxis, :],
            predicted_observation_covariance[np.newaxis, :, :]
)

假设您有完整的观察结果,这个简单的变通方法将使loglikelihood()方法工作。希望这在包的后续迭代中不是必需的。

票数 2
EN

Stack Overflow用户

发布于 2018-03-27 10:37:34

Github上提到了pykalman的问题,solution对我很有效。

链接中提到的解决方案基本上是修改standard.py中第112到173行的代码:

代码语言:javascript
复制
def _loglikelihoods(observation_matrices, observation_offsets,
     for t in range(n_timesteps):
         observation = observations[t]
         if not np.any(np.ma.getmask(observation)):
+            observation_data = np.ma.getdata(observation)
             observation_matrix = _last_dims(observation_matrices, t)
             observation_offset = _last_dims(observation_offsets, t, ndims=1)
             predicted_state_mean = _last_dims(


             loglikelihoods[t] = log_multivariate_normal_density(
-                observation[np.newaxis, :],
+                observation_data[np.newaxis, :],
                 predicted_observation_mean[np.newaxis, :],
                 predicted_observation_covariance[np.newaxis, :, :]
             )
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37730850

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档