柔性线性卡尔曼滤波器

linkalman的Python项目详细描述


林克曼

linkalman是一个python包,它解决了带有高斯噪声的线性结构时间序列模型。与其他一些用python编写的流行Kalman滤波器包相比,linkalman具有以下几个优点:

  • 说明部分和完全不完整的测量
  • 灵活方便的模型结构
  • 稳健高效的实施
  • 未知优先级的正确实现
  • 内置数值和EM算法
  • 开放源码和全面的用户手册
  • 模块化设计,模型规格直观

安装

linkalman需要运行以下包:

  • numpy公司
  • 熊猫
  • 网络X
  • 神经质的

要安装linkalman,只需使用标准的pip命令:

$ pip install linkalman

示例

这里我将提供一个使用linkalman的简单示例。更多示例请参见here,技术细节请参见user's manual。在

^{pr2}$

首先定义了贝叶斯结构时间序列(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_fmy_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

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
添加组件后,java JTable为空   java将json发送到php并插入mysql,但返回null   java Spring引导JNDI CommonJ资源   从不同PC创建和合并后的Java servlet问题   java如何在使用findelements时从xpath获取文本   java使用spring boot使用gmail smtp发送电子邮件   java在不使用pojo、bean或getter和setter的情况下获取Json标题的Json数组   Java中的OpenFile对话框将null作为响应   JavaBuilder模式。扩展接口   java中无需替换的数据结构选取   java如何评价Encog中的预测神经网络   java如何在安卓中使用实际的HttpURLConnection进行单元测试?   java使用XML配置禁用WebSocket中的CSRF保护   java如何通过hibernate从多表查询中获取数据?   mysql如何在java中获取更新的行Id   java AEM/CQ组件单一组件/有限组件   java FFmpeg Javacv延迟问题   显示整数数组的java不起作用