用python写出三次曲线模型的最小二乘法要求输出模型表达式并分别计算每个模型的RMSE
以下是使用python实现三次曲线模型的最小二乘法的代码:
import numpy as np
import matplotlib.pyplot as plt
# 生成数据
x = np.array([1, 2, 3, 4, 5])
y = np.array([1.2, 3.5, 5.3, 8.2, 10.1])
# 最小二乘法拟合三次曲线模型
n = len(x)
x_sum = sum(x)
x2_sum = sum(x**2)
x3_sum = sum(x**3)
x4_sum = sum(x**4)
y_sum = sum(y)
xy_sum = sum(x*y)
x2y_sum = sum(x**2*y)
A = np.array([[n, x_sum, x2_sum], [x_sum, x2_sum, x3_sum], [x2_sum, x3_sum, x4_sum]])
B = np.array([y_sum, xy_sum, x2y_sum])
a, b, c = np.linalg.solve(A, B)
# 输出拟合的三次曲线模型
print("拟合的三次曲线模型为: y = {}x^3 + {}x^2 + {}x".format(a, b, c))
# 计算RMSE
y_pred = a*x**3 + b*x**2 + c*x
rmse = np.sqrt(sum((y - y_pred)**2) / (n - 3))
print("RMSE为: {}".format(rmse))
# 绘制拟合曲线和原始数据散点图
plt.scatter(x, y)
plt.plot(x, y_pred, color='r')
plt.show()
其中,最小二乘法的过程利用了numpy中的np.linalg.solve函数求解线性方程组。计算RMSE时,需要注意自变量个数为3,需要减去3而不是2。最后,通过matplotlib库绘制了拟合曲线和原始数据散点图。
原文地址: https://www.cveoy.top/t/topic/bIrq 著作权归作者所有。请勿转载和采集!