2017-11-18 1 views
0

berechnen Betrachten Sie die lineare Regression von Y auf X, wo (xi, yi) = (2, 7), (0, 2), (5, 14) for i = 1, 2, 3. Die Lösung ist (a, b) = (2.395, 2.079), erhalten mit der Regressionsfunktion auf einem Taschenrechner. Verwendung des pykalman ModulIch möchte Steigung und Schnittpunkt einer linearen Anpassung mit Pykalman-Modul

Ich will die Steigung und den Achsenabschnitt einer linearen Anpassung berechnen. Ich bekomme

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

Ich würde wirklich schätzen, wenn mir jemand helfen würde.

Hier ist mein Code:

from pykalman import KalmanFilter 
import numpy as np 

measurements = np.asarray([[7], [2], [14]]) 

initial_state_matrix = [[1], [1]] 

transition_matrix = [[1, 0], [0, 1]] 

observation_covariance_matrix = [[1, 0],[0, 1]] 

observation_matrix = [[2, 1], [0, 1], [5, 1]] 

kf1 = KalmanFilter(n_dim_state=2, n_dim_obs=6, 
        transition_matrices=transition_matrix, 
        observation_matrices=observation_matrix, 
        initial_state_mean=initial_state_matrix, 
        observation_covariance=observation_covariance_matrix) 

kf1 = kf1.em(measurements, n_iter=0) 

(smoothed_state_means, smoothed_state_covariances) = kf1.smooth(measurements) 

print smoothed_state_means 
+0

Bitte melden Sie die Gesamtheit der Fehlermeldung, – gboffi

+0

Traceback (jüngste Aufforderung zuletzt): File "quicktest3.py", Zeile 17, in initial_state_mean = initial_state_matrix, observation_covariance = observation_covariance1) Datei „/ usr/local /lib/python2.7/site-packages/pykalman/standard.py ", Zeile 1027, in __init__ n_dim_state Datei" /usr/local/lib/python2.7/site-packages/pykalman/standard.py ", Zeile 78, in _determine_dimensional "Bitte überprüfen Sie ihre Werte." ValueError: Die Form aller Parameter ist nicht konsistent. Bitte überprüfen Sie ihre Werte erneut. –

Antwort

0

Hier ist der Code-Schnipsel:

from pykalman import KalmanFilter 

import numpy as np 

kf = KalmanFilter() 

(filtered_state_means, filtered_state_covariances) = kf.filter_update(filtered_state_mean = [[0],[0]], filtered_state_covariance = [[90000,0],[0,90000]], observation=np.asarray([[7],[2],[14]]),transition_matrix = np.asarray([[1,0],[0,1]]), observation_matrix = np.asarray([[2,1],[0,1],[5,1]]), observation_covariance = np.asarray([[.1622,0,0],[0,.1622,0],[0,0,.1622]])) 

print filtered_state_means 

print filtered_state_covariances 

for x in range(0, 1000): 

    (filtered_state_means, filtered_state_covariances) = kf.filter_update(filtered_state_mean = filtered_state_means, filtered_state_covariance = filtered_state_covariances, observation=np.asarray([[7],[2],[14]]),transition_matrix = np.asarray([[1,0],[0,1]]), observation_matrix = np.asarray([[2,1],[0,1],[5,1]]), observation_covariance = np.asarray([[.1622,0,0],[0,.1622,0],[0,0,.1622]])) 

print filtered_state_means 

print filtered_state_covariances 

filtered_state_covariance wurde groß gewählt, weil wir keine Ahnung, wo unsere filter_state_mean haben zunächst ist und die Beobachtungen sind nur [[y1 ], [y2], [y3]]. Beobachtungsmatrix ist [[x1,1], [x2,1], [x3,1]] und gibt somit das zweite Element als unseren Achsenabschnitt an. Stellen Sie sich folgendes vor: y1 = m * x1 + c wobei m und c Steigung und Schnittpunkt sind. In unserem Fall filtered_state_mean = [[m], [c]]. Beachten Sie, dass das neue filtered_state_means als filtered_state_mean für das neue kf.filter_update() (in der Iterationsschleife) verwendet wird, weil wir jetzt wissen, wo der Mittelwert bei filtered_state_covariance = filtered_state_covariances liegt. Iterating es 1000 Mal konvergiert das Mittel zum realen Wert. Wenn Sie über die Funktion wissen wollen/Methode der Link: https://pykalman.github.io/

Wenn der Systemzustand ändert sich nicht zwischen den Messungen, dann transition_matrix φ = I.

(auch vacuous Bewegungsschritt genannt) Ich bin nicht sicher, ob das, was ich jetzt sagen werde, wahr ist oder nicht. Also korrigieren Sie mich bitte, wenn ich falsch liege

observation_covariance Matrix muss der Größe m x m sein, wobei m die Anzahl der Beobachtungen ist (in unserem Fall = 3). Die diagonalen Elemente sind nur Varianzen. Ich glaube Varianz_y1, Varianz_y2 und Varianz_y3, und Elemente außerhalb der Diagonale sind Kovarianzen. Zum Beispiel ist Element (1, 2) in der Matrix die Standardabweichung von y1, (COMMA NOT PRODUCT) Standardabweichung von y2 und ist gleich Element (2,1). Ähnlich für andere Elemente. Kann jemand mir helfen, Unsicherheit in x1, x2 und x3 einzuschließen. Ich meine, wie implementieren Sie Unsicherheiten in x im obigen Code.

+0

Haben Sie Ihre eigene Frage beantwortet? Ist das Problem immer noch da? – Anton

Verwandte Themen