【问题标题】:I want to calculate slope and intercept of a linear fit using pykalman module我想使用 pykalman 模块计算线性拟合的斜率和截距
【发布时间】:2018-05-02 02:53:51
【问题描述】:

考虑YX 的线性回归,其中(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

【问题讨论】:

  • 请报告整个错误信息,
  • 回溯(最近一次调用最后):文件“quicktest3.py”,第 17 行,在 中 initial_state_mean = initial_state_matrix,observation_covariance=observation_covariance1) 文件“/usr/local/lib/python2.7 /site-packages/pykalman/standard.py”,第 1027 行,在 init n_dim_state 文件“/usr/local/lib/python2.7/site-packages/pykalman/standard.py”,行78、在_determine_dimensionality“请重新检查它们的值”。 ValueError:所有参数的形状不一致。请重新检查它们的值。

标签: python numpy python-2.x pykalman


【解决方案1】:

这里是sn-p的代码:

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]]。请注意,新的过滤状态均值用作新 kf.filter_update() 的过滤状态均值(在迭代循环中),因为我们现在知道过滤状态协方差 = 过滤状态协方差的平均值在哪里。迭代 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 中的不确定性。

【讨论】:

  • 您回答了自己的问题吗?问题还在吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 2014-02-28
  • 2015-09-09
  • 1970-01-01
  • 2017-09-13
相关资源
最近更新 更多