【发布时间】:2012-09-20 11:16:30
【问题描述】:
我正在尝试找到一种方法来优化 R 中隐藏马尔可夫模型 (HMM) 中的状态数。 R 中的 HMM 上有许多 R 包,但我无法估计隐藏状态的最佳数量。 感谢您的帮助。
【问题讨论】:
标签: r
我正在尝试找到一种方法来优化 R 中隐藏马尔可夫模型 (HMM) 中的状态数。 R 中的 HMM 上有许多 R 包,但我无法估计隐藏状态的最佳数量。 感谢您的帮助。
【问题讨论】:
标签: r
要调整隐藏状态的数量,您需要一个可能的隐藏状态数量的向量 nhs 和一个性能度量 perf()(某种可以评估模型好坏的误差度量)。然后为每个隐藏状态数量构建一个模型,并选择一个给您最佳性能的模型。
这是一个伪代码示例,说明如何做到这一点。
nhs <- c(1, 2, 3, 5, 8, 11, 15)
error <- rep(NA, length(nhs))
for(i in 1:length(nhs)){
fit <- train.HMM(data, nhs[i])
error[i] <- perf(fit)
}
nhs[which.min(error)] # Optimal number of hidden states
我猜你的表现衡量标准是模型在预测新的看不见的例子的结果方面有多好。我建议你为每个隐藏状态数做cross validation。这些方面的内容:
...
for(i in 1:length(nhs)){
pred <- vector("list", k)
for(fold in 1:k){
fit <- train.HMM(data[not.in.fold.k], nhs[i])
pred[[fold]] <- predict(fit, data[in.fold.k])
}
error[i] <- perf(pred)
}
...
我没有提供更详细代码的原因是为了不使示例混乱(并且因为您没有提供可重现的示例来工作)。
【讨论】:
通过确定循环状态的循环分析图可能是一种用于大致确定初始隐藏状态数量的信息方法。
【讨论】: