我想将BIC用于HMM模型选择:
BIC = -2*logLike + num_of_params * log(num_of_data)
因此,如何计算HMM模型中的参数数量。考虑一个简单的2状态HMM,其中具有以下数据:
data = [1 2 1 1 2 2 2 1 2 3 3 2 3 2 1 2 2 3 4 5 5 3 3 2 6 6 5 6 4 3 4 4 4 4 4 4 3 3 2 2];
model = hmmFit(data, 2, 'discrete');
model.pi = 0.6661 0.3339;
model.A =
0.8849 0.1151
0.1201 0.8799
model.emission.T =
0.2355 0.5232 0.2259 0.0052 0.0049 0.0053
0.0053 0.0449 0.2204 0.4135 0.1582 0.1578
logLike = hmmLogprob(model,data);
logLike = -55.8382
所以我认为:
Nparams = size(model.A,2)*(size(model.A,2)-1) +
size(model.pi,2)-1) +
size(model.emission.T,1)*(size(model.emission.T,2)-1)
Nparams = 13
因此,最后我们有:
BIC = -2*logLike + num_of_params*log(length(x))
BIC = 159.6319
我找到了一种解决方案,其中的公式num_of_params
(用于简单的马尔可夫模型)如下所示:
Nparams = Num_of_states*(Num_of_States-1) - Nbzeros_in_transition_matrix
那么正确的解决方案是什么?我是否必须考虑过渡矩阵或发射矩阵的零概率?
====自2011年7月15日起更新====
我认为我可以澄清数据维度的影响(使用“高斯混合分布”示例)
X是一个n×d矩阵,其中(n行对应于观测; d列对应于变量(N维)。
X=[3,17 3,43
1,69 2,94
3,92 5,04
1,65 1,79
1,59 3,92
2,53 3,73
2,26 3,60
3,87 5,01
3,71 4,83
1,89 3,30 ];
[n d] = size(X);
n = 10; d =2;
该模型将具有以下用于GMM的参数:
nParam = (k_mixtures – 1) + (k_mixtures * NDimensions ) + k_mixtures * Ndimensions %for daigonal covariance matrices
nParam = (k_mixtures – 1) + (k_mixtures * NDimensions ) + k_mixtures * NDimensions * (NDimensions+1)/2; %for full covariance matrices
如果将X视为一维数据,则比我们拥有的多num_of_data = (n*d)
,因此对于二维数据,我们有num_of_data = n
。
二维数据:nParam = 11; logLike = -11.8197; BIC = 1.689
一维数据:nParam = 5; logLike = -24.8753; BIC = -34.7720
我对HMM的练习很少。具有(5000、6000和更多参数)的HMM是否正常?
您有使用BIC的理由吗?如果没有适当的假设,它可能会给出可怕的错误结果。
—
suncoolsu 2011年
@suncoolsu,您指的是什么意思?我发现了一些基于BIC评分的K集群(GMM模型)选择的示例。可能我在比较两个具有不同输入数据(尺寸)的模型时提供了错误的示例。
—
谢尔盖(Sergey)
我的意思是仅在假设真实模型位于模型空间中的情况下才使用BIC 。可能在您的情况下是合理的。我同意您的看法,人们像AIC一样使用BIC,但两者是完全不同的!
—
suncoolsu 2011年
嗨,这是最新的评论,希望您仍然活跃,但是获取模型中参数数量的最佳方法是什么?
—
masfenix 2014年