转载请注明出处
一元多项式拟合
若我们有n个点
我希望用一个m阶多项式来拟合以上的点
使得二乘误差最小:
即
方法
记
则
是最优解的必要条件为。我们令上式对求导并令导数等于零得到:
写成矩阵的形式:
若我们记
则
此时我们有
多元多项式拟合
多元多项式拟合与上面的一元多项式拟合非常相似,唯一的不同在于我们如何构造和矩阵。若记我们需要拟合的点为,我们希望找到一个函数 其中,使得
这里损失函数同样为二乘误差
方法
我们只需要将和矩阵分别构造为:
其余与一元多项式拟合类似。
代码
我们提供一个二元高阶多项式拟合的python3代码供参考,输入的x,y,z为一维np.array,order为一个整数;输出为拟合的函数和相应的参数。
# two-variable high-order regression
def regression(x,y,z,order):
# X.A=Y
# Step 1: Create X
X = np.ones_like(x)
for i in range(order):
for j in range(order):
tmp = np.zeros(x.shape)
tmp = x**i*y**j
if i+j!=0:
X = np.vstack((X,tmp))
X = X.T
print(X)
Y = z
A = np.linalg.inv(X.T.dot(X)).dot(X.T).dot(Y)
def function(x,y):
tmp = 0
for i in range(order):
for j in range(order):
tmp += A[i*order+j]*x**i*y**j
return tmp
return function,A
补充
这个问题可以泛化为求超定方程组的最小二乘解:
对于方程组,,当(方程组中方程的个数多于自变量的个数),称此方程组为超定方程组。
记,称使最小的解为方程组的最小二乘解。
则我们可以证明为方程组的最小二乘解的充要条件为:
是方程组的解。
网友评论