为何使用R语言BNLEARN包运行代码时预测值每次均变化?
预测结果每次变化的原因
你的代码里有两个核心的随机来源,导致每次运行结果不同:
1. 结构学习阶段(hc()函数)的随机性
你使用的hc()是爬山法(Hill-Climbing)结构学习算法,结合参数perturb = 1000,会在算法陷入局部最优时随机扰动当前的贝叶斯网络结构,尝试跳出局部最优寻找更优结构。这种扰动过程是随机的,所以每次运行hc()得到的网络结构(res对象)可能存在差异。后续基于不同结构拟合的bn.fit模型参数也会随之变化,最终导致预测结果不同。
2. 预测阶段(predict()的bayes-lw方法)的随机性
你选用的预测方法method = "bayes-lw"是贝叶斯加权似然抽样,参数n = 5指定了生成的加权样本数量。这个方法依靠随机抽样来估计目标节点的后验分布,抽样过程本身具有随机性——哪怕模型结构和参数完全固定,每次抽取出的样本也会不一样,因此最终的预测值(比如后验均值、抽样结果)会出现波动。
如果想让结果固定,可做以下调整:
- 在代码开头设置固定随机种子:
set.seed(123)(数值可任意指定),确保hc()的扰动过程和bayes-lw的抽样过程都能复现; - 若不需要结构学习的随机性,可通过
start参数指定固定初始结构,或把perturb设为0(但可能让算法陷入局部最优); - 增大
n的取值(比如n=1000),能减少抽样带来的结果波动,让预测值更稳定。
内容的提问来源于stack exchange,提问作者AKC
相关产品推荐
相关产品推荐

