hmmlearn MultinomialHMM emissionprob_维度不符预期的技术咨询
问题原因与解决办法
为什么emissionprob_维度是(2,10)?
你犯了两个关键错误:
- 输入格式误解:
hmmlearn的fit方法对输入格式有明确要求:如果是多个独立序列,需要传入一维数组组成的列表;而你传入的(100000,10)二维数组,会被识别成单个长度为100000的序列,每个观测是10维的离散向量。这直接导致发射概率的列数等于观测维度10,而非你预期的词汇量5。 - 观测值未从0开始:
MultinomialHMM要求离散观测值必须从0开始连续取值,你的观测是1-5,即使格式正确,模型也会将最大观测值5当作特征数量的依据(即认为有6个特征),而非你设定的5个。
修正后的代码
from hmmlearn import hmm import numpy as np # 生成序列:观测值改为0-4(对应5种符号),保留列表格式 sequences = np.random.randint(0, 5, size=(100000, 10)).tolist() # 创建并拟合模型:直接传入序列列表,无需转二维数组 model = hmm.MultinomialHMM(n_components=2) model.fit(sequences) # 打印参数 print("初始状态分布:") print(model.startprob_) print("\n转移矩阵:") print(model.transmat_) print("\n发射概率:") print(model.emissionprob_) print("发射概率维度:", model.emissionprob_.shape) # 输出应为(2,5)
关键修正点
- 观测值调整为
0-4,对应5种符号,符合词汇量要求; - 保留序列列表格式传入
fit,让模型识别为100000个长度为10的独立序列,每个观测是1维离散值。
这样修正后,emissionprob_的维度就会是(2,5),与你的预期一致。
内容的提问来源于stack exchange,提问作者zzzbbx
相关产品推荐
相关产品推荐

