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

决定系数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 npdef 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.mzph.cn/diannao/59874.shtml

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

相关文章

推荐JDK1.8 API 中文文档

jdk api 1.8_google.CHM 一,CHM文件下载 最近更新 链接: 百度网盘 请输入提取码 提取码: e4rx 备用 链接: 百度网盘 请输入提取码 提取码: gczr 二,在线下载地址 https://www.oracle.com/java/technologies/javase-jdk8-doc-downloads.html 三&…

AscendC从入门到精通系列(一)初步感知AscendC

1 什么是AscendC Ascend C是CANN针对算子开发场景推出的编程语言,原生支持C和C标准规范,兼具开发效率和运行性能。基于Ascend C编写的算子程序,通过编译器编译和运行时调度,运行在昇腾AI处理器上。使用Ascend C,开发者…

静态库、动态库、framework、xcframework、use_frameworks!的作用、关联核心SDK工程和测试(主)工程、设备CPU架构

1.1库的概念 库:程序代码的集合,编译好的二进制文件加上头文件供使用,共享程序代码的一种方式。 1.2库的分类 根据开源情况分为:开源库(能看到具体实现)、闭源库(只公开调用的的接口&#xf…

天地图入门|标注|移动飞行|缩放,商用地图替换

“天地图”是国家测绘地理信息局建设的地理信息综合服务网站。集成了来自国家、省、市(县)各级测绘地理信息部门,以及相关政府部门、企事业单位 、社会团体、公众的地理信息公共服务资源,如果做的项目是政府部门、企事业单位尽量选…

Webserver(5.3)线程池实现

目录 线程池locker.hthreadpool.h 线程池 相比于动态地创建子线程,选择一个已经存在的子线程的代价显然要小得多。至于主线程选择哪个子线程来为新任务服务,有多种方式: 主线程使用某种算法来主动选择子线程。最简单、最常用的算法是随机算…

【重装系统后重新配置2】pycharm 终端无法激活conda环境

pycharm 终端无法激活 conda 环境,但是 Windows本地终端是可以激活的 原因是pycharm 默认的终端是 Windows PowerShell 解决方法有两个: 一、在设置里,修改为cmd 二、下面直接选择

云轴科技ZStack助力新远科技开启化工行业智能制造新篇章

新远科技基于云轴科技ZStack Cube超融合和ZStack Zaku容器云平台打造了灵活高效的IT基础设施,实现了IaaS和PaaS层的全面覆盖,优化了资源利用率,降低了硬件成本和运维复杂性,同时强化了数据安全和业务连续性。 化工行业的数字化先…

test 是 JavaScript 中正则表达式对象 (RegExp) 的一种方法,用于测试一个字符串是否匹配某个正则表达式

在你的代码中,test 方法用于验证扫描结果是否符合特定的格式要求。具体来说,/^[A-Za-z\d]{16}$/.test(res.result) 这一行代码用于检查扫描结果 res.result 是否是一个由16个字母或数字组成的字符串。 test 方法的作用 正则表达式匹配: ^ 表…

Golang | Leetcode Golang题解之第546题移除盒子

题目: 题解: func removeBoxes(boxes []int) int {dp : [100][100][100]int{}var calculatePoints func(boxes []int, l, r, k int) intcalculatePoints func(boxes []int, l, r, k int) int {if l > r {return 0}if dp[l][r][k] 0 {r1, k1 : r, k…

数字时代企业的基本数据丢失预防策略

在当今的数字时代,数据丢失预防对企业的重要性怎么强调也不为过。了解与数据丢失相关的风险至关重要,因为人为错误和网络攻击等常见原因可能会产生严重后果。 实施有效的数据丢失预防策略(例如安全协议、定期数据备份和员工培训)…

使用Element UI实现一个拖拽图片上传,并可以Ctrl + V获取图片实现文件上传

要在 Element UI 的拖拽上传组件中实现 Ctrl V 图片上传功能,可以通过监听键盘事件来捕获粘贴操作,并将粘贴的图片数据上传到服务器。 版本V1,实现获取粘贴板中的文件 注意,本案例需要再你已经安装了Element UI并在项目中正确配…

uni-app小程序echarts中tooltip被遮盖

图表中的文案过长,tooltip溢出容器,会被遮盖住 解决方案: 在echarts的tooltip中有confine属性可将tooltip限制在容器内,不超过容器,就不易被遮盖

设计模式-七个基本原则之一-开闭原则 + SpringBoot案例

开闭原则:(SRP) 面向对象七个基本原则之一 对扩展开放:软件实体(类、模块、函数等)应该能够通过增加新功能来进行扩展。对修改关闭:一旦软件实体被开发完成,就不应该修改它的源代码。 要看实际场景,比如组内…

【深度学习】— 多输入多输出通道、多通道输入的卷积、多输出通道、1×1 卷积层、汇聚层、多通道汇聚层

【深度学习】— 多输入多输出通道、多通道输入的卷积、多输出通道、11 卷积层、汇聚层、多通道汇聚层 多输入多输出通道多通道输入的卷积示例:多通道的二维互相关运算 多输出通道实现多通道输出的互相关运算 11 卷积层11 卷积的作用 使用全连接层实现 11 卷积小结 …

Spring——入门

概述 Spring是什么 Spring是一款主流的Java EE轻量级开源框架,其目的适用于简化Java企业级应用开发难度和开发周期。Spring用途不仅限于服务器端的开发,从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring框架…

计算机毕业设计Python+Neo4j中华古诗词可视化 古诗词智能问答系统 古诗词数据分析 古诗词情感分析 PyTorch Tensorflow LSTM

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

vue+exceljs前端下载、导出xlsx文件

首先安装插件 npm install exceljs file-saver第一种 简单导出 //页面引入 import ExcelJS from exceljs; import {saveAs} from file-saver; export default {methods: { /** 导出操作 */async handleExportFun() {let that this// 获取当前年月日 用户下载xlsx的文件名称设…

潮玩宇宙方块兽系统开发:可定制UI与多种游戏内嵌助力个性化体验

潮玩宇宙方块兽系统开发正在推动潮玩与游戏的融合,通过个性化的UI设计和多游戏内嵌模式,为用户带来了独一无二的体验。本文将从可定制UI、多游戏内嵌功能以及系统实现等方面入手,探讨如何构建一个极具吸引力的潮玩宇宙方块兽系统。 一、可定制…

【Windows修改Docker Desktop(WSL2)内存分配大小】

记录一下遇到使用Docker Desktop占用内存居高不下的问题 自从使用了Docker Desktop,电脑基本每天都需要重启,内存完全不够用,从16g扩展到24,然后到40G,还是不够用;打开Docker Desktop 运行时间一长&#x…

无人机之姿态融合算法篇

无人机的姿态融合算法是无人机飞行控制中的核心技术之一,它通过将来自不同传感器的数据进行融合,以实现更加精确、可靠的姿态检测。 一、传感器选择与数据预处理 无人机姿态融合算法通常依赖于多种传感器,包括加速度计、陀螺仪、磁力计等。这…