我有想要拟合 GMMHMM 的一维(单一特征)数据。有两个隐藏状态,我知道每个状态输出的概率分布。也就是说,我知道先验分布,因此知道 GMM 参数。所以我不希望 hmmlearn 对象更新 GMM 的均值、协变量、权重。
我想通过将params和init_params参数设置为仅更新startprob和transmat来完成此操作。
但是 hmmlearn 最终也会更新mean、covars和weights。如何阻止它更新这些并让它只更新startprob和transmat?
这是我的代码
# 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_)
您可以看到,即使均值保持不变,权重和协变量也发生了变化。
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' 表示 startprob,'t' 表示 transmat,'m' 表示均值,'c' 表示协变量,以及 'w' 表示 GMM 混合权重的任意组合。默认为所有参数。
params :控制在训练过程中更新哪些参数。可以包含用于 startprob 的“s”、用于 transmat 的“t”、用于均值的“m”和用于 covars 的“c”以及用于 GMM 混合权重的“w”的任意组合。默认为所有参数。