残差图
本课属于 Coddy Machine Learning 学习旅程的“监督学习”单元。第 14 课,共 58 课。
高分可能掩盖了错误的形状。这条直线在不断上涨的面团数据上取得了 0.82 的 R 平方值,但误差呈拱形:
右边的图是残差图:将每个残差(实际值减去预测值)与其预测值进行对照,并画出一条位于 0 的直线:
residuals = y_test - pred
fig, ax = plt.subplots()
ax.scatter(pred, residuals)
ax.axhline(0, color="gray", linestyle="--")
plt.show()健康的残差会像噪声一样散布在 0 周围。出现规律说明模型遗漏了某些因素:这里是上升速度变慢了。
对于多个特征,也要分别绘制残差与每个特征的关系图:呈弧形的那个特征会掩盖曲线。
挑战
中等一所驾校为 80 次制动测试拟合了一条直线,使用的数据是:speed_kmh 和 braking_m。起始代码将测试预测值保存在 pred 中,并为图表添加了标签。
- 计算残差。
- 将残差与预测值绘制成散点图,在图中添加一条位于 0 处的灰色虚线,然后显示图表。
这条直线是否没有捕捉到曲线趋势?在左侧,它甚至预测了负的制动距离。
使用其他数据时,表现良好的直线的图表如下所示:
Coddy 会描述你的图表。
亲手试试
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
brakes = pd.read_csv("braking.csv")
X_train, X_test, y_train, y_test = train_test_split(brakes[["speed_kmh"]], brakes["braking_m"], test_size=0.25, random_state=0)
model = LinearRegression()
model.fit(X_train, y_train)
pred = model.predict(X_test)
fig, ax = plt.subplots()
ax.set_title("Braking Line Check")
ax.set_xlabel("Predicted braking distance (m)")
ax.set_ylabel("Residual (m)")
# 在下面编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
监督学习中的所有课
自己练习: Python 在线编译器