sklearn.metrics.r2_score
r2_score
(决定系数)是 sklearn.metrics
提供的一个 回归模型评估指标,用于衡量 模型的拟合优度(Goodness of Fit)。它表示 模型对数据方差的解释能力,取值范围为 (-∞, 1]。
1. r2_score
计算公式
R
2
=
1
−
∑
(
y
i
−
y
^
i
)
2
∑
(
y
i
−
y
ˉ
)
2
R^2 = 1 - \frac{\sum (y_i - \hat{y}_i)^2}{\sum (y_i - \bar{y})^2}
R2=1−∑(yi−yˉ)2∑(yi−y^i)2
其中:
- y i y_i yi 是真实值
- y ^ i \hat{y}_i y^i 是预测值
- y ˉ \bar{y} yˉ 是真实值的均值
- ∑ ( y i − y ˉ ) 2 \sum (y_i - \bar{y})^2 ∑(yi−yˉ)2 表示 总方差(Total Variance)
- ∑ ( y i − y ^ i ) 2 \sum (y_i - \hat{y}_i)^2 ∑(yi−y^i)2 表示 残差平方和(Residual Sum of Squares, RSS)
解释
-
R
2
R^2
R2 反映了 模型的解释能力:
- 接近 1:模型能很好地解释数据变化。
- 接近 0:模型的预测效果和简单的均值预测差不多。
- 小于 0:模型比均值预测更糟糕(可能是过拟合或模型选择错误)。
2. r2_score
代码示例
from sklearn.metrics import r2_score
# 真实值和预测值
y_true = [3.0, -0.5, 2.0, 7.0]
y_pred = [2.5, 0.0, 2.1, 7.8]
# 计算 R²
r2 = r2_score(y_true, y_pred)
print(f"R²: {r2:.2f}")
输出
R²: 0.95
解释
R² = 0.95
,说明 模型能解释 95% 的数据方差,是一个较好的拟合结果。
3. r2_score
的参数
r2_score(y_true, y_pred, sample_weight=None, multioutput="uniform_average")
参数 | 说明 |
---|---|
y_true | 真实值 |
y_pred | 预测值 |
sample_weight | 样本权重 |
multioutput | raw_values (返回每个输出的 R²)、uniform_average (默认,返回平均 R²) |
(1) 计算 multioutput
选项
import numpy as np
y_true = np.array([[3, -0.5, 2, 7], [2, 1, 4, 6]])
y_pred = np.array([[2.5, 0.0, 2.1, 7.8], [2.1, 1.1, 3.9, 5.9]])
r2_raw = r2_score(y_true, y_pred, multioutput="raw_values")
r2_weighted = r2_score(y_true, y_pred, multioutput="variance_weighted")
print(f"逐列 R²: {r2_raw}")
print(f"加权平均 R²: {r2_weighted:.2f}")
4. r2_score
适用场景
- 回归任务(如房价预测、气温预测)
- 衡量模型的拟合优度
- 需要解释模型对数据变化的解释能力
5. r2_score
vs. 其他回归误差指标
指标 | 计算公式 | 适用场景 |
---|---|---|
mean_absolute_error (MAE) | 1 n ∑ ∣ y i − y ^ i ∣ \frac{1}{n} \sum |y_i - \hat{y}_i| n1∑∣yi−y^i∣ | 衡量误差的平均大小,对离群值不敏感 |
mean_squared_error (MSE) | 1 n ∑ ( y i − y ^ i ) 2 \frac{1}{n} \sum (y_i - \hat{y}_i)^2 n1∑(yi−y^i)2 | 强调较大误差,对离群值敏感 |
root_mean_squared_error (RMSE) | M S E \sqrt{MSE} MSE | 与 MSE 相似,但单位与目标变量相同 |
r2_score | 解释方差比例 | 衡量模型的拟合程度 |
示例:
from sklearn.metrics import mean_absolute_error, mean_squared_error
mae = mean_absolute_error(y_true, y_pred)
mse = mean_squared_error(y_true, y_pred)
rmse = mean_squared_error(y_true, y_pred, squared=False)
print(f"MAE: {mae:.2f}")
print(f"MSE: {mse:.2f}")
print(f"RMSE: {rmse:.2f}")
6. 结论
r2_score
计算 决定系数(R²),用于衡量 回归模型的拟合优度。- 适用于 回归任务,解释模型能 解释数据变化的程度。
- 当
R²
接近 1,表示模型拟合良好,接近 0 表示模型和均值预测差不多,小于 0 说明模型可能不合适。 - 可与 MAE、MSE、RMSE 结合使用,以更全面评估模型。