神经网络识别加速度计模式

Ham*_*ren 9 android neural-network

我正在为Android设备构建一个应用程序,要求它通过加速计数据识别行走噪音和双击它之间的差异.我正在尝试使用神经网络来解决这个问题.

一开始它很顺利,教它识别噪音的水龙头,比如站起来/坐下来,以较慢的速度走来走去.但是当谈到正常行走时,即使我用很大比例的噪音数据喂它也似乎从未学过.

我的问题:我的方法有任何严重的缺陷吗?问题是基于缺乏数据吗?

网络

我选择了一个25输入1输出的多层感知器,我正在用反向传播进行训练.输入是每20ms加速度的变化,输出范围从-1(对于无敲击)到1(对于敲击).我已经尝试了几乎所有隐藏输入的组合,但最幸运的是3-10.

我正在使用Neuroph的easyNeurons进行培训并导出到Java.

数据

我的总训练数据大约是50个双击和大约3k噪音.但我也尝试用一定比例的噪音来训练它以达到双击.

数据看起来像这样(范围从+10到-10):

坐式双击: 坐在双水龙头上,相当容易确定.


快步走: 快走和双击,不是那么容易

所以重申一下我的问题:我的方法存在严重缺陷吗?我是否需要更多数据来识别步行和双击之间的区别?还有其他提示吗?

更新

好吧经过多次调整后我们已经将基本问题归结为能够识别双击同时快步走.坐着和经常(内部)步行,我们可以解决相当不错的.

快步走 快步走

所以这是我的一些测试数据,我先行走然后停下来,站着不动,然后走路,在我走路时做5个双击.

如果有人有兴趣的原始数据,我挂它最新的(快走)的数据在这里

use*_*913 3

您是否考虑过“快走”和“快走+双击”信号可能过于相似而无法仅使用加速度计数据来区分?精确度可能根本不可能达到一定程度以上。

否则,神经网络可能是您的数据的不错选择,并且仍然有可能从中获得更好的性能。

这篇非常有用的论文(http://yann.lecun.com/exdb/publis/pdf/lecun-98b.pdf)建议您对数据集进行白化,使其具有零均值和单位协方差。

另外,由于您的问题是分类问题,因此您应该确保使用交叉熵标准(http://arxiv.org/pdf/1103.0398v1.pdf)而不是 RMSE 来训练网络。(我不知道 Neuroph 是否支持交叉熵。)

正如其他海报所建议的,您可以尝试的另一个相对简单的事情是转换您的数据。使用 FFT 或 DCT 将数据转换到频域是时间序列分类的相对标准方法。

您还可以尝试在不同大小的窗口上训练网络并对结果求平均值。

如果你想尝试一些更困难的神经网络架构,你可以看看时间延迟神经网络(只需谷歌一下这篇论文),它在其结构中考虑了多个窗口。使用 Torch 库 (http://www.torch.ch/) 之一来实现这一点应该相对简单,但将网络导出到 Android 环境可能会很困难。

最后,在时间序列数据中获得更好分类性能的另一种方法是考虑相邻标签之间的关系。条件神经场(http://code.google.com/p/cnf/ - 注意:我从未使用过此代码)通过将神经网络集成到条件随机场中来实现此目的,并且根据您实际的行为模式数据,可能会做得更好。