对x,y进行光滑样条拟合,并进行过拟合优化,最后用Python代码实现优化过程
时间: 2024-04-13 14:29:48 浏览: 161
b样条曲线python代码-样条曲线计算-二次样条曲线实现-三次样条曲线-曲线平滑算法-曲线拟合
5星 · 资源好评率100%
要对 x 和 y 进行光滑样条拟合,并进行过拟合优化,可以使用 Python 中的 scipy 库中的 `UnivariateSpline` 类。以下是一个用 Python 实现的示例代码,展示了如何进行光滑样条拟合和过拟合优化:
```python
import numpy as np
import matplotlib.pyplot as plt
from scipy.interpolate import UnivariateSpline
# 创建 x 和 y 数组
x = np.array([51.06, 51.36, 51.66, 51.96, 52.26, 52.56, 52.86, 53.16, 53.46, 53.76,
54.06, 54.35, 54.65, 54.95, 55.25, 55.55, 55.85, 56.15, 56.45, 56.75,
57.05, 57.35, 57.65, 57.94, 58.24, 58.54, 58.84, 59.14, 59.44, 59.74,
60.04, 60.34, 60.64, 60.94])
y = np.array([1615.26, 1630.18, 1678.08, 1708.63, 1746.93, 1810.04, 1844.46, 1867.12,
1919.33, 1933.67, 1978.56, 2032.35, 2070.21, 2110.23, 2170.32, 2221.67,
2270.58, 2325.94, 2392.92, 2406.97, 2455.02, 2485, 2509.38, 2557.14,
2622.4, 2653.24, 2702.29, 2732.84, 2814.3, 2847.58, 2878.27, 2914.99,
2966.34, 3004.92])
# 进行光滑样条拟合
spline = UnivariateSpline(x, y)
# 设置过拟合优化参数
spline.set_smoothing_factor(0.5) # 调整平滑因子,值越小拟合效果越平滑
# 创建平滑的 x 值
x_smooth = np.linspace(x.min(), x.max(), 200)
# 绘制原始数据和拟合曲线的散点图和曲线图
plt.scatter(x, y, color='blue', label='原始数据')
plt.plot(x_smooth, spline(x_smooth), color='red', label='拟合曲线')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.show()
```
在上述代码中,首先导入所需的库和模块。然后,创建 x 和 y 数组,使用 `UnivariateSpline` 类进行光滑样条拟合。通过调整平滑因子(`set_smoothing_factor`),可以控制拟合曲线的平滑程度,从而进行过拟合优化。最后,创建平滑的 x 值,并绘制原始数据的散点图和光滑样条拟合曲线的曲线图。
您可以根据需要调整代码中的参数和细节,以适应您的具体情况。
阅读全文