1

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

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

  1. 确保没有缺失/NaN 值
  2. 离散化(仅库支持)
  3. SMOTE/SMOTEtomek 用于数据平衡
  4. 各种训练/测试尺寸组合

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

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

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

4

1 回答 1

1

一些可以提供帮助的提示:

  1. 改变/调整结构学习。
  • 尝试不同的阈值。这样做时from_pandas,您可以尝试不同w-threshold的值(以及beta术语(如果您使用from_pandas_lasso))。

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

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

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

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