Я тренирую 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
Заранее спасибо!