hmmlearn中的GMMHMM是否在没有任何n_samples大小的错误的情况下运行?

时间:2017-11-07 18:33:11

标签: python mixture-model hmmlearn

首先,我的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模型的在线示例。

1 个答案:

答案 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“山丘”,这足以区分不同的输入时间序列。