我有一维(单一特征)数据,我想适合GMMHMM。有两个隐藏状态,我知道每个状态输出的概率分布。也就是说,我知道先验分布,因此知道GMM参数。因此,我不希望hmmlearn对象更新GMMs的平均值,covars,权重
我希望通过将参数和init_params参数设置为仅更新startprob和transmat来实现这一点
但是hmmlearn最终会更新平均值,covars,权重。我如何阻止它更新这些,并让它只更新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_)
您可以看到权重和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”的任意组合。默认为所有参数
来自文档:https://hmmlearn.readthedocs.io/en/latest/api.html#hmmlearn.hmm.GaussianHMM 初始化模型时,请尝试使用
startprob_prior
和transmat_prior
参数相关问题 更多 >
编程相关推荐