将利用多输入的线性回归模型实现多项式的拟合。使用最小二乘法进行求解,并可视化拟合的结果。
实值输入: x
真实的函数: sin?(2πx)
观测值: t=sin?(2πx)+Gaussian Noise
训练集合,其中包括 N 个样本 (x(n),t(n)),其中 n=1,…,N.
import scipy as sp from scipy.optimize import leastsq
# 目标函数 def real_func(x): return np.sin(2*np.pi*x) # 多项式 def fit_func(p, x): f = np.poly1d(p) return f(x) # 残差 def residuals_func(p, x, y): ret = fit_func(p, x) - y return ret
# 十个点 x = np.linspace(0, 1, 10) x_points = np.linspace(0, 1, 1000) # 加上正态分布噪音的目标函数的值 y_ = real_func(x) y = [np.random.normal(0, 0.1) + y1 for y1 in y_] def fitting(M=0): """ M 为多项式的次数 """ # 随机初始化多项式参数 p_init = np.random.rand(M + 1) # 最小二乘法 p_lsq = leastsq(residuals_func, p_init, args=(x, y)) print('Fitting Parameters:', p_lsq[0]) # 可视化