使用机器学习进行无标签异常检测

我在特定时间段内追踪多个信号,并将它们与时间戳相关联,如下所示:

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) 请注意,值得尝试为您提到的每个“模式”创建一个独立的检测器。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注