拟合分段线性但有噪声的数据的可靠方法是什么?
我正在测量一个信号,它由几个几乎线性的部分组成。我想将几行原子地拟合到数据中以检测过渡。
数据集由几千个点组成,包含1-10个细分,而我知道细分的数量。
这是我想自动执行的示例。
拟合分段线性但有噪声的数据的可靠方法是什么?
我正在测量一个信号,它由几个几乎线性的部分组成。我想将几行原子地拟合到数据中以检测过渡。
数据集由几千个点组成,包含1-10个细分,而我知道细分的数量。
这是我想自动执行的示例。
Answers:
我天真地尝试了两种方法(仅使用3个细分)。肯定会有更好的方法。
, 等等。向右延伸A和向左延伸B找出它们相交的位置;向右扩展B和向左扩展C以找出它们相交的位置,等等。恭喜,您现在有了一个连续且分段的线性模型来存储数据。
(几年后)分段线性函数是次数为1的样条曲线,可以告诉大多数样条曲线拟合器。
例如,scipy.interpolate.UnivariateSpline可以使用k=1
和一个平滑参数运行s
,您必须使用它和平滑参数-参见
scipy-interpolation-univariate-splines。
在Matlab中,查看
如何选择结。
补充:找到最佳结并不容易,因为可能存在许多局部最优值。取而代之的是,给UnivariateSpline一个target s
,误差之和为^ 2,然后让它确定结数。拟合后,get_residual()
将获得误差的实际总和^ 2和get_knots()
结。微小的变化s
可能会大大改变结,特别是在高噪声-ymmv中。
该图显示了针对各种的随机分段线性函数+噪声的拟合s
。
有关分段常数的拟合,请参见“ 步长检测”。可以用于pw linear吗?不知道 通过区分嘈杂的数据开始会增加噪声,这是错误的。
其他测试功能和/或与论文或代码的链接也将受到欢迎。几个链接:
以节为参数的分段线性回归
线性样条线对结的放置位置非常敏感,
用于三次回归样条线的结选择
这是一个棘手的问题,大多数人只是通过反复试验来选择结。
越来越流行的一种方法是使用惩罚回归样条。
optimal k lines
= optimal k - 1 lines up to some x
+ cost of the last line x to the end
over x (all x in theory, nearby x in practice)
动态编程非常聪明,但是可以胜任蛮力+启发式方法吗?
参见麻省理工学院6.006分校的Erik Demaine 撰写的出色课程笔记,
算法简介以及
google 分段线性回归和
John Henry综合征。