gpt4 book ai didi

c# - 从多变量时间序列间隔中检测罕见事件

转载 作者:可可西里 更新时间:2023-11-01 08:09:52 24 4
gpt4 key购买 nike

给定传感器状态间隔的时间序列,我如何实现一个分类器,该分类器从监督训练数据中学习以根据状态间隔序列检测事件?为了简化问题,传感器状态被简化为 truefalse

更新:我找到了 this paper (PDF)关于时间间隔的挖掘序列,它解决了类似的问题。 Another paper (Google Docs)关于在多变量时间序列中挖掘层次时间模式采用了一种新颖的方法,但处理的是层次数据。

示例训练数据

以下数据是一个事件的训练示例,表示为随时间变化的图表,其中 /¯¯¯\ 代表一个 true 状态间隔和 \___/ 传感器的 false 状态间隔。

 Sensor   |  Sensor State over time
| 0....5....10...15...20...25... // timestamp
---------|--------------------------------
A | ¯¯¯¯¯¯¯¯¯¯¯¯\________/¯¯¯¯¯¯¯¯
B | ¯¯¯¯¯\___________________/¯¯¯¯
C | ______________________________ // no state change
D | /¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯\_/¯
E | _________________/¯¯¯¯¯¯¯¯\___

事件检测与序列标记与分类

我最初将我的问题概括为两类序列标记问题,但我的类别确实代表了“正常操作”和罕见的“警报事件”,因此我将我的问题改写为事件检测。提供“正常运行”和“报警事件”的训练数据。

为了降低问题的复杂性,我将传感器事件离散化为 bool 值,但事实并非如此。

可能的算法

隐马尔可夫模型似乎是一种可能的解决方案,但它是否能够使用状态区间?如果序列标记器不是解决此问题的最佳方法,我们将不胜感激其他建议。

贝叶斯概率方法

传感器事件会随一天中的不同时间发生显着变化(早上忙碌,晚上安静)。我最初的方法是在几天内测量正常的传感器状态,并按一天中的时间(小时)计算状态概率。传感器状态在不太可能的时间超过“不太可能阈值”的组合概率将指示事件。但如果传感器有噪音,这似乎会引发误报。我还没有实现这个,但我相信这种方法是有值(value)的。

特征提取

矢量状态可以表示为在特定时间发生并持续特定持续时间的状态间隔变化。

struct StateInterval
{
int sensorID;
bool state;
DateTime timeStamp;
TimeSpan duration;
}

例如。进程表中的一些状态区间:

[ {D, true, 0, 3} ]; [ {D, false, 4, 1} ]; ...
[ {A, true, 0, 12} ]; [ {B, true, 0, 6} ]; [ {D, true, 0, 3} ]; etc.

一个好的分类器会考虑状态值区间和最近的状态变化,以确定状态变化的组合是否与类别的训练数据紧密匹配。

编辑:关于如何从多个传感器的警报数据中提取特征以及如何将其与以前的数据进行比较之后的一些想法...

首先计算每个传感器在一天中每个小时的以下数据:

  • 平均状态间隔长度(truefalse 状态)
  • 状态变化之间的平均时间
  • 随时间变化的状态数

然后可以将每个传感器与矩阵中的每个其他传感器进行比较,数据如下:

  • 在传感器 A 之后,传感器 B 变为真实状态所需的平均时间。如果平均值为 60 秒,那么 1 秒的等待会比 120 秒的等待更有趣。
  • 当传感器 A 处于一种状态时,传感器 B 经历的平均状态变化次数

给定两组训练数据,分类器应该能够从这些特征集中确定最有可能分类的类别。

这是一种明智的方法吗?什么是比较这些特征的好算法?


编辑状态变化的方向(false->true vs true-false)很重要,所以任何特征都应该采用考虑到这一点。

最佳答案

一个简单的解决方案是折叠数据的时间方面并将每个时间戳作为一个实例。在这种情况下,传感器的值被视为您的特征向量,其中每个时间步都标有类别 A 或 B 的类值(至少对于标记的训练数据):

   sensors      | class
A B C D E |
-------------------------
1 1 1 0 0 | catA
1 0 0 0 0 | catB
1 1 0 1 0 | catB
1 1 0 0 0 | catA
..

此输入数据被提供给常用的分类算法(ANN、SVM 等),目标是预测未标记时间序列的类别:

   sensors      | class
A B C D E |
-------------------------
0 1 1 1 1 | ?
1 1 0 0 0 | ?
..

降维/特征提取的中间步骤可以改善结果。

显然,这可能不如对序列的时间动态建模那么好,特别是因为隐马尔可夫模型 (HMM) 等技术考虑了各种状态之间的转换。


编辑

根据您在下面的评论,获得目标类别的短暂预测的最佳方法似乎是在预测阶段结束时应用后处理规则,并将分类输出视为一系列连续预测。

它的工作方式是计算类后验概率(即:实例属于每个类标签的概率分布,在二元 SVM 的情况下很容易从决策函数中导出),然后给定一个指定的阈值,您检查预测类别的概率是否高于该阈值:如果是,我们使用该类别来预测当前时间戳,如果不是,则我们保留先前的预测, future 的实例也是如此。这具有为当前预测添加一定惯性的效果。

关于c# - 从多变量时间序列间隔中检测罕见事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3838785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com