matlab - 检测数据集中线性行为的算法

标签 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 中不连续点左侧的数据可能是非线性的或线性但与右边的值有不同的值!)的峰值?

最佳答案

mean 运算符(如您所见)对异常值(峰值)非常敏感。您可能希望使用更稳健的估算器,例如值的 median 或 x-percentile(这应该更适合您的情况)。

关于matlab - 检测数据集中线性行为的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17652128/

相关文章:

matlab - 无需工具箱即可在 MATLAB 中实现遗传算法

python - Matlab 到 Matplotlib

matlab - 在 Matlab 中使用 imfinfo 函数进行图像压缩

matlab - 从 Matlab 中更改 DISPLAY 变量

matlab - 从 Unix shell 读取 .mat 文件

matlab - Matlab 中的交叉验证和 perfcurv

matlab - 实时音频处理 : audioDeviceReader 'Driver' not working (MATLAB)

arrays - 选定维度上4D阵列的均值

c# - C++ 中的变量变量名

matlab - 将匿名函数定义为 m 文件函数的 4 个输出中的 2 个