正交多项式最小二乘拟合
时间: 2024-12-31 14:24:36 浏览: 5
### 使用正交多项式进行最小二乘拟合
#### 正交多项式的定义及其优势
正交多项式是一类特殊的多项式集合,其成员在特定区间内相互垂直(即积分积分为零),这使得它们非常适合用于数值逼近和数据分析。当应用于最小二乘拟合时,由于这些多项式彼此独立,因此能够更有效地减少计算复杂度并提高模型稳定性。
对于不同形状的区域(如圆形、六边形等),存在专门设计的正交多项式集[^3]。例如,在光学领域常用的Zernike多项式就是在单位圆盘上具有良好的性质;而在其他几何结构下的应用,则可能涉及到不同的构造方式。
#### 实现过程概述
为了完成基于正交多项式的最小二乘拟合任务,通常遵循以下几个方面的工作:
- **选择合适的正交基底**:根据待处理数据的空间分布特点选取最恰当类型的正交多项式;
- **构建目标函数**:建立一个衡量预测值与真实观测值差异程度的目标函数;
- **求解最优参数向量**:通过调整各阶次系数使上述提到的目标函数取极小值;
- **验证结果合理性**:对比原始样本点同回归曲线间的偏差大小评估拟合效果的好坏。
下面将以Python为例展示具体的编程实践步骤。
#### Python代码实例
```python
import numpy as np
from scipy.special import eval_legendre # 导入Legendre多项式库
def generate_orthogonal_polynomials(x, n_max):
"""生成指定区间的正交多项式"""
P = []
for i in range(n_max + 1):
p_i = eval_legendre(i, x) # 计算第i级Legendre多项式的值
P.append(p_i)
return np.array(P).T
def least_squares_fit(X, y, degree=5):
"""
对输入特征X采用正交多项式做最小二乘拟合
参数:
X (numpy.ndarray): 自变量数组
y (numpy.ndarray): 因变量数组
degree (int): 所需最高幂次,默认为五次
返回:
tuple: 包含两个元素的结果元组,
第一个是最佳拟合得到的一系列权重w*,
另外一个是对应的均方根误差rmse.
注意事项:
- 需要确保传入的数据已经过预处理,比如标准化操作。
- 如果自变量维度大于一,则应先将其映射至单维空间再执行此算法。
"""
Phi = generate_orthogonal_polynomials(X, degree)
w_star = np.linalg.inv(Phi.T @ Phi) @ Phi.T @ y # 求解正规方程获取最优权值
predictions = Phi @ w_star # 利用所得权值得到最终预测输出
rmse = np.sqrt(np.mean((predictions - y)**2)) # 计算RMSE评价指标
return w_star, rmse
if __name__ == "__main__":
# 测试用例准备
N = 100
x_test = np.linspace(-1, 1, num=N)
noise = np.random.normal(scale=.1, size=(N,))
true_func = lambda t: 3*t**4 - 2*t**2 + .7 # 设定理论真值表达式
y_noisy = true_func(x_test) + noise # 添加随机噪声模拟实际情况
weights, error_metric = least_squares_fit(x_test, y_noisy, degree=8)
print(f"Optimal Weights:\n{weights}")
print(f"\nRoot Mean Squared Error: {error_metric:.6f}")
```
这段程序首先导入必要的科学计算包,并定义了一个辅助函数`generate_orthogonal_polynomials()`用来创建一系列Legendre型别的正交多项式。接着实现了核心功能——`least_squares_fit()`, 它接收一组训练样例以及期望的最大次数作为输入参数,返回经过学习后的参数估计值还有性能评测得分。最后部分提供了一段简单的测试脚本供读者直观感受整个流程的效果。
阅读全文