Menu
CoddyTech

残差

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

这一章会用趋势线穿过数据点,并用它进行预测和评估。接下来会学到这些内容:

5 次草坪作业的数据点,横轴为草坪面积,纵轴为分钟数,一条橙色趋势线穿过这些点,线上有一颗绿色大星星,预测新草坪面积为 10 时需要 50 分钟

一条直线拟合得有多好?一家草坪服务公司估算每项工作需要 4.5 * area + 5 分钟。每个红色间隔都是一个残差:实际值减去预测值。

五项草坪工作和估算出的直线,每个点到直线都有一条红色垂直间隔,标注为 +6、-5、+3.5、-7 和 +3.5

将它们平方后求和,得到直线的评分:

area = np.array([4, 6, 9, 12, 15])
minutes = np.array([29, 27, 49, 52, 76])
residuals = minutes - (4.5 * area + 5)
print(residuals)
print((residuals ** 2).sum())

这会打印:

[ 6.  -5.   3.5 -7.   3.5]
134.5

平方可以避免 +6 和 -6 相互抵消。残差平方和越小,直线就越好。模型通过减小它来学习。

challenge icon

挑战

中等

搬家公司根据箱子数量估算搬家所需的时间。boxes 和 hours 保存了过去 8 次搬家的数据,程序会读取两条猜测的直线:slope1、intercept1,然后是 slope2、intercept2。

  1. 计算每条直线的残差平方和,作为评分。
  2. 按照下方示例,打印两个总和,四舍五入到小数点后 2 位,并打印较好的直线。

对于直线 0.16 * boxes + 0.8 和 0.12 * boxes + 2.5:

Line 1 SSR: 0.57
Line 2 SSR: 4.1
Better: line 1

亲手试试

import numpy as np

boxes = np.array([10, 18, 25, 32, 40, 47, 55, 60])
hours = np.array([2.5, 3.5, 5.0, 5.5, 7.0, 8.0, 9.5, 10.0])
slope1 = float(input())
intercept1 = float(input())
slope2 = float(input())
intercept2 = float(input())

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

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

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

自己练习: Python 在线编译器