Menu
CoddyTech

绘制拟合线

本课属于 Coddy Machine Learning 学习旅程的“机器学习统计学”单元。第 37 课,共 64 课。

两个数字可以描述拟合结果,但只有图表能显示它是否符合数据。厨房里计时了 6 次水壶烧水。把直线画在与散点图相同的 ax 上:

liters = np.array([0.5, 0.8, 1.0, 1.2, 1.5, 1.7])
minutes = np.array([1.6, 2.4, 2.7, 3.3, 3.9, 4.5])
slope, intercept = np.polyfit(liters, minutes, 1)
xs = np.linspace(liters.min(), liters.max(), 50)
fig, ax = plt.subplots()
ax.scatter(liters, minutes, label="Boils")
ax.plot(xs, slope * xs + intercept, color="C1", label="Fit")
ax.legend()
plt.show()

xs 从最小的 x 延伸到最大的 x,所以这条线从数据的起点延伸到终点:

六次水壶烧水的数据点,烧水所需分钟数与水量(升)的关系,时间从 1.6 分钟上升到 4.5 分钟,一条橙色拟合线穿过这些数据点,从 0.5 升延伸到 1.7 升

将模型的预测结果绘制在数据上,是检查模型是否学到了合理内容的最快方法。拟合线没有经过数据点,说明拟合出了问题。

challenge icon

挑战

中等

一位大楼管理员记录了 12 次电梯行程的用时:行驶的 floors 和耗费的 seconds。入门代码设置了图表的标题和轴标签。

  1. 拟合一条根据 floors 预测 seconds 的直线。
  2. 将行程绘制为散点图,标签设为 Rides;再从楼层数最少的行程到楼层数最多的行程绘制直线,标签设为 Fit。
  3. 添加图例并显示图表。

程序不会输出任何内容;Coddy 会描述你的图表。另一栋大楼的图表如下所示:

标题为 Elevator Rides 的图表:8 个点逐渐上升,从 2 层时的 14 秒到 20 层时的 51 秒;拟合直线从第一个点所在的楼层延伸到最后一个点所在的楼层;图例标出了 Rides 和 Fit

亲手试试

import numpy as np
import matplotlib.pyplot as plt

floors = np.array([3, 7, 1, 12, 5, 9, 15, 2, 10, 6, 13, 8])
seconds = np.array([15.3, 27.0, 12.4, 36.0, 19.5, 28.8, 44.9, 12.7, 33.2, 19.4, 41.7, 27.0])
# 不要修改下面的代码行
fig, ax = plt.subplots()
ax.set_title("Elevator Rides")
ax.set_xlabel("Floors")
ax.set_ylabel("Seconds")

# 在下面编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

机器学习统计学中的所有课

自己练习: Python 在线编译器