我正在为 Android 设备构建一个应用程序,该应用程序需要它通过加速度计数据识别行走噪音和双击噪音之间的区别。我正在尝试使用神经网络解决这个问题。
开始时一切顺利,教它识别噪音中的敲击声,例如站立/坐下和以较慢的速度四处走动。但是当涉及到正常行走时,它似乎从未学习过,即使我向它提供了大量的噪声数据。
我的问题:我的方法是否存在任何严重缺陷?问题是由于缺乏数据吗?
网络
我选择了一个 25 输入 1 输出的多层感知器,我正在使用反向传播对其进行训练。输入是每 20 毫秒的加速度变化,输出范围从 -1(表示不点击)到 1(表示点击)。我已经尝试了几乎所有隐藏输入的组合,但最幸运的是 3 - 10。
我正在使用 Neuroph 的 easyNeurons 进行训练并导出到 Java。
数据
我的总训练数据是大约 50 个双击和大约 3k 噪声。但我也尝试用与双击成比例的噪音来训练它。
数据如下所示(范围从 +10 到 -10):
坐着双击:
快走:
所以重申我的问题:我的方法是否存在任何严重缺陷?我是否需要更多数据才能识别步行和双击之间的区别?还有其他提示吗?
更新
好的,经过大量调整后,我们将基本问题归结为在快步走时能够识别双击。我们可以很好地解决坐着和定期(内部)行走的问题。
快步走
所以这是我先走然后停下,站着不动,然后走,边走边做 5 次双击的一些测试数据。
如果有人对原始数据感兴趣,我链接它以获得最新的(快走)数据here
最佳答案
你坚持使用神经网络吗?如果没有,这里有一个想法:
取一个 0.5 秒的窗口并考虑曲线下的区域(或者由于您的信号是离散的,每个传感器读数的绝对值之和——附图中的红色区域)。您可能会发现当用户走路时该总和很高,而当他们坐着和/或敲击时该总和要低得多。您可以设置一个阈值,超过该阈值您认为在用户行走时拍摄给定的窗口。或者,由于您已标记数据,您可以训练任何二元分类器来区分走路和不走路。
您可能可以通过考虑信号的其他特征来改进您的系统,例如线路的锯齿程度。如果电话放在 table 上,线路几乎是平的。如果用户正在打字,这条线会比较平坦,你会时不时地看到一个尖峰。如果他们在走路,您会看到类似正弦波的东西。
关于android - 识别加速度计模式的神经网络,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11166647/