Menu
CoddyTech

用直线进行预测

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

拟合线是一个小型预测工具:输入一个新的 x,就能得到一个 y。一只小狗从第 8 周到第 20 周的体重记录如下:

weeks = np.array([8, 10, 12, 14, 16, 18, 20])
kg = np.array([3.1, 4.0, 5.2, 6.1, 7.0, 8.2, 9.1])
slope, intercept = np.polyfit(weeks, kg, 1)
new_weeks = np.array([15, 52])
print(np.round(slope * new_weeks + intercept, 1))

这会打印 [ 6.6 25.2]。第 15 周在数据范围内。第 52 周不在,狗停止生长很久后,这条线还在不断上升:

从第 8 周到第 20 周的 7 次称重数据,以及拟合出的直线。这条线以虚线形式延伸到标记为数据范围外的阴影区域,在第 52 周达到 25.2 千克;而真实狗的点状曲线在接近 13 千克时趋于平缓

在数据范围之外进行预测称为外推,这很冒险:只有对于类似于模型训练数据的输入,模型的预测才可靠。先检查:

week = 52
print(week >= weeks.min() and week <= weeks.max())

这会打印 False。

challenge icon

挑战

中等

蜡烛燃烧时,每小时测量一次,从第 0 小时到第 6 小时:hours 和 height(单位为 cm)。程序会读取 new_hours。

  1. 拟合一条根据 hours 预测 height 的直线。
  2. 输出对 new_hours 的预测值,四舍五入到小数点后 2 位。
  3. 输出 new_hours 是否在数据的小时范围内,包括两端。

输入 4.5 时:

Predicted height: 13.07 cm
Inside the data: yes

亲手试试

import numpy as np

hours = np.array([0, 1, 2, 3, 4, 5, 6])
height = np.array([20.0, 18.4, 17.1, 15.3, 13.9, 12.2, 10.8])
new_hours = float(input())

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

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

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

自己练习: Python 在线编译器