深度研究:回归模型评价指标R2_score

2023-11-17

回归模型的性能的评价指标主要有:RMSE(平方根误差)、MAE(平均绝对误差)、MSE(平均平方误差)、R2_score。但是当量纲不同时,RMSE、MAE、MSE难以衡量模型效果好坏。这就需要用到R2_score,实际使用时,会遇到许多问题,今天我们深度研究一下。

预备知识

搞清楚R2_score计算之前,我们还需要了解几个统计学概念。

若用$y_i$表示真实的观测值,用$\bar{y}$表示真实观测值的平均值,用$\hat{y_i}$表示预测值,则:

回归平方和:SSR

$$SSR = \sum_{i=1}^{n}(\hat{y_i} - \bar{y})^2$$

即估计值与平均值的误差,反映自变量与因变量之间的相关程度的偏差平方和

残差平方和:SSE

$$SSE = \sum_{i=1}^{n}(y_i-\hat{y_i} )^2$$

即估计值与真实值的误差,反映模型拟合程度

总离差平方和:SST
$$SST =SSR + SSE= \sum_{i=1}^{n}(y_i - \bar{y})^2$$

即平均值与真实值的误差,反映与数学期望的偏离程度

R2_score计算公式

R^2 score,即决定系数,反映因变量的全部变异能通过回归关系被自变量解释的比例。计算公式:
$$R^2=1-\frac{SSE}{SST}$$

$$R^2 = 1 - \frac{\sum_{i=1}^{n} (y_i - \hat{y}i)^2}{\sum{i=1}^{n} (y_i - \bar{y})^2}$$
进一步化简
$$R^2 = 1 - \frac{\sum\limits_i(y_i - y_i)^2 / n}{\sum\limits_i(y_i - \hat{y})^2 / n} = 1 - \frac{RMSE}{Var}$$
分子就变成了常用的评价指标均方误差MSE,分母就变成了方差。

对于$R^2$可以通俗地理解为使用均值作为误差基准,看预测误差是否大于或者小于均值基准误差。

R2_score = 1,样本中预测值和真实值完全相等,没有任何误差,表示回归分析中自变量对因变量的解释越好。

R2_score = 0。此时分子等于分母,样本的每项预测值都等于均值。

R2_score不是r的平方,也可能为负数(分子>分母),模型等于盲猜,还不如直接计算目标变量的平均值。

r2_score使用方法

根据公式,我们可以写出r2_score实现代码

1- mean_squared_error(y_test,y_preditc)/ np.var(y_test)

也可以直接调用sklearn.metrics中的r2_score

sklearn.metrics.r2_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
#y_true:观测值
#y_pred:预测值
#sample_weight:样本权重,默认None
#multioutput:多维输入输出,可选‘raw_values’, ‘uniform_average’, ‘variance_weighted’或None。默认为’uniform_average’;
raw_values:分别返回各维度得分
uniform_average:各输出维度得分的平均
variance_weighted:对所有输出的分数进行平均,并根据每个输出的方差进行加权。

sklearn.metrics.r2_score使用方法

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import r2_score
#导入数据
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
diabetes_X = diabetes_X[:, np.newaxis, 2]
#划分测试集验证集
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]
# 创建线性回归模型
regr = linear_model.LinearRegression()
# 训练模型
regr.fit(diabetes_X_train, diabetes_y_train)
# 预测
diabetes_y_pred = regr.predict(diabetes_X_test)
# 模型评价
print('r2_score: %.2f'
      % r2_score(diabetes_y_test, diabetes_y_pred))
