3. 概率图模型入门:贝叶斯网络与马尔可夫网络、条件独立性与图结构、概率图模型的表示
好,咱们今天聊聊概率图模型。说实话,这东西刚接触时容易懵——又是图又是概率的,到底想干嘛?
我个人的理解是:概率图模型就是给概率分布画了一张“关系图”。你想想看,一个高维的联合分布,动辄几十上百个变量,直接建模根本不可能。但如果我们能把这些变量之间的依赖关系画出来,事情就简单多了。
3.1 为什么需要概率图模型?
先问个问题:假设你有10个二值变量,完整的联合分布需要多少个参数?
答案是2^10 - 1 = 1023个。这还只是10个变量。真实业务场景里,变量成百上千很正常。直接建模?不现实。
概率图模型的核心思想就是:利用条件独立性,把高维联合分布拆解成多个低维分布的乘积。说白了,就是“分而治之”。
核心公式(有向图):
P(X₁, X₂, ..., Xₙ) = ∏ P(Xᵢ | Parents(Xᵢ))
每个节点只依赖它的父节点,而不是所有其他节点。这就是降维的关键。
我在项目中遇到过这样一个场景:用户行为预测模型,涉及年龄、性别、浏览历史、购买记录、点击率等20多个变量。如果用全连接模型,参数多到没法训练。后来改用贝叶斯网络,把变量间的因果关系梳理清楚,参数直接降了两个数量级。
3.2 贝叶斯网络 vs 马尔可夫网络
这两种网络,说白了就是“有向”和“无向”的区别。但背后的哲学完全不同。
3.2.1 贝叶斯网络(有向图)
贝叶斯网络用有向边表示因果关系。箭头从原因指向结果。
举个例子:
天气 → 是否带伞 → 是否淋湿
↓
心情好坏
这个图告诉我们:
- 天气影响带伞决策
- 带伞影响淋湿概率
- 淋湿影响心情
每个节点都有一个条件概率表(CPT),描述它在父节点不同取值下的概率分布。
我的经验:贝叶斯网络适合做因果推断。如果你能画出变量间的因果方向,用贝叶斯网络准没错。我曾经在电商推荐系统里用贝叶斯网络建模“用户点击→购买”的因果链,效果比纯统计模型好很多。
3.2.2 马尔可夫网络(无向图)
马尔可夫网络用无向边表示变量间的“相关性”或“约束关系”。没有方向,只有关联。
举个例子:图像去噪任务中,每个像素点与相邻像素点之间有约束——相邻像素的颜色应该相近。这就是一个典型的马尔可夫网络。
像素1 — 像素2 — 像素3
| | |
像素4 — 像素5 — 像素6
马尔可夫网络的联合分布用“势函数”的乘积表示:
P(X) = (1/Z) * ∏ ψⱼ(Dⱼ)
其中ψⱼ是势函数,Dⱼ是团(clique),Z是归一化常数。
避坑指南:我曾经在自然语言处理任务里,把马尔可夫网络当贝叶斯网络用,结果模型训练不收敛。后来才意识到:马尔可夫网络没有方向,它的“条件独立性”是基于图分割的,跟贝叶斯网络的d-分离完全不同。千万别搞混。
3.3 条件独立性与图结构
这是概率图模型最核心的部分。图结构直接决定了哪些变量是条件独立的。
3.3.1 贝叶斯网络中的d-分离
d-分离(d-separation)是判断条件独立性的规则。说白了就是:给定某些节点,看两个节点之间是否还有“信息流”可以传递。
三种基本结构:
| 结构 | 图示 | 条件独立性 |
|---|---|---|
| 链式 | A → B → C | 给定B,A和C独立 |
| 分叉 | A ← B → C | 给定B,A和C独立 |
| 对撞 | A → B ← C | 给定B,A和C不独立 |
嗯,这里要注意:对撞结构是反直觉的。两个独立的原因,一旦知道了结果,它们反而变得相关了。这就是著名的“解释消除”现象。
举个例子:假设“下雨”和“洒水车”都可能导致“地面湿”。如果不知道地面是否湿,下雨和洒水车是独立的。但一旦知道地面湿了,下雨和洒水车就变得相关——如果没下雨,那一定是洒水车干的。
3.3.2 马尔可夫网络中的条件独立性
马尔可夫网络的条件独立性更直观:给定一个节点集合S,如果两个节点之间的所有路径都被S中的节点“阻断”,那么这两个节点在给定S下条件独立。
这叫做“全局马尔可夫性”。
还有一个重要的概念:马尔可夫毯(Markov Blanket)。一个节点的马尔可夫毯包括它的父节点、子节点、以及子节点的其他父节点。给定马尔可夫毯,该节点与图中所有其他节点条件独立。
我建议:在实际建模时,先画出变量的马尔可夫毯,可以帮你快速判断哪些变量是冗余的。我在做特征选择时经常用这个技巧,能省不少时间。
3.4 概率图模型的表示
说了这么多理论,咱们看看实际怎么表示一个概率图模型。
3.4.1 图结构表示
图结构就是节点和边的集合。节点表示随机变量,边表示依赖关系。
# 一个简单的贝叶斯网络结构
节点: {天气, 带伞, 淋湿, 心情}
边:
天气 → 带伞
天气 → 淋湿
带伞 → 淋湿
淋湿 → 心情
3.4.2 参数表示
参数就是每个节点的条件概率表(CPT)或势函数。
# 天气的CPT(无父节点)
P(天气=晴) = 0.7
P(天气=雨) = 0.3
# 带伞的CPT(父节点:天气)
P(带伞=是 | 天气=晴) = 0.1
P(带伞=是 | 天气=雨) = 0.9
# 淋湿的CPT(父节点:天气, 带伞)
P(淋湿=是 | 天气=雨, 带伞=否) = 0.95
P(淋湿=是 | 天气=雨, 带伞=是) = 0.1
P(淋湿=是 | 天气=晴, 带伞=否) = 0.05
P(淋湿=是 | 天气=晴, 带伞=是) = 0.01
3.4.3 知识体系结构图
下面我用一张SVG图来展示本章的知识体系:
3.5 实际建模中的选择建议
说了这么多,到底什么时候用贝叶斯网络,什么时候用马尔可夫网络?
我个人的经验是:
- 有明确的因果关系 → 用贝叶斯网络。比如“广告曝光→用户点击→购买转化”,方向很清楚。
- 只有相关性或约束关系 → 用马尔可夫网络。比如图像像素之间的平滑约束、社交网络中朋友关系的相互影响。
- 需要做因果推断 → 首选贝叶斯网络。马尔可夫网络没有方向,做不了因果。
- 变量之间是双向影响 → 马尔可夫网络更合适。比如两个朋友互相影响对方的购买决策。
我曾经踩过的坑:有一次做用户流失预测,我一开始用了贝叶斯网络,但发现“用户满意度”和“使用时长”之间其实是互相影响的——满意度高导致使用时长增加,使用时长增加又反过来提升满意度。这种双向关系用有向图很难建模,后来换成马尔可夫网络才解决问题。
3.6 小结
概率图模型的核心就三件事:
- 图结构:用节点和边表示变量间的依赖关系
- 条件独立性:图结构决定了哪些变量在给定条件下独立
- 参数表示:用CPT或势函数量化依赖关系的强度
贝叶斯网络适合因果方向明确的场景,马尔可夫网络适合无向约束的场景。选对模型,事半功倍。
好了,这一章就到这里。记住:图结构就是你的假设,参数就是你的数据。两者结合,才能构建出靠谱的概率图模型。
公众号:蓝海资料掘金营,微信deep3321