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

Classification HMM gyroscope data Jahmm Can't learn model

我正在使用来自加速度计的传感器数据和从 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 ]

然而,无论我尝试了多少次训练迭代(500 次迭代),用 陀螺仪 数据训练的 HMM 似乎无法学习 HMM 的状态。例如学习状态概率只是 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. 使用高斯 pdf 的随机初始化,而不是像现在一样将均值向量初始化为 [0,0,0],将协方差矩阵初始化为单位矩阵的 0.1 倍,而是使用一些随机值或一些基于您的数据的经验均值和协方差。
  2. 白化您的数据,即确保每个坐标的均值和单位方差为零(或者甚至使用 PCA 使坐标不相关。