import sys from hmmlearn.hmm import MultinomialHMM import numpy as np dice_num = 3 x_num = 8 dice_hmm = MultinomialHMM(n_components=3,n_trials=10) dice_hmm.startprob_ = np.ones(3) / 3.0 dice_hmm.transmat_ = np.ones((3, 3)) / 3.0 dice_hmm.emissionprob_ = np.array([[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]]) dice_hmm.emissionprob_ /= dice_hmm.emissionprob_.sum(axis=1)[:, np.newaxis] X = np.array([[0], [5], [2], [4], [1], [6], [2], [4], [1], [3], [2], [5], [0], [4], [3]]) Z = dice_hmm.decode(X) # 问题A logprob = dice_hmm.score(X) # 问题B # 问题C x_next = np.dot(dice_hmm.transmat_, dice_hmm.emissionprob_) print("state: ", Z) print("logprob: ", logprob) print("prob of x_next: ", x_next)上述代码显示错误ValueError: Size of each quantile should be size of p: received 1, but expected 8.:
时间: 2023-07-02 18:03:52 浏览: 144
这个错误是因为在初始化 MultinomialHMM 时,你使用了参数 n_trials=10,但是这个参数应该是 n_features,即观测值的数量,而不是 n_trials。所以你需要将 n_trials 改为 x_num,即:
```python
dice_hmm = MultinomialHMM(n_components=3, n_features=x_num)
```
这样就可以解决这个错误了。
相关问题
import sys from hmmlearn.hmm import MultinomialHMM import numpy as np dice_num = 3 x_num = 8 dice_hmm = MultinomialHMM(n_components=3,n_features=8,n_trials=10) dice_hmm.startprob_ = np.ones(3) / 3.0 dice_hmm.transmat_ = np.ones((3, 3)) / 3.0 dice_hmm.emissionprob_ = np.array([[1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0], [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0]]) dice_hmm.emissionprob_ /= dice_hmm.emissionprob_.sum(axis=1)[:, np.newaxis] X = np.array([[0], [5], [2], [4], [1], [6], [2], [4], [1], [3], [2], [5], [0], [4], [3]]) Z = dice_hmm.decode(X) # 问题A logprob = dice_hmm.score(X) # 问题B # 问题C x_next = np.dot(dice_hmm.transmat_, dice_hmm.emissionprob_) print("state: ", Z) print("logprob: ", logprob) print("prob of x_next: ", x_next)上述代码显示错误:
可以在代码的开头加上一个空格,将import和from分开,修改为:
import sys
from hmmlearn.hmm import MultinomialHMM
import numpy as np
然后,MultinomialHMM类没有n_trials参数,可以将dice_hmm的定义修改为:
dice_hmm = MultinomialHMM(n_components=3,n_features=8)
修改以上两处后,将代码复制到Python环境中运行即可。
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[2], line 8 5 dice_num = 3 6 x_num = 8 ----> 8 dice_hmm = MultinomialHMM(n_components=3, n_features=8) 10 dice_hmm.startprob_ = np.ones(3) / 3.0 11 dice_hmm.transmat_ = np.ones((3, 3)) / 3.0 TypeError: MultinomialHMM.__init__() got an unexpected keyword argument 'n_features'
这个错误提示是因为 MultinomialHMM 类并不支持 n_features 这个参数。如果你需要指定观测值的数量,可以在输入训练数据时进行限制。例如,如果你有一个大小为 N×M 的观测值矩阵 X,其中 N 是观测序列的数量,M 是每个观测序列的长度,那么你可以将 X 转换为一个大小为 N×1 的矩阵,其中每个元素都是一个长度为 M 的观测序列。然后,你可以将这个矩阵作为 MultinomialHMM 的输入训练数据。
以下是一个示例代码片段,演示如何使用 MultinomialHMM 训练具有固定观测值数量的模型:
```
import numpy as np
from hmmlearn import hmm
# 生成随机观测值矩阵 X
np.random.seed(42)
X = np.random.randint(1, 7, size=(100, 10))
# 初始化 MultinomialHMM 模型
n_states = 3
dice_hmm = hmm.MultinomialHMM(n_components=n_states)
# 训练模型
dice_hmm.fit(X)
# 预测模型
logprob, hidden_states = dice_hmm.decode(X)
print(hidden_states)
```
在这个示例中,我们生成了一个大小为 100×10 的观测值矩阵 X。然后,我们初始化了一个具有 3 个隐状态的 MultinomialHMM 模型,使用 X 进行训练,并对 X 进行解码。
阅读全文