1

首先,我的 hmmlearn 版本是 0.3.0b(使用 conda 安装)。

我正在尝试在 hmmlearn 中实现 GMMHMM 模型,但我得到:

ValueError: n_samples=3 should be >= n_clusters=5

更具体地说,我有一个包含 4 个状态和 5 个混合高斯(集群)的模型,并且我的输入 X 变量具有文档shape(20,3)中提到的,即.(n_samples, n_features)

这是创建错误的代码:

import numpy as np
from hmmlearn import hmm

size = 30
data = np.concatenate((np.random.normal(0,1,size), np.random.normal(5,2,size)))
np.random.shuffle(data)
x = np.reshape(data,(-1,3))

model = hmm.GMMHMM(n_components=4, n_mix=5)
model.fit(x)

任何人都可以找到任何理由或者它是图书馆的错误吗?我找不到实现 GMMHMM 模型的在线示例。

4

1 回答 1

0

我也有同样的问题。

似乎它需要连续多个样本来训练高斯混合。即一个 3 维数组,其中每一行是样本数组,每个样本是多元高斯混合的特征数组:

[
  [[a b],[a b],[a b],[a b]]
  [[a b],[a b],[a b],[a b]]
  [[a b],[a b],[a b],[a b]]
  [[a b],[a b],[a b],[a b]]
  ...
]

那是因为当我尝试将其重塑为多个样本的单行时,我克服了错误。但是后来我得到了一个错误,即 HMM 本身的训练 n_samples 不足,即缺少行。

[
  [a a a a a a a a a],[b b b b b b b b b]
]

那么问题是 fit() 方法只需要 2d 数组,而不是 3d。所以我无法完成这项工作,我不知道如何使用 hmmlearn 完成 HMMGMM 中的多元高斯混合。

但是因为特征的性质是相同的,所以我将它们以不同的偏移量堆叠在一起作为一个连续流,并训练一个变量(不是多变量)的简单高斯混合:

[
  [a + 1],
  [b - 1],
  [a + 1],
  [b - 1],
  ...
]

2d 概率密度函数中会出现 2 个凸点,而不是单个 3d“山丘”,这足以区分不同的输入时间序列。

于 2020-12-24T15:22:29.903 回答