Matplotlib线性拟合

Matplotlib线性拟合

参考:matplotlib linear fit

在数据分析和可视化中,线性拟合是一种常见的技术,用于找到数据集中点的最佳拟合直线。Matplotlib是一个强大的Python绘图库,可以用来绘制线性拟合图形。本文将介绍如何使用Matplotlib进行线性拟合。

创建简单的散点图

首先,我们需要创建一些数据点并将它们可视化为散点图。下面是一个简单的示例代码:

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
x = np.arange(0, 10, 1)
y = 2 * x + 1 + np.random.randn(10) * 2

# 绘制散点图
plt.scatter(x, y)
plt.show()

Output:

Matplotlib线性拟合

运行以上代码,我们将得到一幅散点图,展示了随机生成的数据点。

使用线性回归拟合数据

接下来,我们将使用线性回归拟合这些数据点,并绘制最佳拟合直线。下面是示例代码:

from numpy.polynomial.polynomial import polyfit
import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
x = np.arange(0, 10, 1)
y = 2 * x + 1 + np.random.randn(10) * 2

# 使用多项式拟合数据
b, m = polyfit(x, y, 1)

# 绘制散点图
plt.scatter(x, y)

# 绘制最佳拟合直线
plt.plot(x, b + m * x, color='red')
plt.show()

Output:

Matplotlib线性拟合

在上面的代码中,我们使用polyfit函数拟合数据,并在图中绘制了最佳拟合直线。

添加更多数据点

现在,让我们添加更多的数据点,并观察线性拟合的效果。以下是示例代码:

import matplotlib.pyplot as plt
import numpy as np

# 生成更多随机数据
x = np.arange(0, 20, 2)
y = 2 * x + 1 + np.random.randn(10) * 2

# 使用线性回归拟合数据
b, m = polyfit(x, y, 1)

# 绘制散点图
plt.scatter(x, y)

# 绘制最佳拟合直线
plt.plot(x, b + m * x, color='red')
plt.show()

运行以上代码,我们可以看到随着数据点数量的增加,线性拟合效果会变得更加明显。

考虑数据的不确定性

有时候,我们的数据可能会有一定的不确定性,因此线性拟合并不总是完美的。为了更好地展示这一点,让我们添加一些噪声到数据中,并重新进行线性拟合。以下是示例代码:

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据并添加噪声
x = np.arange(0, 10, 1)
y = 2 * x + 1 + np.random.randn(10) * 5

# 使用线性回归拟合数据
b, m = polyfit(x, y, 1)

# 绘制散点图
plt.scatter(x, y)

# 绘制最佳拟合直线
plt.plot(x, b + m * x, color='red')
plt.show()

在这个例子中,我们在数据中添加了更多的噪声,可以清晰地看到拟合直线与数据点之间的偏差。

自定义线性拟合图形

Matplotlib提供了丰富的绘图功能,我们可以轻松地自定义线性拟合图形的外观。以下示例代码展示了如何调整线型、颜色和标记:

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
x = np.arange(0, 10, 1)
y = 2 * x + 1 + np.random.randn(10) * 2

# 使用线性回归拟合数据
b, m = polyfit(x, y, 1)

# 绘制散点图
plt.scatter(x, y)

# 绘制最佳拟合直线,设置线型、颜色和标记
plt.plot(x, b + m * x, linestyle='--', color='green', marker='o')
plt.show()

通过在plot函数中添加参数,我们可以更改线性拟合直线的线型、颜色和标记。

添加标签和图例

为了更好地解释图形中的数据,我们可以添加标签和图例。以下是示例代码:

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
x = np.arange(0, 10, 1)
y = 2 * x + 1 + np.random.randn(10) * 2

# 使用线性回归拟合数据
b, m = polyfit(x, y, 1)

# 绘制散点图并添加标签
plt.scatter(x, y, label='Data Points')

# 绘制最佳拟合直线
plt.plot(x, b + m * x, color='red', label='Best Fit Line')

# 添加标签和图例
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Linear Fit')
plt.legend()
plt.show()

在上面的代码中,我们使用xlabel、ylabel、title和legend函数添加标签和图例,使图形更具可读性。

多项式拟合

除了线性拟合外,我们还可以进行多项式拟合来更好地拟合数据。以下示例代码展示了如何进行3阶多项式拟合:

import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
x = np.arange(0, 10, 1)
y = 2 * x + 1 + np.random.randn(10) * 2

# 使用3阶多项式拟合数据
b, m, c = polyfit(x, y, 2)

# 绘制散点图
plt.scatter(x, y)

# 绘制多项式拟合曲线
plt.plot(x, b + m * x + c * x**2, color='blue')
plt.show()

在这个例子中,我们使用polyfit函数进行3阶多项式拟合,并在图中绘制了拟合曲线。

确定拟合模型的拟合度

为了评估拟合模型的拟合度,我们可以计算拟合数据的残差以及拟合直线与数据点之间的距离。以下示例代码展示了如何计算残差和距离:

# 计算残差
residuals = y - (b + m * x)

# 计算距离
distances = np.abs(residuals)

通过计算残差和距离,我们可以了解拟合模型对数据的拟合程度,从而评估模型的准确性。

使用统计学检验

在一些情况下,我们可能需要对拟合模型进行统计学检验,以确定模型的显著性。以下示例代码展示了如何进行简单的线性回归统计学检验:

from scipy.stats import linregress

# 进行线性回归统计学检验
slope, intercept, r_value, p_value, std_err = linregress(x, y)

通过使用linregress函数,我们可以得到拟合模型的斜率、截距、相关系数、p值和标准误差等统计学指标,以帮助我们对模型进行更深入的分析。

绘制残差图

最后,为了更直观地展示拟合模型的效果,我们可以绘制残差图,看看残差的分布情况。以下是示例代码:

# 绘制残差图
plt.scatter(x, residuals)
plt.axhline(y=0, color='red', linestyle='--')
plt.show()

通过绘制残差图,我们可以观察残差是否随机分布在0附近,以评估拟合模型的适用性。

总结

本文介绍了如何使用Matplotlib进行线性拟合,包括创建散点图、线性回归拟合、自定义图形、多项式拟合、残差计算、统计学检验和绘制残差图等技术。通过这些示例代码,读者可以掌握在数据可视化中应用线性拟合的基本方法,并对拟合模型进行评估和分析。

Matplotlib作为一个功能强大且灵活的绘图库,提供了丰富的功能和选项,可以满足不同场景下线性拟合的需求。读者可以根据实际情况和需求来调整代码和参数,以获得更加优质的线性拟合图形。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程