0

我需要根据加速度计的运动模式数据训练分类器。对于每个时间样本,我都存储了 XY 和 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 的此类数据的教程也很有帮助!

谢谢

4

1 回答 1

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

然后应用高通滤波器diff

于 2012-02-14T12:35:23.320 回答