任意数列的回归测试

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

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

示例:

“良好”版本:

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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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