分类 HMM 陀螺仪数据 Jahmm 无法学习模型

我在使用来自Android可穿戴设备的加速度计和陀螺仪传感器数据训练JaHMM实现的HMM模型。

用加速度计数据训练的HMM输出的学习状态良好,误差率也尚可接受。

两个HMM的初始化如下所示:

    Hmm<ObservationVector> hmm = new Hmm<>(2, new OpdfMultiGaussianFactory(3));    hmm.setPi(0, 0.5);    hmm.setPi(1, 0.5);    hmm.setOpdf(0, new OpdfMultiGaussian(            new double[]{0,0,0},            new double[][] {{0.1,0,0},                            {0,0.1,0},                            {0,0,0.1}            }));    hmm.setOpdf(1, new OpdfMultiGaussian(            new double[]{0,0,0},            new double[][] {{0.1,0,0},                            {0,0.1,0},                            {0,0,0.1}                            }));    hmm.setAij(0, 0, 0.5);    hmm.setAij(0, 1, 0.5);    hmm.setAij(1, 0, 0.5);    hmm.setAij(1, 1, 0.5);

用加速度计数据训练的HMM输出如下:

HMM with 2 state(s)

State 0 Pi: 0.5000000000000188 Aij: 0.5 0.5 Opdf: Multi-variate Gaussian distribution — Mean: [ 0.036 -0.051 0.075 ]

State 1 Pi: 0.5000000000000188 Aij: 0.5 0.5 Opdf: Multi-variate Gaussian distribution — Mean: [ 0.036 -0.051 0.075 ]

然而,用陀螺仪数据训练的HMM似乎无法学习HMM的状态,无论我尝试了多少次训练迭代(500次迭代)。例如,学习状态的概率就是NaN

用陀螺仪数据训练的HMM输出如下:

HMM with 2 state(s)

State 0 Pi: NaN Aij: ? ? Opdf: Multi-variate Gaussian distribution — Mean: [ ? ? ? ]

State 1 Pi: NaN Aij: ? ? Opdf: Multi-variate Gaussian distribution — Mean: [ ? ? ? ]

这种行为的原因可能是什么?我是否需要在数据可用于HMM之前进行预处理或归一化步骤?HMM的状态数量是否不足?我尝试过使用五个状态,但结果仍然相同。

加速度计训练文件的片段可以在这里看到:https://gist.github.com/Gudui/91d2c6b2452f1ea6a5c925b1eed9b40c

陀螺仪训练文件的片段可以在这里看到:https://gist.github.com/Gudui/987cc1c1a7c0311a03988b818e7cbbcb

对于这两个训练文件,每一行代表一个训练序列。

该库在这里可用: https://github.com/tanjiti/jahmm

提前感谢!


回答:

进一步说明我的评论,我建议:

  1. 使用高斯分布的随机初始化,即不要将均值向量初始化为[0,0,0],也不要将协方差矩阵初始化为0.1倍的单位矩阵,像你现在做的那样,而是使用一些随机值或基于你的数据的经验均值和协方差。
  2. 对数据进行白化处理,确保其在每个坐标上的均值为零,方差为单位(甚至可以使用PCA使坐标不相关)。

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中创建了一个多类分类项目。该项目可以对…

发表回复

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