隐马尔可夫模型如何生成概率

时间:2018-05-27 22:16:34

标签: python machine-learning unsupervised-learning markov

我有很多来自脉冲\心率测量的数据,因此数据在长整数列表中,我有8个状态(尽管数据范围可以超过1到8-它可以是50到140 )。 我想要一种能够获取测量数据并通过无监督学习的算法,让我有可能从一种状态转移到另一种状态。 所以我不知道转换矩阵,我不知道在测量数据上分配不同的状态。 我只有8个状态,具有心率测量的矢量,我需要获得从一个状态移动到另一个状态的概率。 我不确定如何使用HMM来实现它,或者它是一种完全可以实现的方式。

2 个答案:

答案 0 :(得分:0)

几乎所有时间序列数据都可以由HMM建模。应使用众所周知的Baum-Welch算法从数据中估计转移矩阵。Wikipedia的简单教程应该给出一些提示。

答案 1 :(得分:0)

您听说过TICC吗?

这是一个基于逆协方差的聚类 多变量时间序列数据。该算法可以帮助您使用心率测量(和许多其他数据),并使用无监督的方法来识别不同的状态。这个算法非常好,因为你可以指定两个关键的调整参数:

  1. number_of_clusters:数据中预期的状态数。在这种情况下,您有8个观察到的状态。这将使算法的训练更加准确。
  2. beta:转换惩罚。您可以控制算法从一种状态切换到另一种状态的难易程度。如果您对问题有充分的了解,或者如果没有,可以尝试和错误,这可能是直截了当的。
  3. 我建议您查看TICC implementation in Python.

    这是一个简单的例子:

    fname = "bar_shaul_data.txt"
    ticc = TICC(window_size=1, number_of_clusters=8, lambda_parameter=11e-2, beta=600, maxIters=100, threshold=2e-5,
                write_out_file=False, prefix_string="output_folder/", num_proc=1)
    (cluster_assignment, cluster_MRFs) = ticc.fit(input_file=fname)
    
    print(cluster_assignment)
    np.savetxt('Results.txt', cluster_assignment, fmt='%d', delimiter=',')
    

    README上提供了更多文档。

    免责声明:我是图书馆的撰稿人。