Классификация данных гироскопа HMM Jahmm Не могу узнать модель

Я тренирую HMM, реализованные в JaHMM, с данными датчика от акселерометра и гироскопа, полученными от носимых устройств 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 с 2 состояниями

Состояние 0 Pi: 0,5000000000000188 Aij: 0,5 0,5 Opdf: Многомерное распределение Гаусса --- Среднее значение: [0,036 -0,051 0,075]

Состояние 1 Pi: 0,5000000000000188 Aij: 0,5 0,5 Opdf: Многомерное распределение Гаусса --- Среднее значение: [0,036 -0,051 0,075]

Однако HMM, обученный с данными гироскопа, похоже, не может изучить состояния HMM, независимо от того, сколько итераций обучения я пробовал (500 итераций). например. изученные вероятности состояний - это просто NaN

Вывод для HMM, обученного с данными гироскопа:

HMM с 2 состояниями

Состояние 0 Pi: NaN Aij: ? ? Opdf: Многомерное распределение Гаусса --- Среднее значение: [ ? ? ? ]

Состояние 1 Pi: NaN Aij: ? ? Opdf: Многомерное распределение Гаусса --- Среднее значение: [ ? ? ? ]

Что может быть причиной такого поведения? Есть ли этап предварительной обработки или нормализации, который мне нужно выполнить, прежде чем данные можно будет использовать в HMM? Является ли количество состояний в HMM недостаточным? Я пробовал с пятью состояниями, но это дает тот же результат.

Фрагмент обучающего файла для акселерометра можно увидеть здесь: https://gist.github.com/Gudui/91d2c6b2452f1ea6a5c925b1eed9b40c

Фрагмент обучающего файла для гироскопа можно увидеть здесь: https://gist.github.com/Gudui/987cc1c1a7c0311a03988b818e7cbbcb

Для обоих обучающих файлов каждая строка представляет обучающую последовательность.

Библиотека доступна здесь: https://github.com/tanjiti/jahmm

Заранее спасибо!


person Peter    schedule 19.03.2017    source источник
comment
Я просто догадываюсь, глядя на ваши данные, но вы должны попробовать две вещи: (1) инициализировать гауссианы для случайных значений (2) нормализовать и отбелить ваши данные, то есть убедиться, что данные имеют нулевое среднее и некоррелированные координаты (например, по СПС). Тогда попробуй еще раз.   -  person Itamar Katz    schedule 19.03.2017
comment
Я не уверен в (1) Что вы имеете в виду? Я приму это как ответ, если вы объясните. Попробовал (2) и нормализовал значения моего гироскопа, что дало приемлемые результаты. Спасибо! @ИтамарКац   -  person Peter    schedule 19.03.2017
comment
Смотрите мой ответ о (1)   -  person Itamar Katz    schedule 19.03.2017


Ответы (1)


Разрабатывая свой комментарий, предлагаю:

  1. Используйте случайную инициализацию гауссовой PDF, то есть вместо инициализации вектора средних до [0,0,0] и матрицы ковариации до 0,1-кратной единичной матрицы, как вы делаете сейчас, используйте некоторые случайные значения или некоторое эмпирическое среднее значение и ковариацию на основе ваших данных.
  2. Отбелите свои данные, то есть убедитесь, что они имеют нулевое среднее значение и единичную дисперсию в каждой координате (или даже используйте PCA, чтобы сделать координаты некоррелированными.
person Itamar Katz    schedule 19.03.2017
comment
Просто быстрый комментарий @Itamar Katz, что такое случайные значения для вектора средних и ковариационной матрицы, и как мне извлечь или рассчитать эмпирические средние значения и ковариацию на основе моих данных? - person Peter; 22.03.2017
comment
изучение хм является итеративным, вы предоставляете начальные значения, используя hmm.setOpdf (я предполагаю, что не знаю эту библиотеку). - person Itamar Katz; 22.03.2017