【机器学习】决定系数(R²:Coefficient of Determination)

news2024/11/25 16:25:18

决定系数R^{2},也称为 R 平方,是一种用于衡量回归模型预测效果的统计指标。它表示了模型解释目标变量总变异的程度,数值介于 0 和 1 之间,数值越接近 1 表明模型的解释力越强。

1. R^{2} 的定义和公式

R^{2} 的公式如下:

R^2 = 1 - \frac{\sum_{i=1}^n (y_i - \hat{y}_i)^2}{\sum_{i=1}^n (y_i - \bar{y})^2}

其中:

  • y_{i}​ 是真实值。
  • \hat{y_{i}} 是模型的预测值。
  • \bar{y} 是真实值的平均值。
  • \sum_{i=1}^n (y_i - \hat{y}_i)^2 是残差平方和 (Residual Sum of Squares, RSS)。
  • \sum_{i=1}^n (y_i - \bar{y})^2 是总平方和 (Total Sum of Squares, TSS)。

从公式可以看出,R^2 表示残差平方和占总平方和的比例。换句话说,R^2 越接近 1,表示模型的预测越接近真实值,模型解释越充分。

2. R^2 的计算步骤

计算 R^2 的步骤如下:

  1. 计算真实值的平均值 \bar{y}​。
  2. 计算残差平方和 \sum (y_i - \hat{y}_i)^2
  3. 计算总平方和 \sum (y_i - \bar{y})^2
  4. 计算 R^2,即使用公式 R^2 = 1 - \frac{\text{RSS}}{\text{TSS}}​。

3. R^2 的解释和意义

  • 解释度R^2 值表示自变量解释因变量变异的比例。例如,R^2 = 0.8 表示模型能解释 80% 的目标变量变异。
  • 值域R^2 的取值范围通常为 [0, 1]。0 表示模型无法解释任何目标变量的变异,1 表示模型可以完全解释目标变量的变异。
  • 负值的情况:在某些情况下,当模型预测效果极差时(例如,模型欠拟合),R^2 可能为负数。这表示预测值甚至比用平均值预测的效果更差。

4. R^2 的优缺点

优点

  • 直观解释R^2 直接表示了模型对目标变量的解释力。
  • 适用性广:广泛应用于回归模型的效果评价。

缺点

  • 对样本大小敏感:在小样本数据中,R^2 值容易偏高,可能夸大模型的预测效果。
  • 对异常值敏感:由于平方的存在,R^2 对异常值敏感,异常值可能会过度影响结果。
  • 无法区分方向性:仅仅反映解释力,不反映模型预测的方向性,容易掩盖预测偏差。

5. R^2 的应用

在回归分析、机器学习和经济学等领域,R^2 是一种常用的评价指标。其应用场景包括:

  • 回归模型效果评价:常用于衡量线性回归、多项式回归等模型的解释力。
  • 经济和金融数据分析:例如评估某些经济指标对 GDP 增长的解释力。
  • 机器学习模型调优:用于评估模型的拟合程度,帮助选择合适的模型或调参。

6. R^2 与其他误差指标的对比

指标R^2MAE、RMSE
计算方式残差平方和和总平方和之比绝对误差或平方误差
值域[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)

说明

  1. y_true 是真实值的数组,y_pred 是预测值的数组。
  2. ss_res 是残差平方和,表示误差的总量。
  3. ss_tot 是总平方和,表示目标变量的总变异。
  4. 1 - (ss_res / ss_tot) 得出 R^2 值,表示模型对数据变异的解释程度。

图中 R^2 的值接近 1 表示模型的预测接近真实值,具有较高的解释力。

8.R^2 图解示例

下面将生成一个包含 R^2 计算图解的图示,以便更清楚地理解 R^2 在模型解释力上的作用。

上图展示了 R^2 的计算过程,其中:

  • 蓝色圆点连线表示真实值 y
  • 红色叉点连线表示模型的预测值 \hat{y}​。
  • 每条灰色虚线表示预测值与真实值之间的差距,即残差。
# Re-import necessary libraries due to session context reset
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,我们可以用一个散点图展示真实值和预测值的分布:

  1. 绘制真实值与预测值的散点图:展示所有数据点的真实值与预测值之间的差异。
  2. 展示总平方和 (TSS):每个数据点到真实值均值的垂直线表示目标变量的总变异。
  3. 展示残差平方和 (RSS):每个数据点到预测值的垂直线表示模型预测误差。
  4. 理解解释力:图中 R^2 值越大,模型预测值越接近真实值,即解释力越高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2236589.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

deepfm模型实现招聘职位推荐算法

项目源码获取方式见文章末尾! 600多个深度学习项目资料,快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

王珊数据库系统概论第六版PDF+第五版课后答案+课件

为了保持科学性、先进性和实用性, 编者在第5版教材基础上对全书内容进行了修改、更新和充实。在科学性方面, 编者在系统篇中增加了第9章关系数据库存储管理, 讲解数据库的逻辑与物理组织方式及索引结构。增加这部分内容有助于学生更好地理解关…

数据集市是什么?有什么优势?

一、数据集市是什么? 1、数据集市的产生背景: 因为数据仓库的工作范围和成本比较巨大,技术部门必须对所有的以全企业的眼光对待任何一次决策分析,这样就变成了成本高、耗时高的大项目,而且这种集中式的数据处理方式往往…

python安装selenium,geckodriver,chromedriver,Selenium IDE

安装浏览器 找到浏览器的版本号 chrome 版本 130.0.6723.92(正式版本) (64 位) firfox 116.0.3 (64 位),但是后面运行的时候又自动更新到了 127.0.0.8923 安装selenium > pip install selenium > pip show …

【LeetCode】【算法】238. 除自身以外数组的乘积

