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

标签 machine-learning normalization sensors hidden-markov-models

我正在使用来自 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 使坐标不相关。

关于machine-learning - 分类 HMM 陀螺仪数据 Jahmm 无法学习模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42881956/

相关文章:

java - 如何在 Java 中加载 Weka 模型?

tensorflow - 如果测试时在训练模式下使用批量归一化怎么办?

python - 带有Raspberry pi 2b +的超声波传感器会产生编译错误

go - 读取 RPi 的 GPIO 上的温度传感器值。脚步

android - 实现计步器 : How to find a local peak?

python - 训练和验证数据结构

machine-learning - 在rapidminer中将性能提取为宏

r - 在 R 中绘制决策树(插入符号)

mysql - 我是否过度设计了我的 MySQL 数据库(用户/公司/产品)?

mysql - sten 百分位数 t 分数的数据库标准化