我使用Jahmm库来分类加速度计序列。
我创建了我的模型但是当我尝试通过以下方法计算模型上测试序列的可用性时:
ForwardBackwardScaledCalculator fbsc = new ForwardBackwardScaledCalculator(test_pair.getValue(),model_pair.getValue().get_hmm());
System.out.println(fbsc.lnProbability());
我得到负值,如-1278.0926336276573。
库代码中的注释声明了lnProbability方法:
返回序列概率的napierian对数 生成了这个对象。
返回:感兴趣序列的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%?)
谢谢
答案 0 :(得分:2)
如果按“Napierian logarithm”表示自然对数,则可以通过将 e 提升到<来自返回值 x 的概率。 em> x ,例如使用Math.exp
。但是,返回对数的原因是因为概率值太小而无法在double
中表示; Math.exp(-1278.0926336276573)
只会返回零。请参阅维基百科有关log probabilities的文章。
是否意味着我们越接近零,测试序列与模型越相似
exp(0) == 1
和log(1) == 0
,实际上概率越低,其对数越小(越负)。因此,越接近零,句子在模型下的可能性就越大。
然而,这不需要直接涉及“与模型的相似性”,更不用说“分类准确性”,因为HMM(生成模型)会将较低的概率归因于较长的序列。阅读您喜爱的教科书中的HMM;这个答案框的完整解释太长了,并且是一个数学问题,因此对于这个网站来说是偏离主题的。