我在特定时间段内追踪多个信号,并将它们与时间戳相关联,如下所示:
t0 1 10 2 0 1 0 ...t1 1 10 2 0 1 0 ...t2 3 0 9 7 1 1 ... // 按下按钮更改模式t3 3 0 9 7 1 1 ...t4 3 0 8 7 1 1 ... // 按下按钮调整某个特性,如温度(信号3)
其中t0是时间戳,1是信号1的值,10是信号2的值,依此类推。
在该特定时间段内捕获的数据应被视为正常情况。现在需要检测与正常情况有显著偏差的情况。我所说的显著偏差并不是指一个信号值只是变为追踪阶段未见过的值,而是指许多值发生变化,这些值之前未相互关联。我不想硬编码规则,因为未来可能会添加或删除更多信号,并且可能实现其他具有不同信号值的“模式”。
这可以通过某种机器学习算法实现吗?如果发生小的偏差,我希望算法首先将其视为对训练集的轻微变化,如果未来多次发生,则应“学习”这种变化。主要目标是检测较大的变化/异常。
希望我能详细解释我的问题。提前感谢。
回答:
您可以计算特征空间中的最近邻,并设置一个阈值,规定测试点与最近邻的距离允许有多远而不被视为异常。
假设您在“特定时间段”内有100个值
那么您可以使用100维的特征空间来表示您的训练数据(这些数据不包含异常)
当您获得一个新的数据集要测试时,您计算(k)个最近邻,并计算特征空间中的(例如欧几里得)距离。
如果该距离大于某个阈值,则被视为异常。为了优化,您需要找到合适的k值和阈值。例如,可以通过网格搜索来实现。
(1) 请注意,像这样的方法可能只有在数据具有固定的起点和终点时才有效。否则,您将需要大量数据,即使这样,效果也不会很好。
(2) 请注意,值得尝试为您提到的每个“模式”创建一个独立的检测器。