predict函数 R_R语言 动态贝叶斯网工具箱 dbnR学习笔记

dbnR是R语言中动态贝叶斯网(DBN)的工具箱,与2020年3月底发行,是很新的工具箱了。这个工具箱和bnlearn是一脉相承的,其中很多函数需要用到bnlearn里面的函数。因此在安装dbnR之前需要安装bnlearn工具箱

关于dbnR的详细信息可见:

dkesada/dbnR​github.com
63126a4396cbfba5d18fa56a7572016d.png

以下是具体函数的解释

  1. acc_successions 与 node_levels

node_levels用来获得每个节点的level,level是这样定义的:根节点的level是0,其它节点的level是它父节点中level的最大值加一。

acc_successions返回一个每个level中节点的数量的向量

2. add_attr_to_fit 把均值和协方差矩阵作为属性添加到bn.fit的结果(训练好参数的网络)中,目的是为了之后能精确地进行MVN推理

3. approximate_inference 给定训练好结构和参数的网络,以及数据集和网络大小(貌似是时间片的数量),和推断起始的变量,进行近似推理

4. approx_prediction_step 给定一个已经训练好结构和参数的网络,以及一些证据变量,在单个时间片内进行近似推理

5. calc_mu 计算线性高斯网络中节点的均值,返回的是一个向量,前提是网络已经用bnlearn中的函数bn.fit拟合出网络参数

6. calc_sigma 计算线性高斯网络的协方差矩阵

7. check_time0_formatted 检查变量名是不是在t0时刻的名称都格式化了,以 _t_0结尾就行

8. create_blacklist 创建黑名单,使得后续用dmmhc学习网络DBN结构时这些节点间不会出现弧,可以是片内弧,也可以是片间弧

9. dynamic_ordering 得到时间片内节点间的拓扑排序(当然每个时间片都一样......)

10. exact_inference 和 approximate_inference 用法相似,这个是精确推理

11. exact_prediction_step 和 approx_prediction_step 用法相似,这个是精确推理

12. expand_time_nodes 将节点名称扩展到给定的最大值,并获得每个时间片中节点的顺序

13.fit_dbn_params 给定DBN的结构,拟合任意n阶动态贝叶斯网的参数,阶数及参数拟合方法可以自定

14. fold_dt 扩展数据集,导入数据后用这个函数,并规定阶数,之后再学习网络结构的时候,就会用扩展后的数据集学习,考虑到前几个时间片上的数据

15. fold_dt_rec 和 fold_dt做的事是一样的,只不过这个是递归版本的

16. forecast_ts 和 approximate_inference,exact_inference 类似,也是推断变量的值用的,可以选择近似推断或精确推理、

17. learn_dbn_struc 从数据集中学习DBN的结构,可以任意阶网络,用的方法是rsmax2,参考bnlearn的rsmax2函数的参数

18. merge_nets 给定静态网络(片内网络结构),和状态转移网络,把它们融合成DBN

19. motor 标准数据集,是关于电机温度的多变量时间序列数据集,3000行12列

20. mvn_inference 给定证据变量后用多元正态分布进行推理,将线性高斯网络转化为它的多元正态分布的形式

21. plot_dynamic_network 以分层的形式画出DBN的网络结构

22. predict_bn 对高斯贝叶斯网进行推理,常用于MAP问题

23. predict_dt 对测试数据集执行推断,绘制结果并给出结果准确性的度量

24. time_rename 对数据集的每一列重命名,让它们以_t_0结尾,这样后面用fold_dt时就很方便


再放一个例子吧,快速入门挺好的,当然那个Github的链接里也有

library(dbnR) #导入dbnR包
data(motor) #dbnR里面自带的数据集
size <- 3 #时间片为3,也就是马尔可夫阶数为2
dt_train <- motor[200:2500] #训练集
dt_val <- motor[2501:3000] #测试集
net <- learn_dbn_struc(dt_train, size) #DBN结构学习
plot_dynamic_network(net) #画出网络结构(需要visNetwork和graphics包)
f_dt_train <- fold_dt(dt_train, size) #把数据折叠一下,为参数学习做准备;原数据是#2301行,12列,折叠后为2299行,36列(三个叠在一起嘛),要注意的是,时间线上最#后的数据在折叠后是放在最前面的
fit <- fit_dbn_params(net, f_dt_train, method = "mle") #按极大似然拟合参数

68048286d6e6984700f77fa76ab0df31.png

就学习好网络了

如果想要用学习好的网络做预测

test_fold=fold_dt(dt_val,size = 3) #准备好测试数据
res=predict_dt(fit,test_fold,obj_nodes = c("u_q_t_0","u_q_t_1","u_q_t_2"))
#对u_q进行预测,要假设"u_q_t_0","u_q_t_1","u_q_t_2"都是待预测的变量,因为它们本质是一个量,只是时间平移了一下,如果只假设一个未知,实际上还是知道u_q的值的

画出预测结果

dadb113ad8acd9e8da566bc412e0b489.png

看起来还不错 :)

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值