关于HMM的训练困惑
|
searover
2007-12-01
以下数据使用java的开源项目 jahmm 测试得出,版本 0.6.1
程序执行步骤: 1.先构建一个HMM 2.根据这个HMM生成10000个随机观察序列 3.根据生成的观察序列用k-Means算法得到一个初始模型 4.使用Baum-Welch算法对生成的观察序列以及这个初始模型进行训练得到学习后的模型 5.然后用了一个观察序列{3 1 2 1 3 0}来检测原始模型和训练后的模型得到的结果是否一样。 训练序列数:10000 观察序列:3 1 2 1 3 0 原始HMM(该模型为手动构建,用于生成10000个随机观察序列,也就是说,是正确的HMM): 队列概率: 1.143374199295044E-4 状态序列:2 1 2 1 2 1 HMM with 3 state(s) State 0 Pi: 0.63 Aij: 0.5 0.25 0.25 Opdf: Integer distribution --- 0.6 0.2 0.15 0.05 State 1 Pi: 0.17 Aij: 0.375 0.125 0.375 Opdf: Integer distribution --- 0.25 0.25 0.25 0.25 State 2 Pi: 0.2 Aij: 0.125 0.675 0.375 Opdf: Integer distribution --- 0.05 0.1 0.35 0.5 学习后的HMM: 队列概率: 9.816993989119631E-5 状态队列:2 0 1 0 2 0 HMM with 3 state(s) State 0 Pi: 0.620299999999948 Aij: 0.51 0.242 0.249 Opdf: Integer distribution --- 0.622 0.378 0 0 State 1 Pi: 0.20129999999999415 Aij: 0.477 0.252 0.271 Opdf: Integer distribution --- 0 0 1 0 State 2 Pi: 0.17839999999999667 Aij: 0.465 0.256 0.279 Opdf: Integer distribution --- 0 0 0 1 结果发现,两个模型出入很大。所以得到的结果{2 1 2 1 2 1 }-- 正确的 和 {2 0 1 0 2 0 } -- 错误的 也差距不 小。 想请教有这方面经验的朋友,是训练的样本太少还是本来就是这样的结果,或者说我什么地方做错了? |