LeetCode 238. 除自身以外数组的乘积 题目描述 给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据保证数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位整数范围内。 请不…

Redis-07 Redis哨兵

操作实现 此处应该6台虚拟机,其中3台是哨兵,但因为内存限制没有那么多 1.将sentinel文件拷贝到/myredis目录下 2.sentinel.conf文件重要参数 新建配置文件sentinel26379.conf sentinel26380.conf sentinel26381.conf bind 0.0.0.0 daemonize yes pr…

linux笔记(selinux)

一、概述 定义SELinux(Security - Enhanced Linux)是一种基于 Linux 内核的强制访问控制(MAC)安全机制。它为 Linux 系统提供了更细粒度的安全策略,增强了系统的安全性。目的主要目的是限制进程对系统资源(…

jmeter常用配置元件介绍总结之函数助手

系列文章目录 1.windows、linux安装jmeter及设置中文显示 2.jmeter常用配置元件介绍总结之安装插件 3.jmeter常用配置元件介绍总结之取样器 jmeter常用配置元件介绍总结之函数助手 1.进入函数助手对话框2.常用函数的使用介绍2.1.RandomFromMultipleVars函数2.2.Random函数2.3.R…

Linux环境基础和基础开发工具使用

文章目录 一、yum软件管理器1、包管理器2、yum3、apt4、安装源 二、编辑器vim1、各种模式2、打开时直接让光标定位到指定号3、!加命令字符 三、命令模式1、i 进入插入模式2、**Shift :** 进入底行模式3、光标定位4、ZZ(大写)保存并退出vim5、…

如何使用Python管理环境变量

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 环境变量 📒📝 环境变量简介📝 Python 中的环境变量操作📝 获取环境变量📝 设置环境变量🔖 临时设置🔖 永久设置📝 删除环境变量📝 临时删除📝 永久删除📝 小结⚓️ 相关链接 ⚓️📖 介绍 📖 环境变量…

【国产MCU系列】-GD32F4通用GPIO操作

通用GPIO 文章目录 通用GPIO1、GD32F4的GPIO介绍2、GPIO的寄存器3、GPIO功能及配置3.1 GPIO固件库API介绍3.2 GPIO引脚配置为输出3.2 GPIO引脚配置为输入1、GD32F4的GPIO介绍 GD32F4最多可支持140个通用 I/O引脚( GPIO),分别为 PA0 ~ PA15 PB0 ~ PB15 PC0 ~ PC15 PD0 ~ PD1…

GitHub个人主页美化

效果展示 展示为静态效果,动态效果请查看我的GitHub页面 创建GitHub仓库 创建与GitHub用户名相同的仓库,当仓库名与用户名相同时,此仓库会被视作特殊仓库,其README.md(自述文件)会展示在GitHub个人主页…

【网络面试篇】HTTP(2)(笔记)——http、https、http1.1、http2.0

目录 一、相关面试题 1. HTTP 与 HTTPS 有哪些区别? 2. HTTPS 的工作原理?(https 是怎么建立连接的) (1)ClientHello (2)SeverHello (3)客户端回应 &a…

视频播放相关的杂记

基于QT FFMPEG设计一款 RTMP协议推流、视频录制软件 实现的功能: (1)将摄像头视频流 麦克风音频流合并,并推到流媒体服务器 (2)将摄像头视频流 麦克风音频流保存到本地磁盘 基于QtFFMPEG设计一款RTM…

分组校验在Spring中的应用详解

目录 前言1. 什么是分组校验2. 分组校验的基本原理3. 分组校验的实现步骤3.1 定义分组接口3.2 在校验项中指定分组3.3 校验时指定要校验的分组3.4 默认分组和分组的继承 4. 分组校验的优势和适用场景4.1 优势4.2 适用场景 5. 常见问题与解决方案5.1 校验未生效5.2 无法识别默认…

交换机属性介绍-交换机持久化、交换机自动删除、备用交换机

交换机属性-持久化和自动删除 1、交换机常用属性2、交换机(Exchange)的持久化属性2.1、RabbitConfig配置类(关键代码)2.2、发送消息2.3、启动类2.4、application.yml配置文件2.5、pom.xml配置文件2.6、测试 3、交换机(Exchange)的自动删除属性3.1、Rabbi…

探索PyAV:Python中的多媒体处理利器

文章目录 探索PyAV:Python中的多媒体处理利器第一部分:背景介绍第二部分:PyAV是什么?第三部分:如何安装PyAV?第四部分:简单的库函数使用方法1. 打开文件2. 查看流3. 遍历帧4. 编码帧5. 关闭输出…

MySql中索引为什么用B+树,他有什么特点?时间复杂度是多少?能存多少数据?是不是只能三层?他与B-树有什么不同?还有其它的树你是是否知道?

平衡二叉树 平衡二叉树又被称为AVL树平衡二叉树是一颗空树或者它的左右两个子树的高度差的绝对值不超过1,并且左右子树也是平衡树非叶子节点值大于左子节点值而小于右子节点值非叶子节点最多拥有两个子节点 平衡二叉树的不足之处及时间复杂度 如果每次插入的数据都…

纯前端实现在线预览excel文件(插件: LuckyExcel、Luckysheet)

概述 在实际开发中,遇到需要在线预览各种文件的需求,最近遇到在线预览excel文件的需求,在此记录一下!本文主要功能实现,用于插件 LuckyExcel ,Luckysheet!废话不多说,上代码&#xf…

关于我的编程语言——C/C++——第七篇(深入4)

(叠甲:如有侵权请联系,内容都是自己学习的总结,一定不全面,仅当互相交流(轻点骂)我也只是站在巨人肩膀上的一个小卡拉米,已老实,求放过) 什么是文件&#xf…