Machine learning 如何用hmmlearn解决基本的HMM问题

Machine learning 如何用hmmlearn解决基本的HMM问题,machine-learning,hidden-markov-models,anomaly-detection,Machine Learning,Hidden Markov Models,Anomaly Detection,有三个基本的HMM问题: 问题1(可能性):给定一个HMMλ=(A,B)和一个观察值 序列O,确定似然P(O |λ) 问题2(解码):给定一个观察序列O和一个HMMλ= (A,B),发现最佳隐藏状态序列Q 问题3(学习):给定观察序列O和 在HMM中的状态,学习HMM参数A和B 我对问题1和3感兴趣。一般来说,第一个问题可以用正向算法求解,第三个问题可以用Baum-Welch算法求解。我应该使用hmmlearn的fit(X,length)和score(X,length)方法分别解决第一个和第三个

有三个基本的HMM问题:

问题1(可能性):给定一个HMMλ=(A,B)和一个观察值 序列O,确定似然P(O |λ)

问题2(解码):给定一个观察序列O和一个HMMλ= (A,B),发现最佳隐藏状态序列Q

问题3(学习):给定观察序列O和 在HMM中的状态,学习HMM参数A和B

我对问题1和3感兴趣。一般来说,第一个问题可以用正向算法求解,第三个问题可以用Baum-Welch算法求解。我应该使用hmmlearn的
fit(X,length)
score(X,length)
方法分别解决第一个和第三个问题,对吗?(文档中没有说明
score
使用正向算法。)

我还有一些关于
score
方法的问题。为什么
score
计算log概率?为什么如果我将几个序列传递给
score
它会返回日志概率之和,而不是每个序列的概率

我最初的任务是:我有100万个大小相等的短句(10个单词)。我想用这些数据训练HMM模型,对于测试数据(同样是10个单词的句子),预测模型中每个句子的概率。基于这种可能性,我将决定这是一个普通的还是不寻常的短语


也许python有更好的库来解决这个问题?

如果要在单个序列上拟合模型,则应该分别使用
score(X)
fit(X)
来解决第一个和第三个问题(因为length=None是默认值,所以不需要显式传递它)。使用多个序列时,应将其长度列表作为长度参数传递,请参见

分数法计算数值稳定性的对数概率。将大量数字相乘可能会导致数字溢出或下溢-即,数字可能太大而无法存储在内存中,或者太小而无法区分零。解决方法是将它们的对数相加

score方法返回所有序列的对数概率之和,因为这就是它的实现方式。但是,您想要的功能的功能请求已在一个月前提交,因此可能很快就会出现。或者你可以简单地分别为每个序列打分


hmmlearn库是用于隐马尔可夫模型的一个很好的python库。我试过使用另一个库ghmm,我得到了奇怪的数值下溢。结果表明,他们对高斯HMM的Baum-Welch算法的实现在数值上是不稳定的。他们使用LU分解代替Cholesky分解来计算协方差矩阵的逆,这有时会导致协方差矩阵不再是半正定的。hmmlearn库使用Cholesky分解。我切换到hmmlearn,我的程序开始运行良好,因此我建议使用它。

如果要在单个序列上拟合模型,则应分别使用
score(X)
fit(X)
来解决第一个和第三个问题(因为length=None是默认值,所以无需显式传递)。使用多个序列时,应将其长度列表作为长度参数传递,请参见

分数法计算数值稳定性的对数概率。将大量数字相乘可能会导致数字溢出或下溢-即,数字可能太大而无法存储在内存中,或者太小而无法区分零。解决方法是将它们的对数相加

score方法返回所有序列的对数概率之和,因为这就是它的实现方式。但是,您想要的功能的功能请求已在一个月前提交,因此可能很快就会出现。或者你可以简单地分别为每个序列打分

hmmlearn库是用于隐马尔可夫模型的一个很好的python库。我试过使用另一个库ghmm,我得到了奇怪的数值下溢。结果表明,他们对高斯HMM的Baum-Welch算法的实现在数值上是不稳定的。他们使用LU分解代替Cholesky分解来计算协方差矩阵的逆,这有时会导致协方差矩阵不再是半正定的。hmmlearn库使用Cholesky分解。我切换到hmmlearn,我的程序开始运行良好,所以我推荐它