任意数列的回归测试

我正在尝试开发一种方法来对数列进行回归测试。

我的测试系统会为每个系统版本生成大量的数字(例如高度、宽度、深度等)。这些数字在不同版本之间以未知的方式变化。给定一系列“良好”版本和一个“新”版本,我希望找出那些最异常的序列。

示例:

“良好”版本:

version    width   height   depth   1        123      43      302    2        122      44      304   3        120      46      300   4        124      45      301

“新”版本:

   5        121      60      305

在这种情况下,我显然希望找到高度序列,因为数值60比宽度或深度更为显眼。

我目前的方法是计算每个良好案例序列的平均值和标准差,对于新版本的数字,计算这个数字属于该序列的概率(基于已知的平均值和标准差)。这种方法…效果一般。

我的序列中的数字不一定是围绕平均值的正态分布,而是常常相当恒定,且仅在某些情况下产生异常值,这些异常值看起来也相当恒定,例如10, 10, 10, 10, 10, 5, 10, 10, 10, 5, 10, 10, 10。在这种情况下,仅基于平均值和标准差,数值10不会100%可能属于该序列,而数值5则相当不可能。

我考虑过使用直方图方法,但犹豫不决,先在这里询问。使用直方图的问题在于我需要为每个序列存储大量信息(相较于仅存储平均值和标准差)。

我接下来考虑的方面是,我确信这类任务并非新鲜事,可能已经有适合我情况的解决方案;但在我的研究中并未找到太多相关内容。

我发现了一个名为PyBrain的库,乍一看它似乎能处理数列,然后显然尝试通过模拟神经网络进行分析。我不确定这是否适合我(而且似乎我需要为每个数列存储大量数据,如完整的神经网络)。

所以我的问题是:

是否存在一种技术、算法或科学学科可以帮助我分析数列以发现异常(在最后一个值中)?最好是每序列只存储少量数据 😉

对于具体实现,我更倾向于使用Python,但也欢迎其他语言的建议。


回答:

你可以使用一种称为高斯过程(GP)的回归技术来学习曲线,然后将高斯过程应用于序列中的下一个示例。

由于GP不仅能为目标提供一个估计值,还能提供一个置信度,你可以基于置信度设定阈值来确定什么是异常值。

要实现这一点,存在各种工具箱(scikits.learn, shogun,…),但最简单的可能是GPy。一个1维回归的示例,你可以调整以完成你的任务,在以下笔记本中有很好的描述:

http://nbviewer.jupyter.org/github/SheffieldML/notebook/blob/master/GPy/basic_gp.ipynb

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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