机器学习中的决定系数(R²):定义、计算及应用
创作时间:
作者:
@小白创作中心
机器学习中的决定系数(R²):定义、计算及应用
引用
CSDN
1.
https://blog.csdn.net/IT_ORACLE/article/details/143624121
决定系数(R²)是机器学习和统计学中常用的评估回归模型预测效果的指标。它衡量了模型解释目标变量变异的程度,数值介于0和1之间,越接近1表示模型的解释力越强。本文将从定义、计算方法、优缺点、应用场景等多个维度详细解析R²,并通过Python代码实现和图示帮助读者深入理解这一重要概念。
1. 决定系数(R²)的定义和公式
决定系数(R²)的公式如下:
$$
R^2 = 1 - \frac{RSS}{TSS}
$$
其中:
- $y_i$ 是真实值。
- $\hat{y}_i$ 是模型的预测值。
- $\bar{y}$ 是真实值的平均值。
- $RSS$ 是残差平方和(Residual Sum of Squares)。
- $TSS$ 是总平方和(Total Sum of Squares)。
从公式可以看出,$R^2$ 表示残差平方和占总平方和的比例。换句话说,$R^2$ 越接近 1,表示模型的预测越接近真实值,模型解释越充分。
2. 决定系数(R²)的计算步骤
计算 $R^2$ 的步骤如下:
- 计算真实值的平均值 $\bar{y}$。
- 计算残差平方和 $RSS$。
- 计算总平方和 $TSS$。
- 计算 $R^2$ 值,即使用公式 $R^2 = 1 - \frac{RSS}{TSS}$。
3. 决定系数(R²)的解释和意义
- 解释度:$R^2$ 值表示自变量解释因变量变异的比例。例如,$R^2 = 0.8$ 表示模型能解释 80% 的目标变量变异。
- 值域:$R^2$ 的取值范围通常为 [0, 1]。0 表示模型无法解释任何目标变量的变异,1 表示模型可以完全解释目标变量的变异。
- 负值的情况:在某些情况下,当模型预测效果极差时(例如,模型欠拟合),$R^2$ 可能为负数。这表示预测值甚至比用平均值预测的效果更差。
4. 决定系数(R²)的优缺点
优点
- 直观解释:$R^2$ 直接表示了模型对目标变量的解释力。
- 适用性广:广泛应用于回归模型的效果评价。
缺点
- 对样本大小敏感:在小样本数据中,$R^2$ 值容易偏高,可能夸大模型的预测效果。
- 对异常值敏感:由于平方的存在,$R^2$ 对异常值敏感,异常值可能会过度影响结果。
- 无法区分方向性:仅仅反映解释力,不反映模型预测的方向性,容易掩盖预测偏差。
5. 决定系数(R²)的应用
在回归分析、机器学习和经济学等领域,$R^2$ 是一种常用的评价指标。其应用场景包括:
- 回归模型效果评价:常用于衡量线性回归、多项式回归等模型的解释力。
- 经济和金融数据分析:例如评估某些经济指标对 GDP 增长的解释力。
- 机器学习模型调优:用于评估模型的拟合程度,帮助选择合适的模型或调参。
6. 决定系数(R²)与其他误差指标的对比
指标 | 计算方式 | 值域 | 异常值敏感性 | 解释力 |
---|---|---|---|---|
$R^2$ | 残差平方和和总平方和之比 | [0, 1](可能为负数) | 高 | 表示模型解释的变异比例 |
MAE | 绝对误差 | 非负值 | 低 | 表示模型预测误差的均值 |
RMSE | 平方误差 | 非负值 | 高 | 表示模型预测误差的均值 |
7. Python 实现代码
以下是计算 $R^2$ 的 Python 代码:
import numpy as np
def r2_score(y_true, y_pred):
ss_res = np.sum((y_true - y_pred) ** 2)
ss_tot = np.sum((y_true - np.mean(y_true)) ** 2)
return 1 - (ss_res / ss_tot)
# 示例
y_true = np.array([3, -0.5, 2, 7])
y_pred = np.array([2.5, 0.0, 2, 8])
result = r2_score(y_true, y_pred)
print("R^2:", result)
运行结果
R^2: 0.9486081370449679
说明
y_true
是真实值的数组,y_pred
是预测值的数组。ss_res
是残差平方和,表示误差的总量。ss_tot
是总平方和,表示目标变量的总变异。1 - (ss_res / ss_tot)
得出 $R^2$ 值,表示模型对数据变异的解释程度。
8. 决定系数(R²)图解示例
下面将生成一个包含 $R^2$ 计算图解的图示,以便更清楚地理解 $R^2$ 在模型解释力上的作用。
import numpy as np
import matplotlib.pyplot as plt
# Generate sample data for illustration
np.random.seed(0)
x = np.linspace(0, 10, 10)
y_true = 2 * x + 1 # True relationship (e.g., ground truth values)
y_pred = y_true + np.random.normal(0, 2, 10) # Predicted values with random noise
# Calculate R^2
ss_res = np.sum((y_true - y_pred) ** 2) # Residual sum of squares
ss_tot = np.sum((y_true - np.mean(y_true)) ** 2) # Total sum of squares
r2_value = 1 - (ss_res / ss_tot)
# Plotting true vs predicted values and lines indicating residuals
plt.figure(figsize=(10, 6))
plt.plot(x, y_true, label="True Values", color="blue", marker='o')
plt.plot(x, y_pred, label="Predicted Values", color="red", marker='x')
plt.hlines(np.mean(y_true), x[0], x[-1], colors='green', linestyles='dashed', label='Mean of True Values')
# Add residual lines
for i in range(len(x)):
plt.plot([x[i], x[i]], [y_true[i], y_pred[i]], color='gray', linestyle='dotted')
# Adding text and labels
plt.xlabel("x")
plt.ylabel("y")
plt.title(f"Illustration of R² (Coefficient of Determination)\nR² = {r2_value:.2f}")
plt.legend()
plt.grid(True)
plt.show()
为了更直观地理解 $R^2$,我们可以用一个散点图展示真实值和预测值的分布:
- 绘制真实值与预测值的散点图:展示所有数据点的真实值与预测值之间的差异。
- 展示总平方和 (TSS):每个数据点到真实值均值的垂直线表示目标变量的总变异。
- 展示残差平方和 (RSS):每个数据点到预测值的垂直线表示模型预测误差。
- 理解解释力:图中 $R^2$ 值越大,模型预测值越接近真实值,即解释力越高。
热门推荐
什么是五乘教法
眼镜片膜层选购指南:疏水、易洁、防尘功能详解
比雷军还慷慨,虞仁荣是啥来头?
詹姆斯40岁生日:创多项历史第一,40岁后仍保持巅峰状态
Fe功能低水平的表现、影响、人际交往挑战及与情商的关系
香辛料大揭秘:46种香料全知道
孕期做B超次数多了好不好? 孕期B超检查的必要性与频率解析
葛兆光丨皇权与革命:中日传统政治文化的结构性差异
食源性疾病暴发事件地区监测数据更新了!预防食物中毒,这些方面要注意
了解6平方铜芯线的承载能力及选购要点
380伏电机接线方法详解:星形接法与三角形接法全攻略
怎么才能矫正骨盆前倾
武则天敢夺了李唐天下,为啥却不敢传位给武家人?原因在这里
方向盘偏移的调整方法有哪些?这些调整方法对驾驶安全有何影响?
大厂光环,在相亲市场行不通了?
如何辨别真假茶叶种类?教你识茶秘诀
中国有哪些技术,已经超过了美国,位于世界前茅?一起了解一下吧
新消费时代,如何俘获女性消费者?
给宝爸宝妈的奶粉冲泡指南:这些常见误区你中招了吗?
2025,ERP相关职业规划指南
用把位帮助记忆吉他音阶在指板上的分布
学习人工智能如何变现
汽车补漆价格全解析:影响因素与价格范围
扇贝的多种美味烹饪方式,从清蒸到烤制,每一种都鲜美无比
公证还款计划:确保债务清偿的合法性和有效性
木棉花的花语
新疆最美的7条公路,此生必走
OpenCV实现多角度模板匹配:详细步骤与代码解析
供电局朋友提醒:这4种家电不用时要拔掉插头,不然电费蹭蹭涨
菠萝蜜种子变绿植,轻松打造家庭小森林!