Skip to content

评估与诊断

本章目标

  1. 理解当前 HMM 流水线的评估输出——隐状态准确率和学习到的转移矩阵打印。
  2. 理解 HMM 评估的独特之处——比较的是"状态序列"而非"类别标签"。
  3. 明确当前流水线已实现未实现的评估项——以及 HMM 评估与分类/聚类评估的根本差异。

重点方法与概念速览

名称类型作用
隐状态准确率定量指标np.mean(states_pred == y_true)——Viterbi 路径与真实状态的逐步一致性
转移矩阵打印诊断输出model.transmat_——对比学习到的转移矩阵与真实转移矩阵
对数似然历史诊断信息model.monitor_——逐次迭代的对数似然,用于判断收敛和局部最优
Forward 得分概率评估model.score(X, lengths)——观测序列在当前参数下的对数概率

1. 隐状态准确率

训练完成后,终端直接打印隐状态预测准确率:

python
states_pred = model.predict(X_obs, lengths)
accuracy = np.mean(states_pred == y_true)
print(f"隐状态预测准确率: {accuracy:.4f}")

参数速览

参数名类型说明示例取值
states_predndarray,形状 (300,)Viterbi 解码的隐状态路径model.predict(X_obs, lengths)
y_truendarray,形状 (300,)真实隐状态——生成数据时记录的地面真值data["state_true"].values
accuracyfloat[0,1]逐步匹配比例——越高表示 HMM 恢复隐状态越成功0.85

示例输出

text
隐状态预测准确率: 0.8933
转移矩阵:
[[0.78  0.18  0.04 ]
 [0.22  0.58  0.20 ]
 [0.12  0.22  0.66 ]]

理解重点

  • 隐状态准确率与分类准确率有本质区别——这里比较的是时序路径,每一步的准确性受前后文影响。
  • 标签编号不能互换——与 GMM 的聚类标签不同,HMM 的隐状态编号在训练中由 Baum-Welch 的初始化决定,可能与 state_true 的编号不一致。
  • 如果准确率很低但转移矩阵与真实接近——可能存在标签排列(permutation mismatch),即状态 0 被映射为状态 1 等。

2. 转移矩阵诊断

终端打印学习到的转移矩阵,可直接与真实转移矩阵对比:

真实 A学习到的 A
[[0.80, 0.15, 0.05][[0.78, 0.18, 0.04]
[0.20, 0.60, 0.20][0.22, 0.58, 0.20]
[0.10, 0.20, 0.70]][0.12, 0.22, 0.66]]

理解重点

  • 对角线元素的接近程度反映了状态稳定性的恢复精度。
  • 非对角线元素的匹配说明 HMM 成功学会了状态间的迁移偏好。
  • 如果学习到的矩阵与真实差很多——可能数据不够长、K 设定错误、或 Baum-Welch 陷入局部最优。

3. 对数似然历史

model.monitor_ 存储了逐次迭代的对数似然值:

python
print(model.monitor_.converged)  # 是否收敛
print(model.monitor_.history)    # 迭代历史

理解重点

  • 对数似然单调递增——与 GMM 的 EM 一致,如果出现拐点说明 baum-welch 的实现有问题。
  • 如果对数似然增长很慢或停滞——可能已经收敛到局部最优。
  • 比较多次训练的对数似然——可以判断初始化敏感性和收敛质量。

4. 已实现 vs 未实现的评估

参数速览

评估项状态原因
隐状态准确率已实现HMM 评估的核心指标
转移矩阵打印已实现对比学习到的参数与生成参数
发射矩阵对比未实现当前仅打印转移矩阵——发射矩阵也可以通过 model.emissionprob_ 访问
可视化(隐状态轨迹图)未实现可绘制 time-vs-state 对比图——但教学场景下终端文本已足够
混淆矩阵不适用状态标签可能排列不匹配——混淆矩阵在此场景下意义有限
BIC/AIC未实现HMM 模型选择指标——当前 K=3 为已知先验
交叉验证对数似然未实现单条长序列无法做 K-Fold——但多序列场景下可用留一序列验证

理解重点

  • HMM 的评估与标准分类/聚类完全不同——评估的是"序列推断准确率"而非"标签分类准确率"。
  • 无可视化是有意设计——300 步的离散状态序列用终端文本展示更清晰。

5. HMM vs GMM vs 集成模型 评估对比

评估维度Bagging/GBDTKMeansGMM (EM)HMM
任务类型分类聚类聚类序列状态推断
可视化混淆矩阵 + ROC聚类图双面板聚类图无图(终端文本)
定量指标accuracy/precision/recallinertia_lower_bound_隐状态准确率 + 对数似然
参数对比weights_/means_/covariances_transmat_ 打印
标签语义有(不可互换)无(不可互换)无(不可互换)部分可互换
数据特性i.i.d.i.i.d.i.i.d.时序依赖

常见坑

  1. 直接对比 states_predy_true 的标签编号——可能因排列不匹配而得到虚假的低准确率。
  2. 忽略转移矩阵的非对角线模式——非对角值代表状态间的迁移偏好,是 HMM 动态特征的核心体现。
  3. 只看准确率不看转移矩阵——高准确率 + 差的转移矩阵表明可能只是逐点 argmax 的效果。
  4. 把 HMM 的准确率与分类准确率直接比较——两者的评估对象和意义完全不同。

小结

  • HMM 当前有两项评估输出:隐状态准确率(定量,Viterbi 路径 vs 真实路径)和转移矩阵(诊断,学习到的 vs 真实的马尔可夫动态)。
  • HMM 评估的核心价值在于"时序一致性"——不仅看单点准确,还要看状态间的迁移模式是否正确恢复。
  • 与所有其他模型的评估差异源于序列数据的特性——评估的是"路径推断"而非"标签分类"或"聚类质量"。