问题描述
我正在使用 RcppHMM 包制作具有连续观察的 GHMM(多元高斯混合 HMM 模型)。
我想学习使用不同序列长度的连续观察的 EM 算法。 具体来说,每个观察值都有不同的序列长度,从 3 到 6。 我试图一次使用整个观察数据集来拟合模型(我用 ncol=6(最大序列长度)制作了数据集,并用全零填充了空部分),但它没有用 所以我将观察结果分成相同长度的组 [O3,O4,O5,O6] 并按每组更新模型。
每个观察组长这样
O3
[,1] [,2] [,3]
[1,] 0.8550940 0.3231340 0.8639223
[2,] 0.4453262 0.5840305 0.4356958
[3,] 0.4344789 -1.2234760 0.4344789
[4,] -0.5003085 3.0322560 -0.5003085
[5,] -0.1459598 -0.4661041 -0.1459598
[6,] -0.1977263 -0.6352724 -0.1977263
O4
[,3] [,4]
[1,] 0.8965332 0.3338220 0.7270241 0.8824540
[2,] 0.4033438 0.4131293 0.1593136 0.4187023
[3,] -0.7329015 -1.6828296 -0.1550487 -0.1550487
[4,] -0.3213490 7.3449076 -0.2787857 -0.2787857
[5,] -0.2868067 -0.3743332 -0.1340566 -0.1340566
[6,] 2.6832742 -0.5844305 0.2320774 0.2320774
O5
[,2] [,4] [,5]
[1,] 0.83401341 0.2492370 0.47493190 0.6440035 0.84985396
[2,] 0.37988234 0.2335883 0.17043570 0.2116066 0.36260248
[3,] -0.05240445 -0.3034002 -0.05240445 -0.3034002 -0.05240445
[4,] -0.37240867 1.1500528 -0.37240867 1.1500528 -0.37240867
[5,] -0.02056839 0.9343497 -0.02056839 0.9343497 -0.02056839
[6,] -0.27586584 -0.4406833 -0.27586584 -0.4406833 -0.27586584
O6
[,1] [,4] [,5] [,6]
[1,] 0.9287066 0.35065802 0.4493442 0.6142040 0.7423286 0.9217381
[2,] 0.3852644 0.09612516 0.1623447 0.1320334 0.1875127 0.3928661
[3,] 0.1436024 -0.08326038 0.7800491 0.1436024 0.1926751 0.1436024
[4,] -0.4284304 -0.27916609 -0.5224586 -0.4284304 0.1267840 -0.4284304
[5,] -0.8846364 -0.81131525 -0.1781479 -0.8846364 -0.1266250 -0.8846364
[6,] -0.2141231 -0.78377461 -0.4440142 -0.2141231 -0.7888260 -0.2141231
nrow 是观察的维数,ncol 是序列的长度。
当我用序列长度为 3 的第一组更新模型时,它运行了。 但是当我尝试使用序列长度为 4 的第二组重新更新模型时,警告消息如下所示,
在learnEM(newModel,O4[,1:4,],iter = 20,delta = 1e-05,print = TRUE) 中: 建议使用行列式大于 1/ ((2*PI)^k) 的协方差矩阵。
有谁知道如何解决这个警告信息? 有没有什么合适的方法可以使用这个包来学习具有不同序列长度的观察的 EM 算法?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)