1. 概率图模型基础与核心概念
1.1 概率图模型的意义与分类
概率图模型(Probabilistic Graphical Model, PGM)通过图结构表达随机变量间的依赖关系,将复杂的概率分布分解为局部结构的组合。其两大分支为:
- 有向图模型(贝叶斯网络):用有向边表示因果关系,如学生智力→SAT成绩。
- 无向图模型(马尔可夫网络):用无向边表示相关性,常用于图像分割等场景。
图模型的核心优势在于:
- 显式表达变量间的条件独立性
- 降低高维联合概率计算复杂度
- 支持因果推理与概率推断
1.2 贝叶斯定理与条件独立性
贝叶斯定理是概率推理的基石:
P(Y∣X)=P(X∣Y)P(Y)P(X)
P(Y|X) = \frac{P(X|Y)P(Y)}{P(X)}
P(Y∣X)=P(X)P(X∣Y)P(Y)
条件独立性判定规则(以变量A、B、C为例):
- 链式结构(A→B→C):若B已知,则A与C独立,即P(A,C∣B)=P(A∣B)P(C∣B)P(A,C|B)=P(A|B)P(C|B)P(A,C∣B)=P(A∣B)P(C∣B)
- 分叉结构(A←B→C):若B已知,则A与C独立
- V型结构(A→B←C):若B未知,则A与C独立;若B已知,则A与C相关
2. 贝叶斯网络建模与推理
2.1 网络结构与参数学习
以医疗诊断系统为例,构建包含症状(发烧、咳嗽)、疾病(流感、肺炎)、检查结果(X光片)的贝叶斯网络:
联合概率分解为:
P(F,C,I,P,X)=P(I)P(P)P(F∣I,P)P(C∣I,P)P(X∣P)
P(F,C,I,P,X) = P(I)P(P)P(F|I,P)P(C|I,P)P(X|P)
P(F,C,I,P,X)=P(I)P(P)P(F∣I,P)P(C∣I,P)P(X∣P)
参数学习方法:
- 最大似然估计(MLE):直接统计样本频率
- 贝叶斯估计:引入先验分布(如Dirichlet分布)
2.2 精确推理算法
变量消去法(Variable Elimination)通过逐步消除变量计算边际概率。以计算P(X∣F=1)P(X|F=1)P(X∣F=1)为例:
- 构建因子乘积:f1(I,P,F=1)f2(I,P,C)f3(P,X)f_1(I,P,F=1)f_2(I,P,C)f_3(P,X)f1(I,P,F=1)f2(I,P,C)f3(P,X)
- 消去变量I:∑If1(I,P,1)\sum_I f_1(I,P,1)∑If1(I,P,1)
- 消去变量C:∑Cf2(I,P,C)\sum_C f_2(I,P,C)∑Cf2(I,P,C)
- 归一化得到结果
信念传播(Belief Propagation)通过消息传递机制在树状结构网络中高效计算边际概率,复杂度从指数级降低为线性。
3. 隐马尔可夫模型(HMM)原理与算法
3.1 模型定义与三大问题
HMM五元组λ=(S,V,A,B,π)\lambda=(S,V,A,B,\pi)λ=(S,V,A,B,π)定义:
- 状态集合S={s1,...,sN}S=\{s_1,...,s_N\}S={s1,...,sN}
- 观测集合V={v1,...,vM}V=\{v_1,...,v_M\}V={v1,...,vM}
- 状态转移矩阵AN×NA_{N×N}AN×N
- 观测概率矩阵BN×MB_{N×M}BN×M
- 初始状态分布πN×1\pi_{N×1}πN×1
三大核心问题:
- 评估问题:计算观测序列概率P(O∣λ)P(O|\lambda)P(O∣λ)(前向-后向算法)
- 解码问题:寻找最优状态序列Q∗=argmaxQP(Q∣O,λ)Q^*=\arg\max_Q P(Q|O,\lambda)Q∗=argmaxQP(Q∣O,λ)(维特比算法)
- 学习问题:估计模型参数λ∗=argmaxλP(O∣λ)\lambda^*=\arg\max_\lambda P(O|\lambda)λ∗=argmaxλP(O∣λ)(Baum-Welch算法)
3.2 前向-后向算法数学推导
前向概率αt(i)=P(o1,...,ot,qt=i∣λ)\alpha_t(i)=P(o_1,...,o_t,q_t=i|\lambda)αt(i)=P(o1,...,ot,qt=i∣λ):
- 初始化:α1(i)=πibi(o1)\alpha_1(i)=\pi_ib_i(o_1)α1(i)=πibi(o1)
- 递推:αt+1(j)=[∑i=1Nαt(i)aij]bj(ot+1)\alpha_{t+1}(j)=[\sum_{i=1}^N \alpha_t(i)a_{ij}]b_j(o_{t+1})αt+1(j)=[∑i=1Nαt(i)aij]bj(ot+1)
- 终止:P(O∣λ)=∑i=1NαT(i)P(O|\lambda)=\sum_{i=1}^N \alpha_T(i)P(O∣λ)=∑i=1NαT(i)
后向概率βt(i)=P(ot+1,...,oT∣qt=i,λ)\beta_t(i)=P(o_{t+1},...,o_T|q_t=i,\lambda)βt(i)=P(ot+1,...,oT∣qt=i,λ):
- 初始化:βT(i)=1\beta_T(i)=1βT(i)=1
- 递推:βt(i)=∑j=1Naijbj(ot+1)βt+1(j)\beta_t(i)=\sum_{j=1}^N a_{ij}b_j(o_{t+1})\beta_{t+1}(j)βt(i)=∑j=1Naijbj(ot+1)βt+1(j)
状态概率计算:
γt(i)=αt(i)βt(i)P(O∣λ)
\gamma_t(i)=\frac{\alpha_t(i)\beta_t(i)}{P(O|\lambda)}
γt(i)=P(O∣λ)αt(i)βt(i)
3.3 维特比算法与Baum-Welch算法
维特比算法动态规划求解最优路径:
def viterbi(obs_seq):
T, N = len(obs_seq), len(states)
delta = np.zeros((T,N))
psi = np.zeros((T,N), dtype=int)
delta[0] = pi * B[:,obs_seq[0]]
for t in range(1,T):
for j in range(N):
delta[t,j] = np.max(delta[t-1] * A[:,j]) * B[j,obs_seq[t]]
psi[t,j] = np.argmax(delta[t-1] * A[:,j])
# 回溯路径
path = np.zeros(T, dtype=int)
path[-1] = np.argmax(delta[-1])
for t in reversed(range(T-1)):
path[t] = psi[t+1, path[t+1]]
return path
Baum-Welch算法(EM实现):
- E步:计算ξt(i,j)=P(qt=i,qt+1=j∣O,λ)\xi_t(i,j)=P(q_t=i,q_{t+1}=j|O,\lambda)ξt(i,j)=P(qt=i,qt+1=j∣O,λ)
- M步:更新参数:
a^ij=∑t=1T−1ξt(i,j)∑t=1T−1γt(i) \hat{a}_{ij}=\frac{\sum_{t=1}^{T-1}\xi_t(i,j)}{\sum_{t=1}^{T-1}\gamma_t(i)} a^ij=∑t=1T−1γt(i)∑t=1T−1ξt(i,j)
b^j(k)=∑t=1Tγt(j)I(ot=k)∑t=1Tγt(j) \hat{b}_j(k)=\frac{\sum_{t=1}^T \gamma_t(j)I(o_t=k)}{\sum_{t=1}^T \gamma_t(j)} b^j(k)=∑t=1Tγt(j)∑t=1Tγt(j)I(ot=k)
4. 生成式模型与判别式模型对比
4.1 理论差异分析
特性 | 生成式模型(HMM, 贝叶斯网络) | 判别式模型(CRF, SVM) |
---|---|---|
建模目标 | 联合分布P(X,Y)P(X,Y)P(X,Y) | 条件分布$P(Y |
损失函数 | 对数似然logP(X,Y)\log P(X,Y)logP(X,Y) | 条件似然$\log P(Y |
数据要求 | 需要完整X和Y的联合分布 | 仅需X与Y的条件关系 |
过拟合风险 | 较高(模型假设强) | 较低(直接学习决策边界) |
典型应用 | 数据生成、缺失值填补 | 分类、序列标注 |
数学本质差异:
- 生成式:通过贝叶斯定理计算P(Y∣X)∝P(X∣Y)P(Y)P(Y|X) \propto P(X|Y)P(Y)P(Y∣X)∝P(X∣Y)P(Y)
- 判别式:直接建模P(Y∣X)=fθ(X)P(Y|X)=f_\theta(X)P(Y∣X)=fθ(X)
4.2 实际性能对比
在自然语言处理任务中的表现:
- 命名实体识别:
- HMM准确率约85%(假设观测独立)
- CRF准确率可达92%(考虑上下文特征)
- 语音识别:
- HMM词错误率18%(需与声学模型结合)
- 神经网络-HMM混合系统词错误率降至8%
5. 高级扩展模型与应用
5.1 动态贝叶斯网络(DBN)
处理时序数据的扩展模型,如:
from pgmpy.models import DynamicBayesianNetwork as DBN
dbn = DBN()
dbn.add_edges_from([(('D',0), ('G',0)), (('I',0), ('G',0)),
(('D',0), ('D',1)), (('I',0), ('I',1))])
应用于股票价格预测、机器人定位等场景。
5.2 条件随机场(CRF)
线性链CRF的能量函数:
E(y,x)=∑t=1T[∑k=1Kθkfk(yt,xt)+∑l=1Lϕlgl(yt−1,yt)]
E(y,x)=\sum_{t=1}^T \left[ \sum_{k=1}^K \theta_k f_k(y_t,x_t) + \sum_{l=1}^L \phi_l g_l(y_{t-1},y_t) \right]
E(y,x)=t=1∑T[k=1∑Kθkfk(yt,xt)+l=1∑Lϕlgl(yt−1,yt)]
优势:可处理长程依赖,避免HMM的观测独立性假设缺陷。
6. 代码案例:医疗诊断贝叶斯网络
from pgmpy.models import BayesianNetwork
from pgmpy.factors.discrete import TabularCPD
from pgmpy.inference import VariableElimination
定义网络结构
model = BayesianNetwork([('Flu', 'Fever'), ('Pneumonia', 'Fever'),
('Pneumonia', 'XRay'), ('Flu', 'Cough')])
添加CPD表
cpd_flu = TabularCPD('Flu', 2, [[0.95], [0.05]]) # 5%概率患流感
cpd_pneumonia = TabularCPD('Pneumonia', 2, [[0.99], [0.01]])
cpd_fever = TabularCPD('Fever', 2,
evidence=['Flu', 'Pneumonia'],
evidence_card=[2,2],
values=[[0.95, 0.8, 0.7, 0.1],
[0.05, 0.2, 0.3, 0.9]])
概率推理
infer = VariableElimination(model)
prob = infer.query(variables=['Pneumonia'], evidence={'Fever':1})
print(prob)
7. 应用场景深度剖析
7.1 贝叶斯网络应用
- 金融风控:构建借贷人收入、负债、信用记录的网络,计算违约概率
- 基因分析:通过基因表达数据推断调控网络,识别致病基因
7.2 HMM应用
- 语音识别:将声学特征作为观测,音素作为隐藏状态
- 蛋白质结构预测:氨基酸序列→二级结构预测,准确率超70%