使用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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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