大数据机器学习与深度学习——回归模型评估

大数据机器学习与深度学习——回归模型评估

回归模型的性能的评价指标主要有:MAE(平均绝对误差)、MSE(平均平方误差)、RMSE(平方根误差)、R2_score。但是当量纲不同时,RMSE、MAE、MSE难以衡量模型效果好坏,这就需要用到R2_score。

平均绝对误差(MAE Mean Absolute Error)

是绝对误差的平均值,能更好地反映预测值误差的实际情况。

均方误差(MSE mean-square error)

该统计参数是预测数据和原始数据对应点误差的平方和的均值。

根均方根误差(RMSE Root Mean Square Error)

求均方误差的根号

决定系数(R-Squared Score)

决定系数R2 score(coefficient of determination),也称判定系数或者拟合优度。它是表征回归方程在多大程度上解释了因变量的变化,或者说方程对观测值的拟合程度如何。拟合优度的有效性通常要求:自变量个数:样本数>1:10。

R2 决定系数,反映因变量的全部变异能通过回归关系被自变量解释的比例。

在这里插入图片描述
根据 R-Squared 的取值,来判断模型的好坏,其取值范围为[0,1]:

如果结果是 0,说明模型拟合效果很差;

如果结果是 1,说明模型无错误。

一般来说,R-Squared 越大,表示模型拟合效果越好。R-Squared 反映的是大概有多准,因为,随着样本数量的增加,R-Square必然增加,无法真正定量说明准确程度,只能大概定量。

所以要想决定系数R2越接近1,必须满足MSE越小,也就是真实值与预测值相差不大,也就是模型拟合程度高,同时var方差越大,也就是我们的样本离散程度大,对应的我们实际采样过程中,就是要求样本是随机性,以及全面性,覆盖度广。

注意

决定系数适用于线性回归,单变量或者多元线性;y=ax或者y=ax1+bx2…; - 拟合模型是非线性的,不能用决定系数来评价其拟合效果,例如:BP神经网络;

当拟合程度不行,可以调整参数或者权重-例如a,b,使预测值与真实值越接近。

其中,分子部分表示真实值与预测值的平方差之和,类似于均方差 MSE;分母部分表示真实值与均值的平方差之和,类似于方差 Var。

(R-Squared score)-深度研究

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

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

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

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

# 根据公式,我们可以写出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:对所有输出的分数进行平均,并根据每个输出的方差进行加权。

r2_score: 0.47

r2_score偏小,预测效果一般。

注意事项

1、R-Squared score 一般用在线性模型中(非线性模型也可以用)

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

3、数据集的样本越大,R²越大,因此,不同数据集的模型结果比较会有一定的误差,此时可以使用Adjusted R-Square (校正决定系数),能对添加的非显著变量给出惩罚
校正决定系数(Adjusted R-Square)是多元线性回归模型中用于评估模型拟合优度的一种统计指标。它对决定系数(R-Square)进行了修正,考虑了模型中使用的自变量的数量。

决定系数(R-Square)用于衡量模型对因变量变异性的解释程度,其取值范围在0到1之间,越接近1表示模型对数据的解释越好。然而,当模型中增加自变量时,R-Square的值可能会增加,即使新加入的变量对模型的解释并不显著。为了解决这个问题,引入了校正决定系数。

校正决定系数

计算公式如下:

在这里插入图片描述

其中:

( R^2 ) 是决定系数。
( n ) 是样本数量。
( k ) 是模型中自变量的数量。
校正决定系数考虑了模型的自由度,通过对决定系数进行修正,避免了在模型中增加自变量时导致模型拟合度提高的情况。因此,校正决定系数通常对模型的泛化能力提供更准确的评估。

在实际应用中,分析人员通常会综合考虑决定系数和校正决定系数,以全面评估模型的拟合质量和适应性。

其中,n 是样本数量,p 是特征数量。

Adjusted R-Square 抵消样本数量对 R-Square的影响,做到了真正的 0~1,越大越好。

python中可以直接调用。

统计学理论

方差(variance):
计算公式:S2=1/n [(x1-X)2+(x2-X)2+(x3-X)2+…(xn-X)2] (X表示平均数)

方差在概率论和统计方差衡量随机变量或一组数据时离散程度的度量。

概率论中方差用来度量随机变量和其数学期望(即均值)之间的偏离程度。

统计中的方差(样本方差)是每个样本值与全体样本值的平均数之差的平方值的平均数。

代码实现

sklearn库调用模型评估

