Machine learning 分类HMM陀螺仪数据Jahmm Can';不学习模型

Machine learning 分类HMM陀螺仪数据Jahmm Can';不学习模型,machine-learning,normalization,sensors,hidden-markov-models,Machine Learning,Normalization,Sensors,Hidden Markov Models,我正在训练用JaHMM实现的HMM,其传感器数据来自加速度计,陀螺仪来自Android可穿戴设备 使用加速度计数据训练的HMM输出良好的学习状态,并且具有某种可接受的错误率 两个HMM的初始化如下所示: Hmm<ObservationVector> hmm = new Hmm<>(2, new OpdfMultiGaussianFactory(3)); hmm.setPi(0, 0.5); hmm.setPi(1, 0.5); hmm.

我正在训练用JaHMM实现的HMM,其传感器数据来自加速度计,陀螺仪来自Android可穿戴设备

使用加速度计数据训练的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=新的Hmm(2,新的optdfmultigaussianfactory(3));
hmm.setPi(0,0.5);
hmm.setPi(1,0.5);
hmm.setOpdf(0,新的opdf)(
新的双[]{0,0,0},
新的双[][{0.1,0,0},
{0,0.1,0},
{0,0,0.1}
}));
hmm.setOpdf(1,新的opdf)(
新的双[]{0,0,0},
新的双[][{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输出:

带有2个状态的HMM

州0 Pi:0.5000000000000188 Aij:0.50.5 Opdf:多变量高斯分布---平均值:[0.036-0.051 0.075]

国家1 Pi:0.5000000000000188 Aij:0.50.5 Opdf:多变量高斯分布---平均值:[0.036-0.051 0.075]

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

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

带有2个状态的HMM

州0 皮:南 Aij:? Opdf:多变量高斯分布---平均值:[???]

国家1 皮:南 Aij:? Opdf:多变量高斯分布---平均值:[???]

这种行为的原因可能是什么?在HMM中使用数据之前,是否需要执行预处理或规范化步骤? HMM中的状态数是否不足?我试过五个州,但结果都一样

此处可以看到加速计培训文件的片段:

陀螺仪培训文件的一个片段可以在这里看到:

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

图书馆可在以下位置获得:


提前谢谢

详细阐述我的评论,我建议:

  • 使用高斯pdf的随机初始化,即不是将均值向量初始化为
    [0,0,0]
    ,将协方差矩阵初始化为单位矩阵的0.1倍,就像您现在所做的那样,使用一些随机值或一些基于数据的经验平均值和协方差
  • 白化数据,即确保每个坐标的平均值和单位方差为零(甚至使用PCA使坐标不相关)

  • 我只是通过查看您的数据进行猜测,但有两件事您应该尝试:(1)将高斯函数初始化为随机值(2)对数据进行规范化和白化,即确保数据具有零均值和不相关坐标(例如通过PCA)。然后再试一次。我不确定(1)你是什么意思?如果你解释的话,我会接受这个答案。我尝试了(2)并标准化了我的陀螺仪值,得到了可以接受的结果。谢谢!@ItamarKatzSee我关于(1)的答案请快速评论@Itamar Katz,均值向量和协方差矩阵的随机值到底是什么,我如何根据我的数据提取或计算经验均值和协方差?hmm的学习是迭代的,您可以使用
    hmm.setOpdf
    提供初始值(我猜,我不知道这个库)。