考虑Y
X
的线性回归,(xi, yi) = (2, 7), (0, 2), (5, 14) for i = 1, 2, 3
。解决方案是(a, b) = (2.395, 2.079)
,使用手持计算器上的回归函数获得。
我想用斜率计算斜率和线性拟合的截距
pykalman
模块。我得到了
ValueError: The shape of all parameters is not consistent. Please re-check their values.
如果有人能帮助我,我真的很感激。
这是我的代码:
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 :(得分:0)
以下是代码段:
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选择得很大,因为我们不知道我们的filter_state_mean最初在哪里,观察只是[[y1],[y2],[y3]]。 Observation_matrix是[[x1,1],[x2,1],[x3,1]]因此给出第二个元素作为我们的截距。想象一下,这样y1 = m * x1 + c其中m和c分别是斜率和截距。在我们的例子中,filtered_state_mean = [[m],[c]]。请注意,新的filtered_state_means用作新的kf.filter_update()的filter_state_mean(在迭代循环中),因为我们现在知道filter_state_covariance = filtered_state_covariances的平均值。迭代1000次将均值收敛到实际值。如果您想了解所使用的功能/方法,则链接为:https://pykalman.github.io/
如果系统状态在测量之间没有变化(也称为真空运动步骤),则transition_matrixφ= I.
我不确定我现在要说的是不是真的。如果我错了,请纠正我
observation_covariance矩阵的大小必须为m x m,其中m是观测数(在我们的例子中= 3)。对角元素只是方差我认为variance_y1,variance_y2和variance_y3以及非对角线元素是协方差。例如,矩阵中的元素(1,2)是y1的标准偏差,(COMMA NOT PRODUCT)标准偏差y2并且等于元素(2,1)。同样适用于其他要素。有人可以帮助我在x1,x2和x3中包含不确定性。我的意思是如何在上面的代码中实现x中的不确定性。