11-11最小二乘法曲线拟合

参考资料最小二乘拟合的三种算法推导及Python代码

求拟合的4种角度

  1. 从残差平方和最小的角度考虑(MSE),求模拟值和真实值差值平方和的函数,并且对参数求偏导
  2. 多项式拟合:几何角度上看,几个自变量就为几维空间,让数据所在空间和模拟与真实值之差互相垂直(内积为0)
  3. 一元线性拟合,求出β0和β1的表达式最小二乘拟合的三种算法推导及Python代码
  4. 从极大似然法角度,参数是确定的,构造似然函数,让似然函数值达到最大
  5. 从map(最大后验估计角度上看,参数本身也为随机变量)
    在这里插入图片描述在这里插入图片描述

代码(三次拟合)

import numpy as np
import matplotlib.pyplot as plt
#%% generate the dataset
x = np.array([0,5,10,15,20,25,35,40,45,50,55])
y = np.array([0,1.27,2.16,2.85,3.44,3.87,4.15,4.58,4.58,4.62,4.64])
print(x)
#%% calculate the normal equation
#定义矩阵A
x0 = np.zeros(11)+1
x1 = x
x2 = x*x
x3 = x*x*x
A = list(zip(x0,x1,x2,x3))
AT = np.transpose(A)
xx = np.dot(AT,A)
yy = np.dot(AT,y)
C = np.linalg.solve (xx,yy)
print(C)

# a = np.linalg.inv(A).dot(b)

#%% plot the picture
fig, ax = plt.subplots(1, 1, figsize=(6, 3))
ax.scatter(x, y, color='black',label="observed datas")
plt.xlabel("x")
plt.ylabel("y")
plt.grid()
#拟合值
y_sim = np.dot(A,C) 
ax.plot(x, y_sim,label="fitting curve")
#plt.text(30,3,str(round(C[0],4))+"+"+str(round(C[1],4))+'x+'+str(round(C[2],4))+"x^2+"+str(round(C[3],4))+"x^3")
plt.text(30,3,"y={0[0]:.4f}+{0[1]:.4f}x+{0[2]:.5f}x^2+{0[3]:.6f}x^3".format(C))
plt.legend()
plt.show()

一些常见的python基础

功能代码
矩阵的转置np.transpose(A) 或 A.T 或 B = [[A[j][i] for j in range(len(A))] for i in range(len(A[0]))]矩阵的转置
矩阵的行列式np.linalg.det(A)
矩阵乘法(点乘)np.dot(A,B) 矩阵相乘
矩阵的逆np.linalg.inv(A)
矩阵求解Ax=Bnp.linalg.solve(A,B)求解C
向量合并[A,B,C…]或list(zip(A,B,C…))
字符串合并"y={0[0]:.4f}+{0[1]:.4f}x+{0[2]:.5f}x^2” .format© 规定小数点精度 还有用list作为format中的输入Python format 格式化函数 或 用+连接
单位矩阵np.eye(n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

美滋滋(你猜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值