# 绘制预测效果图
plt.scatter(diabetes_X_test, diabetes_y_test,  color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()

r2_score: 0.47
743008-20191211135415789-2032632183.png

r2_score偏小,预测效果一般。

注意事项

1、$R^2$ 一般用在线性模型中(非线性模型也可以用)

2、$R^2$不能完全反映模型预测能力的高低,某个实际观测的自变量取值范围很窄,但此时所建模型的R2 很大,但这并不代表模型在外推应用时的效果肯定会很好。

3、数据集的样本越大,R²越大,因此,不同数据集的模型结果比较会有一定的误差,此时可以使用Adjusted R-Square (校正决定系数),能对添加的非显著变量给出惩罚:

$$R^2_{\text{Adj}}=1-(1-R^2)\frac{n-p-1}{n-1}$$
n是样本的个数,p是变量的个数

Reference

https://scikit-learn.org
https://zhuanlan.zhihu.com/p/36305931
https://www.jianshu.com/p/9ee85fdad150
https://blog.csdn.net/Dear_D/article/details/86144696
https://blog.csdn.net/shy19890510/article/details/79375062

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度研究:回归模型评价指标R2_score 的相关文章

  • Docker容器与虚拟化技术:GitHub账户注册

    目录 一 实验 1 GitHub 一 实验 1 GitHub 1 GitHub是一个面向开源及私有软件项目的托管平台 因为只支持Git作为唯一的版本库格式进行托管 故名GitHub 2 官网 GitHub Let s build from
  • ArcGIS构建缓冲区,合并两个重叠的面

    问题描述 需要构建线缓冲区 并将重叠的缓冲区合并成一个面要素 不相邻的不需要合并 解决思路 构建缓冲区 并进行融合 相关工具描述 ArcMap提供的缓冲区 buffer 工具 融合类型有三种 但ALL不能满足需求 联合 Union 工具 会
  • 集成FCM推送一系列问题

    FCM Firebase Cloud Messaging 首先集成FCM需要一定的条件 必要条件 Android2 3版本以上的手机和拥有Google service的框架应用和不在国内的网络 使用外网 第一国内的手机一般阉割了Google
  • 教你用Python爬网站数据,并用BI可视化分析!

    两年时间里曾经换过一份工作 一直都是从事大数据相关的行业 目前是一家企业的BI工程师 主要工作就是给业务部门出报表和业务分析报告 回想自己过去的工作成绩也还算是不错的 多次通过自己分析告 解决了业务的疑难杂症 领导们各种离不开 但安逸久了总
  • C++17新特性之try_emplace与insert_or_assign

    由于std map中 元素的key是唯一的 我们经常遇到这样的场景 向map中插入元素时 先检测map指定的key是否存在 不存在时才做插入操作 如果存在 直接取出来使用 或者key不存在时 做插入操作 存在时做更新操作 通用的做法 可以直
  • Sqoop脚本调用

    在生产环境中 肯定不能直接去跑命令 需要使用脚本文件 然后定时执行脚本文件即可 cd usr hdk mkdir job cd job vi RDBMS2HDFS opt import connect jdbc mysql hadoop01
  • blender基础入门 / 操作快捷键

    鼠标停留在工具按钮上 按F1 打开官网在线帮助 基本显示 操作框放大缩小 T 显示 隐藏左侧工具栏 基本信息侧边栏Sidebar 展开 弹出 快捷键N 模型比例1 1 保持自身比例数据 模型游标轴点中心点设置位置 游标模式 shift C游
  • Apache下 FastCGI 配置小结

    http hi baidu com clusterlee item aa9a122c84cf94d40e37f985 一 下载 FastCGI模块 http www fastcgi com dist mod fastcgi 2 4 6 ta
  • 知识蒸馏综述:代码整理

    GiantPandaCV导语 收集自RepDistiller中的蒸馏方法 尽可能简单解释蒸馏用到的策略 并提供了实现源码 1 KD Knowledge Distillation 全称 Distilling the Knowledge in
  • 简单使用easyExcel实现对excel读和写操作

    1 引入依赖 easyexcel底层封装了poi所以必须引入poi而且版本需要进行对应如下
  • Python报错:requests.exceptions.SSLError: HTTPSConnectionPool(host=‘huggingface.co‘, port=443): Max ret

    1 Python报错 2 解决方法 出现问题的原因是运行程序的时候没有联网 但是使用了未下载的bert base chinese模型 我们可以将模型手动下载 然后放入到对应文件夹即可 3 下载bert base chinese模型 首先进入
  • java 字符串包含_java判断字符串包含某个字符的实例方法

    java判断字符串是否包含某个字符的方法 一 contains方法 1 描述 java lang String contains 方法返回true 当且仅当此字符串包含指定的char值序列 2 声明 public boolean conta
  • uc浏览器显示服务器错误,使用UC浏览器打开网页报错,无法播放优酷官网视频...

    适用产品 HUAWEI MateBook 13 2021款intel i7 8g 512g 集显 触屏 2020 锐龙版 amd r5 16g 512g 集显 锐龙版2020款 amd r5 8g 512g 集显 触屏 2021款 inte
  • 机器学习学习笔记——数据集划分(留出法)

    编译工具 pycharm 学习工具 Anaconda notebook 在机器学习算法中 我们通常将原始数据集划分为三个部分 划分要尽可能保持数据分布的一致性 1 Training set 训练集 训练模型 2 Validation set
  • 使用shell(sh)文件批量修改文件的权限

    最近在www coolketang com上实现了苹果移动端互动教程的Web化 但是课程资料在上传到云服务器时 总是出现权限问题 而无法打开 所以写了个脚本 在上传服务器之前 批量修改资源的权限 代码较少 可以直接阅读 编辑完保存为 sh文
  • 最强自动化测试框架Playwright (27)-跟踪查看器

    Playwright Trace Viewer 是一个 GUI 工具 可帮助您在脚本运行后探索记录的 Playwright 跟踪 可以本地打开 也可以在trace playwright dev 打开 录制跟踪文件 使用context tra
  • 在物联网中应用机器学习

    欢迎大家前往腾讯云 社区 获取更多腾讯海量技术实践干货哦 本文由未来守护者发表于云 社区专栏 本项目探讨如何将机器学习 Machine learning 应用到物联网 IoT Internet of Things 中 我们将使用 Andro
  • 关于数据分析流程详解

    在数据分析过程中 主要是以下几个过程 一 明确分析目的 首先要明确自己的分析目的 只有明确目的的分析才能更有效的解决自己的问题 打到自己的目的 大量数据 试探性的分析除外 但是即使是试探性的分析过程 前期也是需要一个假设的分析目的的 二 数
  • split()正则表达式按照长度切割

    String split s s length 2 gt 0 split lt G 2 正则表达式匹配 按2位长度分割
  • 期货止损篇1:固定点数止损真的好用,只是90%的人都用错了

    最近问到止损的朋友比较多 这个系列跟大家分享下个人对于止损的一些看法 每个人刚入市的时候 最常听到的就是固定点数止损 比如固定3个点止损 固定10个点止损 固定20个点止损 固定50个点止损 用久了 很多人就抱怨这个方法不靠谱 大师是不是留

随机推荐

  • Keil报错 requires ANSI-style prototype

    在进行模块化程序设计时遇到这种error 这是头文件没有定义的问题 首先在同一个目录下建立一个 h文件 第二步打开文件 进行编辑 要用到 ifndef define endif 这是为了避免重复定义 ifndef后面跟的是头文件名称的大写
  • matlab 浅浅实现随机森林(Random forest)算法对高光谱图像数据进行分类,输出分类结果图和精度评价

    利用随机森林 Random forest 算法对数据进行分类 输出分类结果图 利用验证样本集计算出分类结果的混淆矩阵 输出分类结果的整体分类精度 和每一类地 物的分类精度 emmm不要对下面的内容报有太大的期待 要求使用随机森林算法 我尝试
  • UE4如何上传文件

    上传文件示例代码 InUrl为上传URL InFiles为本地文件路径的数组 Boundary为分隔符 用来分隔文件 其他地方不能出现该字符串 每个文件都以 r n Boundary r n 开始 即BeginBoundry 分隔符之后是文
  • Unity中AnimatorController的配置

    AnimatorController 动画控制器 的配置编辑是在Unity的Animator视图中完成的 通过在Animator视图中创建动画状态 以及设置过渡条件 构建动画状态机 以可视化地控制动画的播放 下面介绍一些配置动画控制器的要点
  • ord(readfn(1)) TypeError: ord() expected a character, but string of length 0 found --记录

    背景 从git clone 下来一个 Django 1 1项目 而本地安装是 Django 3 3 而且 使用了whoosh 出现如下问题 File usr local lib python3 7 site packages whoosh
  • Mysql error 1045的解决

    网上千篇一律给的答案是改配置文件 百度第一页都是 其实改的那项配置是让MySQL按安全模式启动 该模式不用输入密码 看似解决了问题 其实不是问题的原因 搜一下官方文档可以很容易发现 1045的含义是 用户名或密码错误 所以 再遇到1045
  • Doris编译

    使用Doris 官方不提供编译好的jar包 需要自己编译 最方便的方式是通过Docker编译 避免了安装各种环境的繁琐 一 准备服务器 用虚拟机 云服务器都可以编译 不过编译所需要的内存以16G为佳 如果你的机器没有这么多内存 速度会比较慢
  • fatal: unable to access ‘https://github.com/xxx‘: Failed to connect to github.com

    执行这两行命令 端口号改成自己代理服务器的端口 我的是7890 git config global https proxy 127 0 0 1 7890 git config global http proxy 127 0 0 1 7890
  • Bash中各种括号的使用

    Bash中有各种括号 包括单小括号 双小括号 单中括号 双中括号 单大括号 而且它们之间很容易混淆 所以很有必要总结一下它们的用法 1 的用法 单个小括号用来创建一个子shell 例如 pwd home xfeng cd tmp pwd t
  • VMware虚拟网络编辑器配置

    一 NAT模式网络设置 把下面的ip 子网掩码 网关记住 切换到network scripts 目录下 cd etc sysconfig network scripts 修改ifcfg ens33 这个文件 下图圈2的IPADDR设置一个在
  • 洛谷 P1046 陶陶摘苹果

    该问题涉及数组的输入和输出问题 以及数据的换行输入问题 较为简单 题目描述 陶陶家的院子里有一棵苹果树 每到秋天树上就会结出 1010 个苹果 苹果成熟的时候 陶陶就会跑去摘苹果 陶陶有个 3030 厘米高的板凳 当她不能直接用手摘到苹果的
  • sqlilabs—less8

    文章目录 Sqlilabs less8 1 判断注入点 2 爆字段 3 判断数据库 1 判断数据库名长度 2 判断数据库名称 4 判断表 1 有几个表 2 分别判断表长度 3 分别判断表名称 5 判断列 1 判断表中有几个字段 有几列 2
  • Mysql数据库delete操作没报错,却删除不了数据

    1 在操作页面执行删除操作 但没有删除成功 删除过程无报错 以下为删除操作的控制台日志 2 在数据库执行删除操作 表数据 执行删除语句删除staffId为3的数据 结果却没有删除成功 3 原因 staffId为3的数据的flag为Null
  • ImageMagick批量压缩图片

    2019独角兽企业重金招聘Python工程师标准 gt gt gt bin sh for img in find image name jpg do newimg basename img convert quality 75 img ok
  • dolphinscheduler配置之 master.properties/worker.properties及常见问题学习

    master properties master execute thread num master exec threads 50 master execute task number in parallel master exec ta
  • c#读取csv到数组_如何读取CSV文件并将值存储到C#中的数组中?

    CSV文件是逗号分隔的文件 用于以有组织的方式存储数据 它通常以表格形式存储数据 大多数企业组织将其数据存储在CSV文件中 CSV文件是逗号分隔的文件 用于以有组织的方式存储数据 它通常以表格形式存储数据 大多数企业组织将其数据存储在CSV
  • The server time zone value ‘Öйú±ê׼ʱ¼ä‘ is unrecognized or represents more than one time zone

    The server time zone value is unrecognized or represents more than one time zone You must configure either the server or
  • ThreadPoolTaskScheduler轻量级多线程定时任务框架

    ThreadPoolTaskScheduler轻量级多线程定时任务框架 前言 一 ThreadPoolTaskScheduler是什么 二 上干货 1 ThreadPoolTaskScheduler常用的api介绍 2 springboot
  • 华为OD机试 - Linux发行版的数量(Java)

    题目描述 Linux操作系统有多个发行版 distrowatch com提供了各个发行版的资料 这些发行版互相存在关联 例如Ubuntu基于Debian开发 而Mint又基于Ubuntu开发 那么我们认为Mint同Debian也存在关联 发
  • 深度研究:回归模型评价指标R2_score

    回归模型的性能的评价指标主要有 RMSE 平方根误差 MAE 平均绝对误差 MSE 平均平方误差 R2 score 但是当量纲不同时 RMSE MAE MSE难以衡量模型效果好坏 这就需要用到R2 score 实际使用时 会遇到许多问题 今