hmmlearn GMMHMM中的参数未按预期工作

2024-09-27 21:22:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一维(单一特征)数据,我想适合GMMHMM。有两个隐藏状态,我知道每个状态输出的概率分布。也就是说,我知道先验分布,因此知道GMM参数。因此,我不希望hmmlearn对象更新GMMs的平均值covars权重

我希望通过将参数init_params参数设置为仅更新startprobtransmat来实现这一点

但是hmmlearn最终会更新平均值covars权重。我如何阻止它更新这些,并让它只更新startprobtransmat

这是我的密码

# Initialize the GMMHMM

means_prior = known_means
covars_prior = known_covars
weights_prior = known_weights

gmm_hmm = hmm.GMMHMM(n_components=n_comps, n_mix=n_mix, weights_prior=weights_prior,
                    means_prior=means_prior, covars_prior=covars_prior,
                     covariance_type='spherical', params='st', init_params='st')
gmm_hmm.means_ = means_prior
gmm_hmm.weights_ = weights_prior
gmm_hmm.covars_ = covars_prior

print('Before fitting...')
print('means')
print(gmm_hmm.means_)
print('weights')
print(gmm_hmm.weights_)
print('covars')
print(gmm_hmm.covars_)

# Fit the GMMHMM to the input sequence
gmm_hmm.fit(input_sequence)

print('After fitting...')
print('means')
print(gmm_hmm.means_)
print('weights')
print(gmm_hmm.weights_)
print('covars')
print(gmm_hmm.covars_)

您可以看到权重covars发生了变化,尽管表示保持不变

Before fitting...
means
[[[51.30211436]
  [53.32515359]]

 [[63.47895865]
  [57.19121711]]]
weights
[[0.58624271 0.41375729]
 [0.48605807 0.51394193]]
covars
[[ 0.6483754   1.2042972 ]
 [13.85258908  1.04639497]]

After fitting...
means
[[[51.16975532]
  [54.19504787]]

 [[65.82853658]
  [54.25868767]]]
weights
[[0.88971249 0.11028751]
 [0.30707459 0.69292541]]
covars
[[ 0.56903044  0.70862057]
 [14.77828965  0.56072741]]

非常感谢你的帮助

GMMHMM文档

init_params:控制在训练之前初始化哪些参数。可以包含“s”表示起始重量,“t”表示transmat,“m”表示平均值,“c”表示CoVar,“w”表示GMM混合重量的任意组合。默认为所有参数

参数:控制在培训过程中更新哪些参数。可以包含startprob的“s”、transmat的“t”、means的“m”、CoVar的“c”和GMM混合权重的“w”的任意组合。默认为所有参数


Tags: 参数paramsmeans平均值权重gmmprintprior

热门问题