如何在手势识别任务中从加速度计数据的滑动window移动到特征向量?

How to move from sliding window of accelerometer data to feature vector in gesture recognition task?

我们有一个应用程序需要能够根据加速度计数据识别短手势。

现在,我阅读了很多关于这个主题的不同论文(其中 Andrea Mannini 和 Angelo Maria Sabatini 撰写的 "Machine Learning Methods for Classifying Human Physical Activity from On-Body Accelerometers" 似乎是最有用的一篇)并且我对需要什么有了一些清晰的理解待完成(有些步骤可能看起来不对,因为我之前没有任何 statistics/ML 的经验):

  1. 我需要从智能手机沿 3 个轴收集加速度计数据。
  2. 下一步是将数据分成交流和直流分量(其中一个与重力加速度有关,第二个与 body 加速度有关)。我需要使用 body 加速组件,因为该组件似乎可以为 activity 识别问题提供更好的结果。
  3. 下一步是从 body 加速度分量中提取一些特征 - 要提取的特征尚未确定,因为它不是问题的一部分。
  4. 我需要获取我的特征向量列表并训练分类器(很可能我会使用隐马尔可夫模型,因为这个分类器似乎是顺序分类任务和手势识别任务的最佳选择似乎属于顺序分类任务)。
  5. 之后我可以评估和完善。

现在,这些论文提到的一件事我还不能理解,这件事正在滑动windows。据我了解,我需要获取传入的加速度计数据流并将其拆分为一组重叠系列,例如

0s到1.0s的数据<br> 0.5s到1.5s的数据<br> 1.0s到2.0s的数据<br> ...<br> 从 n s 到 (n+1.0)s 的数据

我不明白的是每个 window 都有加速度计读数的数量:

x0, y0, z0<br> x1, y1, z1<br> x2, y2, z2<br> ...<br> xn, yn, zn

如您所见,这不是向量,它是矩阵。但是我需要一个特征向量来训练我的分类器,那么如何将矩阵压缩到向量中呢?

我对这些论文的作者是如何做到的有一些想法:

  1. 我们可以根据每个三元组创建一个特征向量:[featureA based on x0, y0, z0; featureB based on x0, y0, z0; featureA based on x1, y1, z1; featureB based on x1, y1, z1; ... ; featureB based on xn, yn, zn]
  2. 或者我们可以以某种方式对 window 内的加速度计读数进行平均,这样我们最终只有一个三元组 xa, ya, za('a' 代表 'average'),然后创建一个这样的特征向量:[featureA based on xa, ya, za; featureB based on xa, ya, za].

我不喜欢第二个想法,因为它似乎平均加速度计数据读数,即使是小 windows 可能 导致数据丢失和不充分分类器行为。可能论文作者的意思类似于第一个想法,但我不确定。

我对滑动 windows 的创建方式的理解是否正确(即想法 #1)?

首先,你的问题两部分都是对的,但并不完全。

我会说两件事:

  • 首先,滑动window是为了给时间t的数据一个上下文。根据数据流,你可以把未来放在里面,也可以不放在里面。但是这个想法确实是将接近的数据放在同一个 window 中以创建一个新的数据集,其中每一行都是一个 window。话虽如此,从 window 中提取特征与从 3 个坐标中提取特征不同。例如,您可以尝试计算移动速度(通过使用前一点)。所以这两个选项都是有效的!您将必须从单点(例如极坐标)获得特征,还必须从最后一点获得速度、移动等等……这些都是很好的特征。

  • 每个坐标都可以是一个特征。您不需要压缩矩阵,因为它实际上与您的第一个选项或第二个选项没有任何不同。您的加速度计正在为您提供数据,您可以从中提取特征来制作新数据集,但无论您做什么,最终都会得到一个矩阵。