最小二乘法及其python实现详解

  • Post category:Python

下面是详细讲解“最小二乘法及其Python实现详解”的完整攻略。

最小二乘法

最小二乘法是一种常用的数学方法,用于拟合数据点。该方法通过寻一条直线或曲线,使得该直线或曲线与数据点的距离平方和最小,从而得到最佳拟合结果。

下面是一个使用最小二乘法拟合一条直线的Python示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 6, 8])

A = np.vstack([x, np.ones(len(x))]).T
m, c = np.linalg.lstsq(A, y, rcond=None)[0]

plt.plot(x, y, 'o', label='Original data', markersize=10)
plt.plot(x, m*x + c, 'r', label='Fitted line')
plt.legend()
plt.show()

上述代码中,首先导入了numpy和matplotlib库。

然后,定义了两个数组x和y,分别表示数据点的x坐标和y坐标。

接着,使用np.vstack函数将x和一个全为1的数组垂直堆叠,得到一个2×5的矩阵A。

然后,使用np.linalg.lstsq函数求解线性方程组,得到最佳拟合直线的斜率m和截距c。

最后,使用plt.plot函数绘制原始数据点和最佳拟合直线,并使用plt.legend函数添加图例。

下面是一个使用最小二乘法拟合一条二次曲线的Python示例:

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1, 2, 3, 4, 5])
y = np.array([2, 3, 5, 6, 8])

A = np.vstack([x**2, x, np.ones(len(x))]).T
a, b, c = np.linalg.lstsq(A, y, rcond=None)[0]

plt.plot(x, y, 'o', label='Original data', markersize=10)
plt.plot(x, a*x**2 + b*x + c, 'r', label='Fitted curve')
plt.legend()
plt.show()

上述代码中,首先导入了numpy和matplotlib库。

然后,定义了两个数组x和y,分别数据点的x坐标和y坐标。

接着,使用np.vstack函数将x的平方、x和一个全为1的数组垂直堆叠,得到一个3×5的矩阵A。

然后,使用np.linalg.lstsq函数求解线性方程组,得到最佳拟合二次曲线的系数a、b和c。

最后,使用plt.plot函数绘制原始数据点和最佳拟合二次曲线,并使用plt.legend函数添加图例。

最小二乘法的应用

最小二乘法不仅可以用于拟合一条直线,还可以用于拟合多项式曲线、指数曲线等。此外,最小二乘法还可以用于数据降维、信号处理、图像处理等领域。

总结

最小二乘法是一种常用的数学方法,用于拟合数据点。Python中可以使用numpy库中的np.linalg.lstsq函数实现最小二乘法。在实现过程中,需要将数据点的x坐标和y坐标分别存储在两个数组中,并使用np.vstack函数将x的幂次、x和一个全为1的数组垂直堆叠,得到一个矩阵A。然后,使用np.linalg.lstsq函数求解线性方程组,得到最佳拟合直线或曲线的系数。最后,使用matplotlib库中的plt.plot函数绘制原始数据点和最佳拟合直线或曲线,并使用plt.legend函数添加图例。