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

Python 提高贝叶斯因果网络的预测精度,python,machine-learning,bayesian-networks,causality,Python,Machine Learning,Bayesian Networks,Causality,我想确定热力学过程中意外结果(或变形金刚)的原因。我有相关变量的连续数据,并试图利用“贝叶斯网络(BN)”来确定因果关系。为此,我在Python中使用了一个名为“”的库 我已经按照这个库的教程部分构建了DAG、BN模型,并且在预测之前一切都很好。少数/较少多数类别的预测结果的准确度约为60-70%(SMOTE/SMOTETomek和特定随机状态的准确度为80-90%),而预计稳定的准确度将超过90%。我已经实现了以下数据预处理步骤 确保没有丢失/NaN值 离散化(只有库支持) SMOTE/SMO

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

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

  • 确保没有丢失/NaN值
  • 离散化(只有库支持)
  • SMOTE/SMOTETomek用于数据平衡
  • 各种列车/试验尺寸组合
  • 我正在努力找出优化模型的方法。我在网上找不到任何支持我的材料

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


    任何关于这方面的想法/文献/其他合适的图书馆都会非常有帮助

    一些有帮助的提示:

  • 改变/调整学习结构
    • 尝试不同的阈值。从熊猫中执行
      时,您可以使用不同的
      w阈值
      值(以及
      beta
      术语(如果您使用的是熊猫套索中的

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

    • 将数据居中。从经验上看,如果数据居中,NOTEARS(来自
      背后的算法)的效果最好。所以,减去平均值可能是个好主意

    • 确保因果关系。注释不能保证因果关系。因此,我们需要“专家”来判断输出并进行必要的修改。如果您看到没有因果意义的边,您可以将它们删除或添加为
      禁忌边
      ,然后再次训练您的网络

  • 试验离散化。性能可能对数据的离散化方式非常敏感。尝试各种类型的离散化可以有所帮助。您可以使用:
    • Causalnex中提供的方法(例如,统一)
    • 基于对您的数据有意义的阈值的固定离散化
    • MDLP是一种有监督的数据离散化方法。您可以为每个节点应用MDLP,每个节点都有一个子节点作为“目标”。pypy中有两个主要的MDLP包:和