我的问题不同于常见的时间序列数据问题。我需要做的是检查未来的时间序列数据是否与我已经认为正确的之前的时间序列数据一致。
简而言之,我需要一个应用于时间序列数据的一类分类器,它具有可变长度(从 110 到 125 点)。
有谁知道任何可以帮助我完成这项任务的库?我通常使用 Python+scikit-learn,但我愿意使用任何其他配置。
我的问题不同于常见的时间序列数据问题。我需要做的是检查未来的时间序列数据是否与我已经认为正确的之前的时间序列数据一致。
简而言之,我需要一个应用于时间序列数据的一类分类器,它具有可变长度(从 110 到 125 点)。
有谁知道任何可以帮助我完成这项任务的库?我通常使用 Python+scikit-learn,但我愿意使用任何其他配置。
除了提到的@Rolf Shorpion 方法之外,还有其他方法。例如,您可以使用深度神经网络,特别是自动编码器(有关教程,请参见此处)。
但是所有纯粹的“数据驱动”方法都有一个重要的问题:如果您在评论中提到的 30 个时间序列的数字是您的训练集的典型数量级,那么结果或多或少会是任意的。如果您不以任何方式定义“一致性”,那么这是一个只有正训练数据的分类问题,其中包含 30 个数据点,每个数据点具有 100 多个特征。
除非您的数据非常非常特殊(例如,所有时间序列都是相同的),否则解决这个问题的自由度太大了。不同的算法(或同一算法的不同参数集)将以非常不同的方式使用这种自由度。因此,当您尝试不同的方法时,您可能会看到非常不同的解决方案。
因此,如果您不想做或多或少的任意实验并在事后从解决方案中进行选择,则必须使用一种方法,在该方法中,您事先以某种方式定义了“符合”的含义。您可以尝试使用传统的时间序列技术来找到适合每个时间序列的通用模型。然后你可以假设“accordance”非常适合这个模型。
或者您可能只是对您的数据进行一些探索性分析,以决定一个可用于检测一致性的简单规则。有很多可能性,如果没有关于应用程序的更多细节,很难确定哪一个是合适的。不过,在这种情况下,将“符合”的决定委托给某个算法似乎不是一个好的选择。
根据您的描述,一个简单的互相关应该可以做到。您正在测试未来的系列点是否与您认为正确的过去系列相关。该测量完全由未来系列和过去系列之间的互相关给出 -
互相关的另一个好处是您可以相应地调整系列的长度,这提供了很大的灵活性。
互相关本身对于您的系统可能还不够,因为它只提供了一种差异度量,您仍然可以为实际的“分类”构建一个模型 - 因为您的输出是二进制的,任何简单的阈值检测器(即如果 xcor > value then 1 else 0) 到一个小型神经网络应该都可以正常工作。
听起来您可能正在寻找“新奇检测”。
为此有一个 scikit 库。它生成一类模型并预测新的观察结果是否适合一类。
为了进一步阅读,我想参考这个链接: Novelty detection scikit-learn 在那里你还可以找到一个使用 SVM 分类器的例子。
正如您(OP)进一步澄清的那样,您已经获得了设备传感器数据。当您知道机器处于良好运行状态时,您的第一个时间序列被记录下来。稍后,您对另一个时间序列进行采样,并且您想知道是否有任何变化。这称为异常检测。
您将时间序列描述为随机的,这意味着存在随机性元素。您可以使用几种有趣的方法来确定这两个系列是由同一过程生成的概率(没有任何变化)。恐怕到目前为止我对您的问题的回答仅适用于特殊情况,并且可能对这项工作来说太复杂了。
一般概念是有一个潜在的概率分布(由“概率密度函数”或 PDF 描述)生成您的时间序列。当机器出现故障时,该 PDF 会发生变化。您测试新发行版是否与旧发行版不同。您应该使用一种完全通用的方法,该方法不假定 PDF 的特定形式(高斯、泊松、Beta 等)。
首先,您始终可以为每个时间序列构建和绘制经验累积分布函数或 ECDF,并直观地比较它们。这需要对“不同”的样子进行定性判断。
为了使其量化,来自经典统计的测试是KS 测试。这是 R 中的单线。这个测试的缺点是,它不是贝叶斯。:) 还有其他问题。话虽如此,我一直使用 KS 测试,因为它又快又简单。
这里有很多警告。您可能希望使用传感器数据的一阶差分(更改)而不是值本身。如果您有多个传感器,您可能还需要使用降维,例如主成分分析 (PCA)。
我更喜欢贝叶斯 AB 测试。这需要您构建应用数据的 PDF 模型。这会生成一个最有可能解释您的数据的 PDF。事实上,它会为 PDF 中的每个参数生成一个 PDF。您可以查看参数中有多少重叠。没有足够的重叠意味着异常。要开始使用贝叶斯概率,我推荐 Python 和PYMC以及贝叶斯黑客书。