柔性线性卡尔曼滤波器
linkalman的Python项目详细描述
林克曼
linkalman
是一个python包,它解决了带有高斯噪声的线性结构时间序列模型。与其他一些用python编写的流行Kalman滤波器包相比,linkalman具有以下几个优点:
- 说明部分和完全不完整的测量
- 灵活方便的模型结构
- 稳健高效的实施
- 未知优先级的正确实现
- 内置数值和EM算法
- 开放源码和全面的用户手册
- 模块化设计,模型规格直观
安装
linkalman
需要运行以下包:
- numpy公司
- 熊猫
- 网络X
- 神经质的
要安装linkalman
,只需使用标准的pip
命令:
$ pip install linkalman
示例
这里我将提供一个使用linkalman
的简单示例。更多示例请参见here,技术细节请参见user's manual。在
首先定义了贝叶斯结构时间序列(BSTS)模型的系统动力学。在这里,我定义了一个随机线性趋势模型来从时间序列中提取趋势信息(有关详细信息,请参阅user's manual的示例部分)
defmy_f(theta):sig1=np.exp(theta[0])sig2=np.exp(theta[1])sig3=np.exp(theta[2])F=np.array([[1,1],[0,1]])Q=np.array([[sig1,0],[0,sig2]])R=np.array([[sig3]])H=np.array([[1,0]])# Collect system matricesM={'F':F,'Q':Q,'H':H,'R':R}returnM
接下来我们定义一个解算器或优化器,你可以选择任何你喜欢的解算器。这里我只使用scipy.optimize.minimize
。在
defmy_solver(param,obj_func,verbose=False,**kwargs):obj_=lambdax:-obj_func(x)res=minimize(obj_,param,**kwargs)theta_opt=np.array(res.x)fval_opt=res.funreturntheta_opt,fval_opt
现在我们可以拟合数据了。首先,我们初始化模型并提供系统动力学(my_f
)和解算器(my_solver
)。也可以将关键字参数传递给my_f
和my_solver
。在
model=BCM()model.set_f(my_f)model.set_solver(my_solver,method='nelder-mead',options={'xatol':1e-8,'disp':True,'maxiter':10000})theta_init=np.random.rand(3)model.fit(df,theta_init,y_col=['Births'],x_col=['x'],method='LLY')df_LLY=model.predict(df)
就这样!如果你想做更多的工作,你可以做下面的工作来绘制一个关于你的预测的置信区间。在
df_LLY['kf_ub']=df_LLY.Births_filtered+1.96*np.sqrt(df_LLY.Births_fvar)df_LLY['kf_lb']=df_LLY.Births_filtered-1.96*np.sqrt(df_LLY.Births_fvar)df_LLY=df_LLY[df_LLY.index>'1959-01-01']df_LLY.index=pd.to_datetime(df_LLY.index)# Define plot functiondefsimple_plot(df,col_est,col_actual,col_ub,col_lb,label_est,label_actual,title,figsize=(12,8)):ax=plt.figure(figsize=figsize)plt.plot(df.index,df[col_est],'r',label=label_est)plt.scatter(df_LLY.index,df[col_actual],s=20,c='b',marker='o',label=label_actual)plt.fill_between(df.index,df[col_ub],df[col_lb],color='g',alpha=0.2)ax.legend(loc='right',fontsize=9)plt.title(title,fontsize=22)plt.show()simple_plot(df_LLY,'Births_filtered','Births','kf_ub','kf_lb','Prediction','Births','Filtered Births Data')
许可证
3条款BSD
- 项目
标签: