如何对一组数据进行分段回归分析?

[图片] 如图所示,我要对这个曲线进行回归分析,使用python建立了一元二次函数进行分析,但是一个二次函数不能覆盖整个数据,我想怎么才能够找到一个个…
关注者
62
被浏览
83,238

6 个回答

现在不去讨论题主有没有更好的拟合方法,就用题主想要的“分两段的一元二次函数”来拟合。

设这两段二次函数的解析式分别为 a_1x^2+b_1x+c a_2x^2+b_2x+c ,分界点为 x=x_0

那么这个函数整体可以表达为

f(x) = (a_1x^2+b_1x+c_1) (1-u(x-x_0)) + (a_2x^2+b_2x+c) u(x-x_0)

其中 u(x)=\left\{ \begin{array}{rl} 1, & \text{if } x \ge 0 \\ 0, & \text{if } x < 0 \end{array} \right. 为阶跃函数。

设题主已经测得的数据点为 (x_i,y_i), 1 \le i \le n 。误差函数不妨就取最小二乘误差,即 E=\sum_{i=1}^n [y_i-f(x_i)]^2 ,其自变量为 f 中所有的参数( a_1,b_1,c_1,a_2,b_2,c_2,x_0 )。题主下面要做的事情就是求得这组参数的值以使得误差函数最小化了。

不过,因为阶跃函数有间断点,上述误差函数最小化起来有困难。

为了解决这个问题,可以用sigmoid函数 \sigma(x) = \frac{1}{1+\text{e}^{-wx}} 来代替阶跃函数 u(x)

这里引进了一个新的参数 w>0 ,它控制的是sigmoid函数的陡峭程度,当 w \rightarrow + \infty 时sigmoid函数就变成了阶跃函数。不过sigmoid函数处处可导,优化起来就比较简便了。