拟合算法
拟合算法
与插值算法不同,拟合算法不要求曲线严格经过所有数据点,而是寻求一个函数(曲线),使得该曲线在某种准则下与所有数据点的总体误差最小。拟合的核心目标是通过对已有数据特征拟合构建最佳数学模型,广泛应用于趋势预测、参数估计等领域。
一、与插值的区别
方法 | 特点 | 适用场景 |
---|---|---|
插值 | 曲线必须经过所有样本点,易受龙格现象影响 | 数据精确、样本量少 |
拟合 | 曲线无需经过所有点,通过最小化误差平方和寻找全局最优解 | 数据含噪声、趋势分析 |
当样本点过多时,高阶插值多项式会出现震荡现象,而拟合算法通过低阶函数(如线性、指数函数)能更稳定地反映数据趋势。
二、原理
1. 数学模型
设样本点为 \((x_i, y_i), i = 1, 2, \ldots, n\),拟合曲线为 \(y = kx + b\),目标是最小化误差平方和: \[ \min_{k,b} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 \quad \text{其中} \quad \hat{y}_i = kx_i + b \]
2. 参数求解
通过求偏导并令导数为零,可得闭合解: \[ k = \frac{n \sum x_i y_i - \sum x_i \sum y_i}{n \sum x_i^2 - (\sum x_i)^2}, \quad b = \frac{\sum x_i^2 \sum y_i - \sum x_i \sum x_i y_i}{n \sum x_i^2 - (\sum x_i)^2} \]
3. 拓展
多项式线性,如二次函数等: \[ \quad \hat{y}_i = kx_i + kx_i^2 + b \]
三、拟合优度评价
1. 判定系数 \(R^2\)
- 总体平方和(SST):反映数据总波动
\[ SST = \sum_{i=1}^n (y_i - \overline{y})^2 \] - 误差平方和(SSE):反映拟合误差
\[ SSE = \sum_{i=1}^n (y_i - \hat{y}_i)^2 \] - 回归平方和(SSR):反映模型解释的波动
\[ SSR = \sum_{i=1}^n (\hat{y}_i - \overline{y})^2 \]
拟合优度:
\[ R^2 = \frac{SSR}{SST} = 1 -
\frac{SSE}{SST} \]
- $ R^2 \(,越接近1说明拟合效果越好。
- **注意**:\) R^2 $ 仅适用于线性参数模型(如 $ y = a + bx^2 $
视为线性,因其对参数 (a,b) 为线性)。
四、MATLAB实现
1. 代码示例
1 |
|
2. 拟合工具箱(cftool)
输入 cftool
调用MATLAB拟合工具箱,支持多种函数类型(多项式、指数、自定义方程),自动计算参数及拟合优度。
五、应用
案例1:美国人口预测
使用Logistic模型拟合历史数据: \[ x(t) = \frac{x_m}{1 + \left( \frac{x_m}{3.9} - 1 \right) e^{-r(t-1790)}} \] 通过非线性最小二乘法估计参数 \(x_m\) 和 \(r\),预测未来30年人口趋势。
案例2:鱼类生长模型
对鲨鱼体长-体重数据采用指数和正弦函数拟合,通过SSE选择最优模型: \[ \text{体长增长方程:} \quad y = 69.32e^{-0.004x} \quad (R^2 = 0.9704) \]
六、总结
- 适用场景:数据含噪声、需提取整体趋势、变量间关系复杂时优先选用拟合。
- 模型选择:优先线性参数模型以利用 \(R^2\) 评价,非线性模型直接比较SSE。
- 工具推荐:MATLAB cftool可快速实现多函数拟合与可视化。