回归模型评估方法
1 课程概览
本课讲解回归模型的评估方法:MAE(平均绝对误差)、MSE(均方误差)、RMSE(均方根误差)。介绍各指标的计算公式、API、特点,以及为什么需要加噪声(使数据点分布在线两端)。重点讲解RMSE对异常值更敏感(平方放大)。
2 核心概念与定义
- MAE:平均绝对误差(Mean Absolute Error)
- MSE:均方误差(Mean Squared Error)
- RMSE:均方根误差(Root Mean Squared Error)
- 最小二乘:误差的平方和
- 噪声(E):随机误差,使数据点分布在线两端
3 算法与模型详解
3.1 为什么需要评估
目的:衡量预测值和真实值之间的差距
原则:误差和越小,模型得分越高
3.2 三种评估指标
| 指标 | 全称 | 公式 | API |
|---|---|---|---|
| MAE | 平均绝对误差 | $\frac{1}{n}\sum |\hat{y}_i - y_i|$ | mean_absolute_error |
| MSE | 均方误差 | $\frac{1}{n}\sum (\hat{y}_i - y_i)^2$ | mean_squared_error |
| RMSE | 均方根误差 | $\sqrt{MSE}$ | root_mean_squared_error |
3.3 指标关系
- 最小二乘 = $\sum (\hat{y}_i - y_i)^2$
- MSE = 最小二乘 / 样本数
- RMSE = √MSE
3.4 评估原则
所有指标都是越小越好:
- MAE越小 → 误差越小
- MSE越小 → 误差越小
- RMSE越小 → 误差越小
3.5 为什么加噪声
问题:为什么公式要加噪声E?
原因:
- 不加噪声:所有点都在一条线上,看不到点
- 加噪声:数据点有大有小,分布在线两端
作用:模拟真实数据中的误差
3.6 MAE和RMSE的关系
大多数情况下:MAE和RMSE非常接近
原因:
- MAE:直接相加求平均值
- RMSE:平方后求平均再开根号
- 平方再开根号 ≈ 原值
3.7 RMSE对异常值的敏感性
特点:RMSE对异常值更敏感
原因:RMSE计算中有平方向,大误差会被平方放大
示例:
- 正常值:30岁
- 异常值:90岁
- 差距:90 - 30 = 60
- 平方后:$30^2 = 900$,$90^2 = 8100$
- 差距:8100 - 900 = 7200
结论:异常点被平方后放大很多
3.8 各指标用途
| 指标 | 用途 |
|---|---|
| MAE | 通用评估 |
| MSE | 找异常值 |
| RMSE | 对异常值敏感的评估 |
4 数学原理与推导
4.1 MAE
$$MAE = \frac{1}{n}\sum_{i=1}^{n} |\hat{y}_i - y_i|$$
4.2 MSE
$$MSE = \frac{1}{n}\sum_{i=1}^{n} (\hat{y}_i - y_i)^2$$
4.3 RMSE
$$RMSE = \sqrt{MSE} = \sqrt{\frac{1}{n}\sum_{i=1}^{n} (\hat{y}_i - y_i)^2}$$
4.4 最小二乘
$$\text{最小二乘} = \sum_{i=1}^{n} (\hat{y}_i - y_i)^2$$
5 代码示例
import numpy as np
from sklearn.metrics import mean_absolute_error, mean_squared_error
# 真实值和预测值
y_true = np.array([3, 5, 7, 9, 11])
y_pred = np.array([2.8, 5.2, 6.8, 9.1, 10.9])
# MAE(平均绝对误差)
mae = mean_absolute_error(y_true, y_pred)
print(f"MAE: {mae:.4f}")
# MSE(均方误差)
mse = mean_squared_error(y_true, y_pred)
print(f"MSE: {mse:.4f}")
# RMSE(均方根误差)
rmse = np.sqrt(mse)
print(f"RMSE: {rmse:.4f}")
# 最小二乘
least_squares = np.sum((y_pred - y_true) ** 2)
print(f"最小二乘: {least_squares:.4f}")
输出示例:
MAE: 0.1600
MSE: 0.0280
RMSE: 0.1673
最小二乘: 0.1400
带噪声的数据生成:
import numpy as np
import matplotlib.pyplot as plt
# 生成数据 Y = 2X + 5 + 噪声
np.random.seed(42)
X = np.linspace(0, 10, 50)
noise = np.random.randn(50) * 2 # 噪声
Y = 2 * X + 5 + noise
# 绘制
plt.scatter(X, Y, color='blue', label='数据点')
plt.plot(X, 2*X + 5, color='red', label='Y=2X+5')
plt.legend()
plt.show()
6 重难点与易错提醒
- ❗重点:三种评估指标的公式和API。
- ❗重点:所有指标都是越小越好。
- ❗重点:RMSE对异常值更敏感(平方放大)。
- ❗重点:加噪声是为了模拟真实数据。
- ⚠️易错:混淆MAE和MSE(绝对值vs平方)。
- ⚠️易错:忘记RMSE是MSE开根号。
- 💡深入理解:RMSE适合找异常值,MAE适合通用评估。
7 课堂问答精选
Q: 为什么RMSE对异常值更敏感?
A: RMSE计算中有平方向,大误差会被平方放大。例如正常值30,异常值90,差距60;平方后900和8100,差距7200。异常点被平方后放大很多,所以RMSE对异常值更敏感。
Q: 为什么要加噪声?
A: 不加噪声的话,所有点都在一条线上,看不到数据点。加噪声后,数据点有大有小,分布在线两端,模拟真实数据中的误差情况。
8 本课小结
- MAE:平均绝对误差,通用评估。
- MSE:均方误差,找异常值。
- RMSE:均方根误差,对异常值敏感。
- 所有指标:越小越好。
- 加噪声:模拟真实数据。
- RMSE敏感原因:平方放大异常值。
9 延伸思考与实践
- 实践:用sklearn计算MAE、MSE、RMSE。
- 预习:正规方程线性回归API。
- 思考:什么情况下用MAE,什么情况下用RMSE?