#导入相应的函数库
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
import numpy as np
import pandas as pd# 使用sklearn调用衡量线性回归的MSE 、 RMSE、 MAE、r2
from math import sqrt
from sklearn.metrics import mean_absolute_error
from sklearn.metrics import mean_squared_error
from sklearn.metrics import r2_score
print("mean_absolute_error:", mean_absolute_error(y_test, y_predict))
print("mean_squared_error:", mean_squared_error(y_test, y_predict))
print("rmse:", sqrt(mean_squared_error(y_test, y_predict)))
print("r2 score:", r2_score(y_test, y_predict))

原生实现

# 衡量线性回归的MSE 、 RMSE、 MAE、r2
from math import sqrt
mse = np.sum((y_test - y_predict) ** 2) / len(y_test)
rmse = sqrt(mse)
mae = np.sum(np.absolute(y_test - y_predict)) / len(y_test)
r2 = 1-mse/ np.var(y_test)#均方误差/方差
print(" mae:",mae,"mse:",mse," rmse:",rmse," r2:",r2)

应用

y_test1=np.array(Y_true_3[:,0:1])
y_predict1=np.array(predict[:,0])
y_test2=np.array(Y_true_3[:,1:2])
y_predict2=np.array(predict[:,1])
print("ROP   : R2:%.4f"% r2_score(y_test1, y_predict1),  " MSE:%.4f"%  mean_squared_error(y_test1, y_predict1),  "RMSE:%.4f" % calc_rmse(y_test1, y_predict1))
print("Torque: R2:%.4f"% r2_score(y_test2, y_predict2),  "MSE:%.4f"%  mean_squared_error(y_test2, y_predic

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

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

相关文章

Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子

Python实现多种图像锐化方法:拉普拉斯算子和Sobel算子 图像和视频逐渐成为人们生活中信息获取的重要来源,而图像和视频在传输过程中有很多因素可能造成图像模糊,比如不正确的聚焦会产生离焦模糊,景物和照相机的相对运动会造成运动…

GBASE南大通用携手宇信科技打造“一表通”全链路解决方案

什么是“一表通”? “一表通”是国家金融监督管理总局为发挥统计监督效能、完善银行保险监管统计制度、推进监管数据标准化建设、打破数据壁垒,而制定的新型监管数据统计规范。相较于以往的报送接口,“一表通”提高了对报送时效性、校验准确性…

java集合的迭代器与遍历

文章目录 迭代器Iterator1、什么是Iterator2,iterator接口的API3、Irerator()方法细节解释4. Irerator的原理示意图5. forEach循环与Iterator遍历的区别与联系 ListIterator1.ListIterator的概述(1) 概念(2) 解析 2.ListIterator的生成3.ListIterator的API4.ListIte…

【从零开始学习JVM | 第九篇】了解 常见垃圾回收器

前言: 垃圾回收器(Garbage Collector)是现代编程语言中的一项重要技术,它提供了自动内存管理的机制,极大地简化了开发人员对内存分配和释放的繁琐工作。通过垃圾回收器,我们能够更高效地利用计算机的内存资…

selenium+python自动化测试 —— 解决无法启动IE浏览器及报错问题!

前言:记录启动IE浏览器的报错及解决方法。 错误1: selenium.common.exceptions.WebDriverException: Message: IEDriverServer.exe executable needs to be in PATH. Please download from http://selenium-release.storage.googleapis.com/index.html…

【C语言:动态内存管理】

文章目录 前言1.malloc2.free3.calloc4.realloc5.动态内存常见错误6.动态内存经典笔试题分析7.柔性数组8.C/C中的内存区域划分 前言 文章的标题是动态内存管理,那什么是动态内存管理?为什么有动态内存管理呢? 回顾一下以前学的知识&#xff…

SpringBoot+Vue3前后端快速整合入门

前言 最近需要维护一个个人项目,由于笔者是一个大后端,所以借此机会把前端学习过程记录一下,方便后续回顾。 前端项目初始化 安装npm 在前端项目初始化时,我们必须要安装好node,官网地址如下,因为笔者后…

1.【Multisim仿真】数电模电学习,仿真软件的初步使用

学习计划路径: >Multisim电路仿真软件熟练掌握 >数字电路基础课程 >逻辑电路设计与应用 >熟练掌握存储器、脉冲波形发生器、D/A和A/D转换器原理 >基本元器件熟练掌握 >晶体管放大电路及负反馈放大电路 >集成运算放大器设计 >电压变电流电路…

解决GateWay报错:Exceeded limit on max bytes to buffer : 262144

场景: 前端传来了一个大的字符串 发现请求不通 一番调试发现SpringGateway 默认内存缓冲区262144字节 网上查了很多种常见的解决方案无效之后 直接重写底层 网友的解决方案 方案1(无效) 直接修改缓冲区大小 spring:codec:max-in-memory-s…

【STM32】STM32学习笔记-LED闪烁 LED流水灯 蜂鸣器(06-2)

00. 目录 文章目录 00. 目录01. GPIO之LED电路图02. GPIO之LED接线图03. LED闪烁程序示例04. LED闪烁程序下载05. LED流水灯接线图06. LED流水灯程序示例07. 蜂鸣器接线图08. 蜂鸣器程序示例09. 下载10. 附录 01. GPIO之LED电路图 电路图示例1 电路图示例2 02. GPIO之LED接线图…

持续集成交付CICD:Jenkins使用GitLab共享库实现自动上传前后端项目Nexus制品

目录 一、实验 1.GitLab本地导入前后端项目 2.Jenkins新建前后端项目流水线 3.Sonarqube录入质量阈与质量配置 4.修改GitLab共享库代码 5.Jenkins手动构建前后端项目流水线 6.Nexus查看制品上传情况 7.优化代码获取RELEASE分支 8.优化Jenkins流水线项目名称 一、实验 …

计算机网络:数据链路层(网桥)

带你速通计算机网络期末 目录 一、冲突域和广播域 二、网桥介绍 三、网桥分类—―透明网桥 四、网桥分类―—源路由网桥 五、多接口网桥―—以太网交换机 总结 一、冲突域和广播域 冲突域:在同一个冲突域中的每一个节点都能收到所有被发送的帧。简单的说就是同一时间内只…

华为数通---配置基本QinQ示例

QinQ简介 定义 QinQ(802.1Q-in-802.1Q)技术是一项扩展VLAN空间的技术,通过在802.1Q标签报文的基础上再增加一层802.1Q的Tag来达到扩展VLAN空间的功能,可以使私网VLAN透传公网。由于在骨干网中传递的报文有两层802.1Q Tag&#x…

MySQL之DQL语句

DQL语句 DQL(Data Query Language)查询数据 操作查询:select简单的查询,复杂的查询数据库中最核心的语言,最重要的语句使用频繁的语句 指定查询 查询全部 语法: select 全部字段(*&#x…

什么是tomcat?tomcat是干什么用的?

目录 Tomcat 的主要用途包括: 托管Java Web应用程序: Servlet 容器: 以下是关于Servlet容器的一些关键特性和功能: 生命周期管理: 多线程支持: HTTP请求处理: HTTP响应生成:…

金融众筹系统源码:适合创业孵化机构 附带完整的搭建教程

互联网技术的发展,金融众筹作为一种新型的融资方式,逐渐成为创业孵化机构的重要手段。为了满足这一需求,金融众筹系统源码就由此而生,并附带了完整的搭建教程。 以下是部分代码示例: 系统特色功能一览: 1.…

《从入门到精通:AJAX基础知识解析,前端开发中利器》基础篇

目录 学习目标: 学习目录: 学习时间: 学习内容: 什么是 AJAX? 怎么用 AJAX ? 认识 URL 协议 域名 资源路径 获取 - 新闻列表 URL 查询参数 axios-查询参数 常用请求方法和数据提…

Jenkins离线安装部署教程简记

前言 在上一篇文章基于Gitee实现Jenkins自动化部署SpringBoot项目中,我们了解了如何完成基于Jenkins实现自动化部署。 对于某些公司服务器来说,是不可以连接外网的,所以笔者专门整理了一篇文章总结一下,如何基于内网直接部署Jen…

ELADMIN - 免费开源 admin 后台管理系统,基于 Spring Boot 和 Vue ,包含前端和后端源码

一款简单好用、功能强大的 admin 管理系统,包含前端和后端源码,分享给大家。 ELADMIN 是一款基于 Spring Boot、Jpa 或 Mybatis-Plus、 Spring Security、Redis、Vue 的前后端分离的后台管理系统。 ELADMIN 的作者在 Github 和 Gitee 上看了很多的项目&…

Java项目学生管理系统六后端补充

班级管理 1 班级列表:后端 编写JavaBean【已有】编写Mapper【已有】编写Service编写controller 编写Service 接口 package com.czxy.service;import com.czxy.domain.Classes;import java.util.List;/*** author 桐叔* email liangtongitcast.cn* description*/ p…