使用scikit-learn中的hmmlearn处理缺失数据

我正在使用scikit-learn的hmmlearn模块运行一个简单的隐马尔可夫模型(HMM)。它对完全观测的数据有效,但当我传入包含缺失数据的观测时,它就失败了。下面是一个小例子:

import numpy as npimport hmmlearnimport hmmlearn.hmm as hmmtransmat = np.array([[0.9, 0.1],                     [0.1, 0.9]])emitmat = np.array([[0.5, 0.5],                    [0.9, 0.1]])# 这不起作用:不能有缺失数据obs = np.array([0, 1] * 5 + [np.nan] * 5)# 这有效#obs = np.array([0, 1] * 5 + [1] * 5)startprob = np.array([0.5, 0.5])h = hmm.MultinomialHMM(n_components=2,                       startprob=startprob,                       transmat=transmat)h.emissionprob_ = emitmatprint obs, type(obs)posteriors = h.predict_proba(obs)print posteriors

如果obs是完全观测的(每个元素都是0或1),它可以工作,但我希望能对未观测的数据点进行估计。我尝试用np.nanNone来编码这些数据,但这两种方法都不起作用。它会报错IndexError: arrays used as indices must be of integer (or boolean) type(在hmm.py", line 430, in _compute_log_likelihood中)。

在hmmlearn中如何处理这个问题?


回答:

目前使用hmmlearn无法进行缺失数据的插补。

作为一种临时方法,你可以将观测序列分割成完全观测的子序列,然后对于每个子序列,要么选择最可能的下一个状态和观测,要么从转移和发射概率中随机模拟它们。请注意,这种策略可能会在子序列边界上导致不一致性。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注