传感器数据的二进制分类

Posted

技术标签:

【中文标题】传感器数据的二进制分类【英文标题】:Binary classification of sensor data 【发布时间】:2015-05-13 11:32:33 【问题描述】:

我的问题如下:我需要对来自传感器的数据流进行分类。我已经设法使用 窗口的中位数,然后从该基线中减去值(我想避免负峰值,所以我只使用差值的绝对值)。

现在我需要将事件(= 触发传感器的东西)与基线附近的噪声区分开来:

问题是我不知道使用哪种方法。 我想到了几种方法:

汇总窗口中的值,如果总和高于阈值,则该类应为 EVENT('Integrate and dump') 总结一个窗口中值的差异并获得平均值(它给出类似于一阶导数的东西),如果该值为正且高于阈值设置类 EVENT,否则设置类 NO-EVENT 两者的结合

(不幸的是,这些方法的缺点是我需要猜测阈值并设置窗口大小)

使用从手动分类数据中学习的 SVM(但我不知道如何正确设置此算法:我应该查看哪些特征,例如窗口的中值/平均值?、积分?、一阶导数?.. .)

你有什么建议?有没有更好/更简单的方法来完成这项任务?

我知道存在许多复杂的算法,但我对最好的方法感到困惑 - 请对没有机器学习/DSP背景的新手有点耐心:)

非常感谢您和最诚挚的问候。

【问题讨论】:

【参考方案1】:

评估启发式方法的关键是开发系统行为模型。

例如,您正在监控的物理过程的模型是什么?例如,您是否希望您的样本在时间上具有相关性?

传感器输出的型号是什么?例如,它可以建模为电压的离散线性函数吗?有噪音成分吗?噪声的大小是已知的还是未知但恒定的?

一旦您列出了您对所监控系统的了解,您就可以使用它来评估和决定一个好的分类系统。然后,您还可以估计其准确度,这对于您的分类器输出的消费者很有用。

编辑:

鉴于更详细的描述,我建议先尝试一些可以使用经典技术解决的简单行为模型,然后再转向通用的监督学习启发式。

例如,假设:

基线、事件阈值和噪声幅度都是先验已知的。

底层过程可以建模为马尔可夫链:它有两种状态(关闭和开启),并且它们之间的转换时间呈指数分布。

然后,您可以使用隐马尔可夫模型方法来确定任何给定时间最可能的基础状态。即使噪声参数和阈值未知,您也可以使用 HMM 前向后向训练方法来训练与每个状态的输出相关的参数(例如均值、高斯方差)。

如果您对事件了解得更多,则可以采用更简单的方法:例如,如果您知道事件信号总是达到高于基线 + 噪声的水平,并且事件总是在时间上被一个间隔大于事件本身的宽度,你可以做一个简单的阈值测试。

编辑:

HMM 的经典介绍是 Rabiner's tutorial(copy can be found here)。相关的还有these errata。

【讨论】:

您好,谢谢您的回答。我编辑了我的问题,因为它的表述可能有点不清楚。我只想检测如图所示的事件。这些事件发生的时间不相关,但它们看起来或多或少相同(信号突然上升,在短时间内回到基线后下降)。它们需要与噪声(信号值的波动要小得多)区分开来。您认为有一种简单而可靠的方法可以完成这项工作吗? 嗨!用更具体的东西更新了答案。【参考方案2】:

根据您的描述,正确参数化的移动平均线可能就足够了

尝试了解传感器及其输出。制作一个模型并制作一个模拟器,提供模拟数据,其中包含噪声和所有内容的预期数据 记录大量真实的传感器数据 可视化数据并验证您的假设和模型 注释您的传感器数据 i. e.生成基本事实(您的模拟器应为模拟数据执行此操作) 根据您迄今为止所学的知识提出一种或多种算法 制作一个测试系统,可以根据实际情况验证您的算法并针对之前的运行进行回归 实现您提出的算法并根据实际情况运行它们 尝试从记录的数据中了解误报和误报(并尝试调整您的模拟器以重现它们) 调整您的算法

其他一些提示

您可以在阈值上实施滞后以避免弹跳 您可以实施延迟以避免弹跳 如果实施去抖动器或低通滤波器,请注意延迟 您可以实现多种算法和投票 为了测试相对改进,您可以对大量未注释的数据进行回归测试。然后你检查翻转检测只是为了发现性能增加/减少

【讨论】:

感谢您的提示,这似乎是一个很好的发展议程。我假设生成基本事实是获取标记数据以获得训练和测试算法的黄金标准。

以上是关于传感器数据的二进制分类的主要内容,如果未能解决你的问题,请参考以下文章

基于MATLAB的光纤通信仿真

具有二进制数据的朴素贝叶斯分类器

从音频脉冲中获取二进制数据

过采样:Python 中二进制和分类数据的 SMOTE

使用python将数据帧从十六进制转换为二进制

如何检测 C# 中的负十六进制值?