0

我使用 Jahmm 库对加速度计序列进行分类。

我已经创建了模型,但是当我尝试通过以下方式计算模型上测试序列的概率时:

ForwardBackwardScaledCalculator fbsc = new ForwardBackwardScaledCalculator(test_pair.getValue(),model_pair.getValue().get_hmm());
                System.out.println(fbsc.lnProbability());

我得到负值,例如-1278.0926336276573。

库代码中的注释指出 lnProbability 方法:

返回生成此对象的序列概率的纳皮尔对数。

返回:感兴趣的序列的napierian对数的概率

但是如何比较两个这样的对数呢?我用两个测试序列在两个不同的模型上调用该方法,所以我得到 4 个概率:

The test sequence: fast_test.seq on fast_model yields a Napierian log from -1278.0926336276573
The test sequence: fast_test.seq on slow_model yields a Napierian log from -1862.6947488370433
The test sequence: slow_test.seq on fast_model yields a Napierian log from -4433.949818774553
The test sequence: slow_test.seq on slow_model yields a Napierian log from -4208.071445499895

但是在这种情况下,这是否意味着我们越接近零,测试序列与模型越相似(所以在这个例子中分类准确率 = 100%?)

谢谢

4

1 回答 1

2

如果“纳皮尔对数”是指自然对数,那么您可以通过将e提高到x来从返回值x中获得概率,例如使用. 但是,返回对数的原因是概率值太小而无法在 a 中表示;将简单地返回零。请参阅有关日志概率的 Wikipedia 文章。Math.expdoubleMath.exp(-1278.0926336276573)

这是否意味着我们越接近零,测试序列与模型越相似

exp(0) == 1并且log(1) == 0,实际上概率越低,其对数越小(越负)。所以,你越接近零,句子就越有可能在模型之下。

然而,这不需要直接与“与模型的相似性”相关,更不用说“分类准确性”了,因为 HMM(作为生成模型)会将较低的概率归因于较长的序列。在您最喜欢的教科书中阅读 HMM;对于这个答案框来说,完整的解释太长了,而且是一个数学问题,因此与本网站无关。

于 2012-07-20T10:05:57.690 回答