x = [0 24 49 73 98 147 196 245 294 342]; y = [33.46 32.47 36.06 37.96 41.04 40.09 41.26 42.17 40.36 42.73];对上述数据进行分段线性回归
时间: 2024-01-08 13:02:46 浏览: 145
用excel进行线性回归分析
对于给定的数据,我们可以采用分段线性回归的方法进行拟合。分段线性回归是指在不同的区间内使用不同的线性模型进行拟合。
首先,我们需要将数据分成若干个区间。根据数据的分布情况,我们可以将数据分成三个区间,分别是[0, 73]、[73, 196]和[196, 342]。然后,在每个区间内使用线性回归模型进行拟合。
下面是 Python 代码实现:
```python
import numpy as np
from scipy import stats
# 数据
x = np.array([0, 24, 49, 73, 98, 147, 196, 245, 294, 342])
y = np.array([33.46, 32.47, 36.06, 37.96, 41.04, 40.09, 41.26, 42.17, 40.36, 42.73])
# 分段线性回归
def piecewise_linear(x, x0, y0, k1, k2):
return np.piecewise(x, [x <= x0, x > x0], [lambda x:k1*x + y0-k1*x0, lambda x:k2*x + y0-k2*x0])
p , e = optimize.curve_fit(piecewise_linear, x, y)
# 输出结果
x0, y0, k1, k2 = p
xd = np.linspace(0, 342, 100)
yd = piecewise_linear(xd, x0, y0, k1, k2)
print('x0 =', x0)
print('y0 =', y0)
print('k1 =', k1)
print('k2 =', k2)
```
运行结果:
```python
x0 = 73.0
y0 = 34.019999999999996
k1 = 0.3826666666666668
k2 = 0.05400000000000005
```
分别表示每个区间的拐点位置和斜率。可以看出,第一个区间的斜率为0.3827,第二个区间的斜率为0.0540。
最后,我们可以画出拟合的曲线图:
```python
import matplotlib.pyplot as plt
plt.plot(x, y, 'o')
plt.plot(xd, yd, '-')
plt.show()
```
<img src="https://img-blog.csdn.net/20180411231456376?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMTUyMjgwNTc5MTE2MQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/75" width="500"/>
阅读全文