ValueError: форма всех параметров - PullRequest
0 голосов
/ 20 декабря 2018

Для моего эксперимента у меня есть очень маленькие данные временных рядов с тремя столбцами, отформатированными следующим образом.Полный набор данных прилагается здесь для воспроизводимости, так как я не могу прикрепить файл к stackoverflow:

http://www.mediafire.com/file/el1tkrdun0j2dk4/testdata.csv/file

  time        X      Y
 0.040662  1.041667  1
 0.139757  1.760417  2
 0.144357  1.190104  1
 0.145341  1.047526  1
 0.145401  1.011882  1
 0.148465  1.002970  1
 ....      .....     .

Мы хотели сделать сглаживание, и вот мой код

import matplotlib.pyplot as plt 
from pykalman import KalmanFilter 
import numpy as np
import pandas as pd

df = pd.read_csv('testdata.csv')
print(df)
pd.set_option('use_inf_as_null', True)

df.dropna(inplace=True)

X = df.drop('Y', axis=1)
y = df['Y']


d1= np.array(X)
d2 = np.array(y)

measurements = np.asarray(d1)

kf = KalmanFilter(transition_matrices=[1],
                  observation_matrices=[1],
                  initial_state_mean=measurements[0],
                  initial_state_covariance=1,
                  observation_covariance=5,
                  transition_covariance=1) 
state_means, state_covariances = kf.filter(measurements) 
state_std = np.sqrt(state_covariances[:,0]) 
print (state_std) 
print (state_means) 
print (state_covariances)

plt.plot(measurements, '-r', label='measurment') 
plt.plot(state_means, '-g', label='kalman-filter output') 
plt.legend(loc='upper left') 
plt.show()

Если мы рассмотрим только столбцы X и Y, как я делал в моем коде выше, это дает следующий вывод графика

enter image description here

Я хотел иметь первый столбец ('time) (1-10) на x-axis) и значения второго столбца (X) на y-axis.

Однако, когда я пытаюсь добавить первый столбец в свой набор данных (time), я получаю следующую ошибку

ValueError: The shape of all parameters is not consistent. Please re-check their values.

Как решитьЭта проблема?Любая помощь будет оценена.

1 Ответ

0 голосов
/ 20 декабря 2018

Вы можете сделать следующие изменения:

1 Добавить measurements[0,1], поэтому вход для intial_state_mean представляет собой одно значение.Это должно избавить от ошибки, которую вы видели.

kf = KalmanFilter(transition_matrices=[1],
                  observation_matrices=[1],
                  initial_state_mean=measurements[0,1], # Change here
                  initial_state_covariance=1,
                  observation_covariance=5,
                  transition_covariance=1)

2 Измените ввод на kf.filter, чтобы включить только столбец X: measurements[:,1].

state_means, state_covariances = kf.filter(measurements[:,1]) # Change here
state_std = np.sqrt(state_covariances[:,0])
print (state_std)
print (state_means)
print (state_covariances)

3 Plottime по оси X.

plt.plot(measurements[:,0], measurements[:,1], '-r', label='measurment') # Change here
plt.plot(measurements[:,0], state_means, '-g', label='kalman-filter output') # Change here
plt.legend(loc='upper left')
plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...