首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我想用pykalman模块计算线性拟合的斜率和截距。

我想用pykalman模块计算线性拟合的斜率和截距。
EN

Stack Overflow用户
提问于 2017-11-18 19:51:43
回答 1查看 591关注 0票数 0

考虑XY的线性回归,其中(xi, yi) = (2, 7), (0, 2), (5, 14) for i = 1, 2, 3。解决方案是(a, b) = (2.395, 2.079),使用手持计算器上的回归函数获得。

我想使用pykalman模块计算线性拟合的斜率和截距。我得到了

代码语言:javascript
复制
ValueError: The shape of all parameters is not consistent.  Please re-check their values. 

如果有人能帮我的话我会很感激的。

下面是我的代码:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-11-24 09:14:48

下面是代码片段:

代码语言:javascript
复制
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()的filtered_state_mean ()(在迭代循环中),因为我们现在知道mean位于filtered_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的标准差,(逗号不是乘积) y2的标准差,并且等于元素(2,1)。对于其他元素也是如此。有人能帮我在x1,x2和x3中加入不确定性吗?我的意思是,如何在上面的代码中实现x中的不确定性。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47365730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档