2012-02-14 3 views
0

Мне нужно обучить классификатор данных движения с акселерометра. Для каждого образца времени я хранил координаты X Y и Z. Таким образом, одно движение представлено в моем наборе данных следующим образом:Какой тип системы классификации я должен использовать?

[0.39028051 -0.5483283 10.385374]; [0.17420317 -0.2802931 10.72625]; [0.28956637 -0.13387422 11.9645]; [0.6281768 -0.14725612 13.369692]; [0.72674876 -0.115191355 14.50422]; [0.7450281 -0.079684645 15.090715]; [0.74526054 -0.44727635 15.027773]; [0.6936915 -0.9639046 14.088198]; [0.5290651 -1.1378883 12.5164585]; [0.23881127 -1.346372 10.889902]; [0.052466527 -1.2700776 9.227933]; [0.019615699 -0.8237766 7.65959]; [0.10373996 -0.29147366 6.416745]; [0.17365126 0.09419979 5.420801]; [0.18465124 0.3646446 4.5289593]; [0.22039331 0.52677184 3.8076568]; [0.33365434 0.48184758 3.4170833]; [0.40346703 0.21976978 3.472282]; 

где значения между [] представляют собой компоненты XYZ.

Сначала я думал, что скрытая марковская модель лучше всего подходит для моей проблемы. Но у меня возникают проблемы, определяющие состояния в моих данных. Все примеры, которые я нахожу, имеют четко определенный конечный набор состояний (т. Е. Дождь, солнечный или облачный). Все значения в моем наборе данных находятся между -11 и +11, но они не являются целыми числами. Тем не менее, могу ли я использовать это как состояния? таким образом, давая мне 11 * 11 * 11 = 1331 состояний? И как бы я вычислил матрицу перехода?

Кроме того, количество наблюдений отличается от движения (хотя и относится к одному классу).

Прошу прощения, что этот вопрос слишком широк, указатель на учебник по HMM с данным типом данных также помогает!

Благодаря

+1

Вы не можете решить проблему с возможным решением (HMM). что вы делаете с вашими данными? – vulkanino

+0

Этот документ может помочь: http://webspace.ulbsibiu.ro/arpad.gellert/html/SIC_HMM.pdf – vulkanino

+0

Мне нужно классифицировать движения головы на 10 разных классов, которые в основном встряхивают или кивают. Спасибо за указатель! – jorrebor

ответ

0

в псевдокоде, вычислить все расстояния между двумя точками:

for index=0 to coords.length() step 2 
{ 
    x1=coord[i].x 
    y1=coord[i].y 
    z1=coord[i].z 

    x2=coord[i+1].x 
    y2=coord[i+1].y 
    z2=coord[i+1].z 

    deltaX = x2-x1 
    deltaY = y2-y1 
    deltaZ = z2-z1 
    distance[i] = SquareRoot(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ) 
} 

Тогда можно вычислить распределение Гаусса на distance значений, а также среднее значение, медиана, дисперсия. .. Алгоритм не должен слишком усложняться для записи, даже если он может нуждаться в некоторой корректировке здесь и там.

Или другой способ, в цикле вы можете легко вычислить разницу между текущим и предыдущим расстояние:

previousDistance = distance 
distance = SquareRoot(deltaX*deltaX + deltaY*deltaY + deltaZ*deltaZ) 
diff = distance - previousDistance 

А затем применить high pass filter на diff.

Смежные вопросы