【本期看点】

由于LaTeX优质的文档排版功能,越来越多的期刊开始提供LaTeX模板,那么我们是否只能用LaTeX进行文档的编辑和排版呢?当然不是,LaTeX由于其强大的数学公式编辑能力以及兼容性极好的绘图软件包,具有word所无法企及的科技绘图功能。 本文以贝叶斯网络图的逐步实现为例,对LaTeX的科技绘图功能进行一个初步的探讨,以期为LaTeX初学者提供一点小小的帮助。  

作者:kim

城市交通数据分析爱好者 目前从事城市综合交通规划类工作

贝叶斯网络简介

贝叶斯网络又称信度网络、有向无环图,是一种概率图模型,是目前不确定知识表达和推理领域最有效的理论模型之一。贝叶斯网络由代表变量结点及连接这些结点有向边构成,结点代表随机变量,结点间的有向边代表了结点间的互相关系,用条件概率进行表达关系强度,适用于表达和分析不确定性和概率性的事件,应用于有条件地依赖多种控制因素的决策,可以从不完全、不精确或不确定的知识或信息中做出推理。

贝叶斯网络图实现步骤

本次贝叶斯网络图的绘制在LaTeX在线编辑系统overleaf.com中实现。首先在overleaf中创建名为Bayesian-network的项目。

文档编辑及绘图环境搭建

在使用LaTeX编辑文档或绘图时,需要几行代码来搭建编辑、绘制环境:

Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_代码示例


在overleaf项目中键入以上代码后,我们可以得到一个空白文档。

绘制观测变量节点

在搭建好环境后,我们就可以开始进行贝叶斯网络的绘制了,首先绘制观测变量节点,我们在环境声明的开始和结束之间采用\node命令绘制名为obs的观测变量节点,代码示例如下:

Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_latex 矩阵_02


在overleaf项目中键入以上代码后,得到以下图形:

Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_Python 怎么绘制贝叶斯网络_03

绘制模型参数节点

同样的,我们采用\node命令,改变一些图形参数来绘制参数节点,代码示例如下:

Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_代码示例_04


在overleaf项目中键入以上代码后,得到以下图形:

Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_结点_05

绘制有向边

在观测节点和参数节点都绘制完成之后,我们采用\path命令来构造有向边,节点间用edge关联,箭头方向为→,代码示例如下:

Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_latex 矩阵_06


在overleaf项目中键入以上代码后,得到以下图形:

Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_结点_07

绘制超参数节点

超参数同样可以用\node命令进行绘制,代码示例如下:

Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_Python 怎么绘制贝叶斯网络_08

绘制超参数节点

超参数同样可以用\node命令进行绘制,代码示例如下:

Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_latex 矩阵_09

完整贝叶斯网络绘制


Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_latex 矩阵_10


在了解了以上的绘图步骤后,我们根据xinychen的开源项目,绘制一个完整的贝叶斯网络,完整代码及示意图如下:

Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_贝叶斯网络_11


代码示例(注:图片取自xinychen的GitHub项目)

Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_贝叶斯网络_12


贝叶斯时序矩阵分解的贝叶斯模型示意图(注:图片取自xinychen的GitHub项目) 使用LaTex绘制贝叶斯网络的论文

[1] Xinyu Chen, Zhaocheng He, Yixian Chen, Yuhuan Lu, Jiawei Wang (2019). Missing traffic data imputation and pattern discovery with a Bayesian augmented tensor factorization model. Transportation Research Part C: Emerging Technologies, 104: 66-77.

[2] Xinyu Chen, Lijun Sun (2019). Bayesian temporal factorization for multidimensional time series prediction. arXiv: 1910.06366.

本文代码参考xinychen的GitHub开源项目awesome-latex-drawing,网址为:

https://github.com/xinychen/awesome-latex-drawing。


Python 怎么绘制贝叶斯网络 贝叶斯网络图怎么画_贝叶斯网络_13