Як я треную HMM для класифікації?


12

Тож я розумію, що коли ви тренуєте HMM для класифікації, стандартним підходом є:

  1. Розділіть ваші набори даних на набори даних для кожного класу
  2. Тренуйте один HMM за клас
  3. На тестовому наборі порівняйте вірогідність кожної моделі класифікувати кожне вікно

Але як я треную HMM на кожному занятті? Чи просто я об'єдную дані, що відносяться до одного класу разом? Але чи не маються на увазі, що дані часових рядів є послідовними - і якщо я це роблю, то я кажу, що деякі точки даних є послідовними, коли їх немає?

Якщо бути конкретнішим, у мене є деякі дані ЕЕГ, що є матрицею 96xT, де у мене 96 характеристичних векторів, які є спектральною щільністю потужності різної частоти з різних каналів, а T - тривалість часу сигналу (при деякій частоті дискретизації)

Це можна розділити на вікна, які я знаю з експериментального протоколу (дані позначені міткою), і тому я можу зібрати набори матриць 96 * t для кожного класу. Де t менше T і позначає розмір кожного вікна.

Як я тоді треную HMM на цих даних? Якщо це допомагає, я намагаюся використовувати інструментарій pmtk3, але я відкритий для використання будь-чого насправді - він просто повинен мати змогу мати справу з реальними спостереженнями, оскільки спектральні щільності потужності безперервно не дискретні (за замовчуванням MATLAB інструментарій може мати справу лише з дискретними спостереженнями).

Метою є можливість класифікувати вікна даних ЕЕГ до заданого психічного стану, навчаючись на мічених даних. Це проблема інтерфейсу мозок-комп'ютер із використанням даних конкурсу Берлінського ІМТ .


1
Чи відповідає ця сторінка тому, що вам потрібно?
merours

Здається - я спробую це переконатися. Це, безумовно, дозволяє використовувати гауссові та суміші гауссових моделей, а не просто багаточлени. І, схоже, ви можете глобально тренувати модель на кількох спостереженнях. Так це виглядає добре. Я хотів все-таки навчитися Python правильно, так як він має набагато ширше застосування. Дякую :)
Alex McMurray

Відповіді:


9

Підхід, який ви описуєте для використання НММ для класифікації, дійсно застосовний лише до налаштувань, де у вас є незалежні послідовності, які ви хочете класифікувати. Наприклад, якби я класифікував настрої речень як позитивні чи негативні, я міг би створити HMM для кожного, як ви описали. Дивіться відповідну відповідь, яку я дав тут . Зверніть увагу, як це спирається на припущення, що я можу розбити послідовності на змістовні шматки, які слід класифікувати, перш ніж порівнювати плакатів. Здається, це не є проблемою для вас, оскільки у вас є фактично один великий часовий рядОсь що б я спробував.T

Ви на Reddit згадали, що не вагаєтесь призначити єдиний стан для кожного класу. Ви пробували це? Це може не працювати так погано, як ви думаєте. Проблема з оцінкою також значно полегшується в цьому випадку. Оцінити ймовірність переходу легко, ви просто порахуєте по суті. Крім того, ви можете просто підходити до ймовірностей викидів для кожного стану, виходячи з спостережуваних даних та відповідного класу, ігноруючи часові аспекти.

Якщо ви переконані, що це погана ідея, або ви вважаєте, що вона погано працює, але все ж хочеться дотримуватися генеративних моделей, ви можете використовувати щось на зразок ієрархічної НММ. Наприклад, ви можете дозволити станам верхнього рівня представляти класи, а потім дозволити НММ нижнього рівня моделювати тимчасові зміни в межах класів. Ви також можете використовувати один великий HMM, щоб досягти чогось подібного. Якщо у вас є - класи, виділяють станів для кожного класу (так ШТАТИ взагалі) виду , , . Під час тренування вам потрібно буде змусити НММ призначити лише позитивну ймовірність переходу до стану в момент деKNN×Kskik=1,,Ki=1,Ntk відповідає мітці в момент . Я, можливо, сформулював це трохи незручно, тож сподіваюся, що зрозуміло, що я маю на увазі. Очевидно, ви можете узагальнити це тим, що мають різну кількість станів на клас. Можливо, є й інші типи динамічних байєсівських мереж, які ви також можете використовувати. Теза Кевіна Мерфі є чудовим посиланням. Він також обговорює перетворення HHMM в HMM.t

Нарешті, ви можете переключитися на дискримінаційну модель на зразок Умовного випадкового поля. Дискримінаційна модель дозволить вам легко включити більш складні функції та більш безпосередньо вирішити існуючу проблему (оцінка умовної щільності). Це, мабуть, те, що я спробував би спочатку.


Спостережувані значення є безперервними, тому я підходив би до гаусса чи ГММ. Як було обговорено на reddit, це обмежує можливості моделі. Я використовую цю модель, щоб побачити, як часовий аспект впливає на точність класифікації порівняно зі статичними моделями. Я знаю, що дискримінаційні моделі можуть бути кращими для класифікації, і я прочитав фрагменти тези Мерфі. Це здається цікавим, але HMM мені рекомендував мій професор (це відкритий проект), тому я спробую це. Я хочу більше працювати з сигналами EEG / MEG в майбутньому, хоча я спробую інші методи в якийсь момент. :)
Алекс Мак-Мюррей

1
Врешті-решт я використав sklearn та його підтримку для численних спостережень. Здавалося, працює правильно. Я повинен зануритися в код і подивитися, як він насправді має справу з ним.
Алекс Мак-Мюррей

1
Алекс, ти можеш надати посилання або приклад до того, що ти називаєш "sklearn та його підтримка для численних спостережень"? Я займався цією проблемою (і пов’язаною з цим проблемою, як "сказати" HMM, що кілька спостережень належать до однієї етикетки класу) вже багато років, і я хотів би знати, як ви їх вирішили.
Рубенуліс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.