2016-06-09 2 views
1

Ich lerne, wie man das pykalman package benutzt. Beim Durchlaufen des Kalman EM-Beispiels, das Roboterdaten verwendet, ist ein Fehler aufgetreten. Der EM-Beispielcode lautet here. Das Roboterbeispiel enthält eine Beschreibung und einen Code zum Generieren von Daten.Wenn Sie pykalman (Python-Kalman-Filter) verwenden, welchen Datentyp nimmt die loglikelihood-Funktion an?

Als ich diesen Abschnitt laufen:

# 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) 

Ich erhalte den Fehler unten für die kf.loglikelihood (data.observations) -Funktion, sagt Masked Arrays werden nicht unterstützt. Was sollte ich stattdessen als Parameter für kf.loglikelibility verwenden?

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 

Antwort

1

Ich habe die folgende Zeile

observation=observation.filled()  

kurz vor Linie 168 der pykalman.standard.py Paketdatei, die lautet: Sie haben die vollständige Beobachtungen dieses einfache

loglikelihoods[t] = log_multivariate_normal_density(
      observation[np.newaxis, :], 
      predicted_observation_mean[np.newaxis, :], 
      predicted_observation_covariance[np.newaxis, :, :] 
) 

Unter der Annahme, Workaround wird die loglikelihood() -Methode funktionieren. Hoffentlich wird dies in nachfolgenden Iterationen des Pakets nicht notwendig sein.

Verwandte Themen