给定传感器状态间隔的时间序列,如何实现分类器,该分类器从监督的训练数据中学习以基于状态间隔序列来检测事件?为简化问题,传感器状态将减少为true
或false
。
更新:我在采集时间间隔序列上找到了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 | _________________/¯¯¯¯¯¯¯¯\___
我最初将我的问题概括为一个两类序列标签问题,但我的类别确实代表了“正常操作”和罕见的“警报事件”,因此我将我的问题重新定义为事件检测。培训数据可用于“正常操作”和“警报事件”。
为了减少问题的复杂性,我将传感器事件离散化为布尔值,但不一定是这种情况。
隐藏马尔可夫模型似乎是一种可能的解决方案,但是它能够使用状态间隔吗?如果序列标签不是解决此问题的最佳方法,那么我们将不胜感激。
传感器活动会因时间而异(早上很忙,晚上很安静)。我最初的方法是在几天内测量正常的传感器状态,并按时间(小时)计算状态概率。传感器状态在不可能的一小时超过“不可能阈值”的组合概率将表明事件。但是,如果传感器有噪音,这似乎会引起误报。我还没有实现这个,但我相信这种方法是有价值的。
矢量状态可以表示为在特定时间发生并持续特定持续时间的状态间隔变化。
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.
一个好的分类器会考虑状态值区间和最近的状态变化,以确定状态变化的组合是否与一个类别的训练数据紧密匹配。
编辑:关于如何从多个传感器的警报数据中提取特征以及如何将其与以前的数据进行比较后的一些想法......
首先计算每天每小时的每个传感器的以下数据:
true
和false
个状态)然后可以将每个传感器与矩阵中的每个其他传感器进行比较,其数据如下:
给定两组训练数据,分类器应该能够从这些特征集中确定最可能的分类类别。
这是一种明智的方法,比较这些功能会有什么好的算法吗?
修改:状态更改的方向(false->true
vs true-false
)非常重要,因此任何功能都应考虑到这一点。
答案 0 :(得分:7)
一个简单的解决方案是折叠数据的时间方面,并将每个时间戳作为一个实例。在这种情况下,传感器的值被认为是您的特征向量,其中每个时间步都标有类别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的情况下很容易从决策函数中导出),然后给出指定的阈值,你检查预测类的概率是否高于该阈值:如果是,我们使用该类来预测当前时间戳,如果不是,那么我们保持先前的预测,对于未来的实例也是如此。这具有为当前预测增加一定惯性的效果。
答案 1 :(得分:4)
这听起来不像分类问题。分类器实际上并不是要考虑“状态变化的组合”。这听起来像序列标签问题。研究使用隐马尔可夫模型或条件随机场。您可以在http://leon.bottou.org/projects/sgd找到后者的有效实现。
修改: 我已经仔细阅读了你的问题,我不认为HMM是最好的模型,因为你想要做什么功能。它会炸毁你的状态空间,并且可能会导致推理难以处理。你需要一个更具表现力的模型。你可以看看动态贝叶斯网络。它们通过允许状态空间以因式形式表示来推广HMM。凯文墨菲的论文是我遇到的最全面的资源。
我仍然会喜欢CRF。作为一个容易开始的地方,定义一个时间和每个传感器读数作为每个观察的特征并使用bigram特征函数。您可以从中看到它的执行方式并增加功能的复杂性。我会开始简单的。我认为你低估了你的一些想法的实施难度。
答案 2 :(得分:1)
为什么重新发明轮子?查看TClass
如果不能为你剪掉它,你会发现还有很多指针。我希望这会有所帮助。