用于检测数据集中的线性行为的算法

时间:2013-07-15 10:31:36

标签: matlab

我已经在一段时间之前发布了关于Algorithm to make a polynomial fit of a part of a data set的问题,并收到了一些建议来做我想做的事情。但是我现在面临另一个问题,我尝试应用答案中提出的想法。 我的目标是找到数据集的最佳线性拟合,其中只有一部分是线性的。

以下是我必须做的一个例子:Data sets

我们有这两个数据集,我必须在虚线左边的数据的线性部分做出线性趋势。红色表示我们有理想的数据集,从开头到虚线都有一个线性部分。蓝色,我们有'有问题'的数据集,有一个平台。粗体部分是我必须用来进行数据线性拟合的部分。

我的问题是我尝试按照上面链接的问题提到:我找到了平滑数据的二阶导数,并查看它不是'足够接近'时的0.但这是我的问题的结果数据集(第一图像)和理想数据集(第二图像):

enter image description here enter image description here

(对不起质量,我不知道它为何如此模糊) 在两幅图像上,我绘制了一阶导数,红色绘制了二阶导数。在第一张图像上,我们看到二阶导数值的峰值。但问题是峰值不是很高,因此难以建立一个阈值来判断该集合是否是线性的......相反,一阶导数的峰值非常高,使得容易看到视觉。

我认为计算一阶导数值的平均值,看看当值与平均值相差太大时就足够了......但是当我取一阶导数值的平均值时看到值与平均值的不同之处,由于峰值存在一种偏移。

如何移除此偏移量以便仅采用右侧的数据的平均值(图像1上看到的不连续性左侧的数据可能是非线性的或者是线性但与峰值的值有不同的值!)有效的峰值?

1 个答案:

答案 0 :(得分:4)

mean运算符(正如您所注意到的)对异常值(峰值)非常敏感。您可能希望使用更强大的估算器,例如median或值的x百分位数(这应该更适合您的情况)。