首先,我的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)
。
以下是代码,以便创建错误:
cyclicRelation :: (Bounded a, Ord a) => a -> a -> Ordering
cyclicRelation x y | x == minBound && y == maxBound = GT
| x == maxBound && y == minBound = LT
| otherwise = x `compare` y
任何人都可以找到任何理由或者它是图书馆的错误吗?我找不到实施GMMHMM模型的在线示例。
答案 0 :(得分:0)
我也有同样的问题。
它似乎需要连续多个样本,在这些样本上训练高斯混合。 IE。一个 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]]
...
]
那是因为当我尝试将其重塑为单行多个样本时,我克服了错误。但是后来我得到了 n_samples 不足的错误,用于训练 HMM 本身,即缺少行。
[
[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“山丘”,这足以区分不同的输入时间序列。