我正在跟踪一段时间内的多个信号,并将它们与时间戳相关联,如下所示:
t0 1 10 2 0 1 0 ...
t1 1 10 2 0 1 0 ...
t2 3 0 9 7 1 1 ... // pressed a button to change the mode
t3 3 0 9 7 1 1 ...
t4 3 0 8 7 1 1 ... // pressed button to adjust a certain characterstic like temperature (signal 3)
其中 t0 是标记,1 是信号 1 的值,10 是信号 2 的值,依此类推。
在该特定时间段内捕获的数据应视为正常情况。现在应该可以检测到与正常情况的显着偏差。通过显着的推导,我并不是指一个信号值仅更改为跟踪阶段期间未见过的值,而是指许多值发生了尚未相互关联的更改。我不想对规则进行硬编码,因为将来可能会添加或删除更多信号,并且可能会实现具有其他信号值的其他“modi”。
这可以通过某种机器学习算法来实现吗?如果发生小的推导,我希望算法首先将其视为对训练集的微小更改,如果将来多次发生,则应该“学习”。主要目标是检测更大的变化/异常。
我希望我能足够详细地解释我的问题。预先感谢。
您可以计算特征空间中的最近邻居,并设置一个阈值,允许其距离测试点多远才不会出现异常。
假设您在“特定时间段”内有 100 个值
因此您将 100 维特征空间与训练数据(不包含异常)一起使用
如果您获得要测试的新数据集,您可以计算 (k) 个最近邻并计算特征空间中的(例如欧几里得)距离。
如果该距离大于某个阈值,则为异常。 为了优化你需要做的是找到一个好的 k 和一个好的阈值。例如。通过网格搜索。
(1) 请注意,只有当您的数据具有固定的起点和终点时,这样的方法可能才有效。否则你将需要大量的数据,甚至它的性能也不会那么好。
(2) 注意应该值得尝试为您在问题中提到的每个“模式”创建一个自己的检测器。