提高贝叶斯因果网络的预测精度

Posted

技术标签:

【中文标题】提高贝叶斯因果网络的预测精度【英文标题】:Improving prediction accuracy in Bayesian Causal Network 【发布时间】:2020-04-02 09:24:09 【问题描述】:

我想确定热力学过程中出现意外结果(或异常)的原因。我有相关变量的连续数据,并试图利用“贝叶斯网络(BN)”来确定因果关系。为此,我在 Python 中使用了一个名为“Causalnex”的库。

我已经按照这个库的教程部分构建了 DAG、BN 模型,并且在预测步骤之前一切正常。少数/少数类的预测结果具有大约 60-70% 的准确度(在 SMOTE/SMOTETomek 和特定随机状态下为 80-90%),而稳定的准确度有望超过 90%。我已经实现了以下数据预处理步骤。

    确保没有缺失/NaN 值 离散化(只有库支持) SMOTE/SMOTETomek 用于数据平衡 各种训练/测试大小组合

我正在努力找出优化模型的方法。我在 Internet 上找不到任何支持材料。

是否有特别适用于该库/BN 模型的数据预处理技术和数据集要求的指南或“最佳实践”?您能否建议任何故障排除方法来确定低准确性/指标的原因?也许 DAG 中被误解的节点-节点因果关系会导致平庸的准确性?

任何与此相关的想法/文献/其他合适的图书馆都会有很大帮助!

【问题讨论】:

【参考方案1】:

一些有用的提示:

    更改/调整结构学习。

尝试不同的阈值。在执行from_pandas 时,您可以尝试不同的w-threshold 值(以及beta 术语(如果您使用的是from_pandas_lasso))。

这将改变网络的密度。更密集的结构意味着具有更多参数的 BN。如果结构更密集,你有更多的参数,你的模型可能会表现得更好。但是,如果它太密集,您可能没有足够的数据来训练它并且可能会过拟合。

数据居中。根据经验,如果数据居中,NOTEARS(from_pandas 背后的算法)似乎效果最好。因此,减去see this 的平均值可能是个好主意。

确保因果关系。 NOTEARS 不保证因果关系。所以我们需要“专家”来判断输出并进行必要的修改。如果您看到不具有因果意义的边缘,您可以删除它们或将它们添加为 tabu_edges 并再次训练您的网络。

    进行离散化实验。性能可能对您如何离散数据非常敏感。尝试各种类型的离散化会有所帮助。您可以使用:
Causalnex 中可用的方法(例如,统一) 根据对您的数据有意义的阈值进行固定离散化 MDLP 是一种离散化数据的监督方式。您可以为每个节点应用 MDLP,并将其子节点之一作为“目标”。 pypy 中有 2 个主要的 MDLP 包:mdlp 和 mdlp-discretization

【讨论】:

以上是关于提高贝叶斯因果网络的预测精度的主要内容,如果未能解决你的问题,请参考以下文章

贝叶斯网络

有关贝叶斯概率和贝叶斯网络和贝叶斯因果网络的自习笔记

有关贝叶斯概率和贝叶斯网络和贝叶斯因果网络的自习笔记

优化预测基于matlab贝叶斯优化LSTM预测含Matlab源码 1329期

时间序列预测基于matlab贝叶斯优化LSTM时间序列预测(单变量单输出)含Matlab源码 651期

基于R语言的贝叶斯网络模型的实践技术应用