我们可以通过 HMM 进行监督学习吗?

Posted

技术标签:

【中文标题】我们可以通过 HMM 进行监督学习吗?【英文标题】:Can we do supervised learning through HMM? 【发布时间】:2018-11-16 11:02:21 【问题描述】:

我相信我理解 HMM 的核心。通过 HMM,我们解决了评估(发射序列的概率)、解码(最可能的隐藏序列)和学习问题(从观察到的发射序列集中学习转换和发射概率矩阵)。

我的问题与学习问题有关。我有发射序列,但我也有每个序列的相关特征(意味着隐藏状态值,但隐藏状态的数量未知)。与 HMM 的学习问题一样,我们估计隐藏序列(大小和概率矩阵),为此我们只需要发射序列(如果事先不知道隐藏序列的大小可以优化)。

我正在使用 HMM library 进行计算。当然,它没有 我想要的选项。

import numpy as np
import pandas as pd

from hmmlearn import hmm

filenames =  [f for f in os.listdir(dir_path) if '.csv' in f.lower()]
d1 = pd.read_csv(dir_path + filenames[0]).as_matrix() # Shape = [m, 3] => first two column is featute and last is the emission-state 
d2 = pd.read_csv(dir_path + filenames[1]).as_matrix() # Shape = [m, 3]


##
remodel = hmm.GaussianHMM(n_components=4, covariance_type="full", n_iter=100)

remodel.fit(d1[:, 0:2])  # Problem would have been solved if there was supervised option to pass the states as well 

pred_1 = remodel.predict(d1[:, 0:2])
true_1 = d1[:, -1] # Last column is state of the feature in 1, 2 column.

pred_2 = remodel.predict(d2[:, 0:2])
true_2 = d2[:, -1]

有没有办法在 HMM 中进行监督学习,如果有,那么怎么做?如果没有,我还能用 HMM 解决我的问题吗?如果有可能那怎么办?

【问题讨论】:

【参考方案1】:

hmmlearn 没有实现监督学习 (hmmlearn#109)。

seqlearn 库实现了有监督的 HMM,但似乎没有实现 GMM。

pomegranate 库似乎使用高斯混合模型实现了有监督的隐马尔可夫模型。像这样的:

import pomegranate as pg

X = ...
y = ...
distribution = pg.MultivariateGaussianDistribution
model = pg.HiddenMarkovModel.from_samples(distribution, n_components=5, X=X, labels=y, algorithm='labeled')

【讨论】:

以上是关于我们可以通过 HMM 进行监督学习吗?的主要内容,如果未能解决你的问题,请参考以下文章

标注-隐马尔可夫模型HMM的探究

无监督和有监督算法的区别

无监督学习

多语言数据的特征选择和无监督学习+机器学习算法选择

写一下自己对《统计学习方法》的一点认识

Python机器学习及实践——无监督学习经典模型(K-means)