答案页 · 12 道题

Python 线性回归:从直线到误差练习答案

本页汇总 Python 线性回归:从直线到误差 的 12 道练习。先做练习页,再回到这里核对准确答案和原因。

快速答案

本答案页包含 Python 线性回归:从直线到误差 的 4 道选择题、4 道填空题和 4 道输出预测题,每题都给出准确答案和简短解释。

答案已完整展示,建议先尝试作答,再用本页核对。第一次练习最好从互动练习页开始。

01 · 选择题

在直线 y = 3x + 2 中,3 表示什么?

  1. 误差
  2. 截距
  3. 样本数量
  4. 斜率正确答案

答案: 斜率

为什么: 斜率乘以输入,因此 x 每增加 1,预测值就增加 3。

02 · 选择题

均方误差对哪类误差惩罚最重?

  1. 接近零的误差
  2. 较大的误差正确答案
  3. 只有负误差
  4. 较小的误差

答案: 较大的误差

为什么: 平方会让较大的残差比较小的残差贡献大得多。

03 · 选择题

预测前为什么要检查训练输入范围?

  1. 会删除截距
  2. 范围外的外推可能不可靠正确答案
  3. 会自动改变斜率
  4. 能让 Python 运行更快

答案: 范围外的外推可能不可靠

为什么: 拟合直线在任何位置都能算出数字,但证据只覆盖观察到的范围。

04 · 选择题

运行结果是什么?

xs = [1, 2, 3]
ys = [1, 3, 5]
mean_x = sum(xs) / len(xs)
mean_y = sum(ys) / len(ys)
slope = sum((x - mean_x) * (y - mean_y) for x, y in zip(xs, ys)) / sum((x - mean_x) ** 2 for x in xs)
print(round(slope, 1))
  1. 3.0
  2. 2.0正确答案
  3. 0.5
  4. 1.0

答案: 2.0

为什么: 这些点落在 y = 2x 上,所以中心化协方差除以方差得到斜率 2.0。

05 · 填空题

补全预测公式。

def predict(x, slope, intercept):
    return ____ * x + intercept

print(predict(2, 3, 1))

答案: slope

为什么: 预测先把输入乘以斜率,再加上截距。

06 · 填空题

补全方差分母中的指数。

xs = [1, 2, 3]
mean_x = sum(xs) / len(xs)
print(sum((x - mean_x) ** ____ for x in xs))

答案: 2

为什么: 与均值距离的平方,指数是 2。

07 · 填空题

补全均方误差的除数。

xs = [1, 2, 3]
ys = [2, 4, 5]
slope = 1.5
intercept = 2 / 3
total = sum((y - (slope * x + intercept)) ** 2 for x, y in zip(xs, ys))
mse = total / ____
print(round(mse, 2))

答案: len(xs)

为什么: 总平方误差除以观测数量。

08 · 填空题

补全范围保护条件。

def within_range(x, xs):
    return min(xs) <= x <= ____(xs)

print(within_range(2, [1, 2, 3]))

答案: max

为什么: 上界来自观察到的最大输入。

09 · 输出预测

这段程序打印出什么?

def predict(x, slope, intercept):
    return slope * x + intercept

print(predict(3, 2.0, 1.0))

答案: 7.0

为什么: 直线计算 2.0 * 3 + 1.0,结果是 7.0。

10 · 输出预测

代码的输出结果是什么?

xs = [1, 2, 3]
ys = [2, 4, 6]
mean_x = sum(xs) / len(xs)
mean_y = sum(ys) / len(ys)
slope = sum((x - mean_x) * (y - mean_y) for x, y in zip(xs, ys)) / sum((x - mean_x) ** 2 for x in xs)
intercept = mean_y - slope * mean_x
print(round(slope, 1), round(intercept, 1))

答案: 2.0 0.0

为什么: 这些点正好落在 y = 2x 上,所以斜率是 2.0,截距是 0.0。

11 · 输出预测

屏幕上会显示什么?

xs = [1, 2, 3]
ys = [2, 4, 6]
slope = 2.0
intercept = 0.0
mse = sum((y - (slope * x + intercept)) ** 2 for x, y in zip(xs, ys)) / len(xs)
print(mse)

答案: 0.0

为什么: 每个残差都是零,所以均方误差是 0.0。

12 · 输出预测

这段代码会输出什么?

def within_range(x, xs):
    return min(xs) <= x <= max(xs)

print(within_range(4, [1, 2, 3]))

答案: False

为什么: 4 大于训练输入的最大值,所以范围检查返回 False。

先试一遍题目

打开 Python 线性回归:从直线到误差 练习页,用即时反馈回答同样的 12 道题。

练习本课