评估 机器学习 回归模型 的性能和准确度

      回归 是一种常用的预测模型,用于预测一个连续因变量和一个或多个自变量之间的关系。

那么,最后评估 回归模型 的性能和准确度非常重要,可以帮助我们判断模型是否有效并进行改进。

接下来,和大家分享如何评估 回归模型 的性能和准确度。

一、 评估指标

1.1 均方误差(MSE)

      均方误差(Mean Squared Error, MSE衡量的是预测值与真实值之间的平均平方差异。MSE越小,模型的预测精度越高。由于平方误差将偏差放大,因此MSE对异常值(Outliers)比较敏感。

MSE=\frac{1}{n}\sum_{i=1}^{n}\left ( y_{i}-\hat{y}_{i} \right )^{2}

  •  y_{i} 是第  i 个样本的真实值。\hat{y}_{i} 是第  i 个样本的预测值。n 是样本总数。

from sklearn.metrics import mean_squared_error

# y_true 是真实值数组,y_pred 是预测值数组
mse = mean_squared_error(y_true, y_pred)
print("Mean Squared Error (MSE):", mse)

1.2 均方根误差(RMSE)

        均方根误差(Root Mean Squared Error, RMSE是MSE的平方根,具有与原数据相同的量纲(单位),因此更容易解释。它同样对异常值敏感。 

RMSE=\sqrt{\frac{1}{n}\sum_{i=1}^{n}\left ( y_{i}-\hat{y}_{i} \right )^{2}}

import numpy as np

rmse = np.sqrt(mean_squared_error(y_true, y_pred))
print("Root Mean Squared Error (RMSE):", rmse)

1.3 平均绝对误差(MAE)

       平均绝对误差(Mean Absolute Error, MAE衡量的是预测值与真实值之间的平均绝对差异。相比MSE和RMSE,MAE对异常值不那么敏感。

 MAE=\frac{1}{n}\sum_{i=1}^{n} \left | y_{i}-\hat{y}_{i} \right |

from sklearn.metrics import mean_absolute_error

mae = mean_absolute_error(y_true, y_pred)
print("Mean Absolute Error (MAE):", mae)

1.4. 决定系数(R²)

       决定系数衡量的是模型解释数据变异的比例。其取值范围在0到1之间,值越接近1,模型解释能力越强。如果R²为0,表示模型没有解释任何数据变异;如果R²为1,表示模型完美地解释了数据变异。 

 R^{2}=\frac{\sum_{i=1}^{n}\left ( y_{i}-\hat{y}_{i} \right )^{2}}{\sum_{i=1}^{n}\left ( y_{i}-\bar{y}_{i} \right )^{2}}

  • \bar{y}_{i}是真实值的平均值。

from sklearn.metrics import r2_score

r2 = r2_score(y_true, y_pred)
print("R² (Coefficient of Determination):", r2)

二、 评估图

import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression

# 生成示例数据
np.random.seed(0)
X = 2 * np.random.rand(1000, 1)
y = 4 + 3 * X + np.random.randn(1000, 1)

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)

# 训练线性回归模型
model = LinearRegression()
model.fit(X_train, y_train)

# 预测
y_train_pred = model.predict(X_train)
y_test_pred = model.predict(X_test)

2.1  真实值与预测值的散点图

我们可以通过散点图比较真实值与预测值,直观展示模型的预测效果。 

plt.scatter(X_test, y_test, color='black', label='Actual Values')
plt.scatter(X_test, y_test_pred, color='blue', label='Predicted Values')
plt.plot(X_test, y_test_pred, color='red', linewidth=2, label='Regression Line')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Actual vs Predicted Values')
plt.legend()
plt.show()

2.2  预测误差的分布图 

 预测误差(真实值与预测值的差异)的分布图可以帮助我们了解模型误差的分布情况。

errors = y_test - y_test_pred

plt.hist(errors, bins=20, edgecolor='black')
plt.xlabel('Prediction Error')
plt.ylabel('Frequency')
plt.title('Distribution of Prediction Errors')
plt.show()

2.3  学习曲线 

       习曲线展示了训练误差和验证误差随训练集大小的变化情况,有助于我们诊断模型是否存在欠拟合或过拟合问题。 

from sklearn.model_selection import learning_curve

train_sizes, train_scores, test_scores = learning_curve(model, X, y, cv=5, scoring='neg_mean_squared_error')

train_scores_mean = -train_scores.mean(axis=1)
test_scores_mean = -test_scores.mean(axis=1)

plt.plot(train_sizes, train_scores_mean, label='Training error')
plt.plot(train_sizes, test_scores_mean, label='Validation error')
plt.ylabel('MSE')
plt.xlabel('Training set size')
plt.title('Learning Curves')
plt.legend()
plt.show()

       以上是详细介绍如何评估 回归模型 的性能和准确度,包括各个评估指标的原理、公式推导以及在Python中的实现。

参考:

机器学习模型评估的方法总结(回归、分类模型的评估)_分类模型评估方法-CSDN博客

模型评估指标总结(预测指标、分类指标、回归指标)_常见模型误差评价指标-CSDN博客

机器学习笔记:回归模型评估指标——MAE、MSE、RMSE、MAPE、R2等 - Hider1214 - 博客园

持续更新中。。。  

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

移植 AWTK 到 纯血鸿蒙 (HarmonyOS NEXT) 系统 (6) - 触屏事件

AWTK 作为一个GUI引擎,自然少不了对触屏事件的支持。这里我们先支持单点触摸,后续再支持多点手势。 1. 注册 XComponent 的触屏事件回调 这个在 AppNapi 的构造函数中完成: AppNapi::AppNapi(std::string &id) {id_ id;component_ n…

2024年大厂AI大模型面试题精选与答案解析

前言 随着AI市场,人工智能的爆火,在接下来的金九银十招聘高峰期,各大科技巨头和国有企业将会对AGI人才的争夺展开一场大战,为求职市场注入了新的活力。 为了助力求职者在面试中展现最佳状态,深入理解行业巨头的选拔标…

GNN 训练点击-购买 预测模型

搜集到click-buy数据集, 数据集分享在网盘 通过百度网盘分享的文件:数据集_20241031_220915 链接:https://pan.baidu.com/s/1qcXAO_P1h3Vrrui5qFbYLw?pwd6f3m 其中 yoochoose-buys.dat 特征含义buy_df.columns [session_id, timestamp, …

SpringMvc day1102

ok了家人们今天我们学习SpringMvc,之后学习SpringBoot,let‘s go 六.拦截器 6.1 拦截器概述 Spring MVC 的处理器拦截器类似于 Servlet 开发中的过滤器 Filter ,用于对处理器 ( 自己编写的 Controller) 进行预处理和后 处理。用户可以自…

项目管理(风险:范围、成本、时间、质量)

项目管理主要是围绕着范围、成本、时间、质量,每个部分都存在不同的风险。 存在潜在的风险方面,也有可能是法律风险、合作方带来的风险等。 减少风险: 提前与技术沟通方案。产品内部先讨论。每日例会:同步信息,减少…

6.0、静态路由

路由器最主要的功能就是转发数据包。路由器转发数据包时需要查找路由表(你可以理解为地图),管理员可以直接手动配置路由表,这就是静态路由。 1.什么是路由? 在网络世界中,路由是指数据包在网络中的传输路…

网络层3——IP数据报转发的过程

目录 一、基于终点的转发 1、理解 2、IP数据报转发过程 二、最长前缀匹配 1、理解 2、主机路由 3、默认路由 三、二叉线索查找 一、基于终点的转发 1、理解 理解什么叫终点转发 IP数据报的传递,交给路由器后 可不可以做到直接发送给目的主机呢?…

VMware虚拟机Debian扩展磁盘

一、 版本 VMware:Workstation 17 Pro虚拟机:Debian11 二、 VMware虚拟机扩展 虚拟机关机状态快照或者备份:以免扩容失败导致文件丢失虚拟机——设置——硬盘——磁盘使用工具——扩展——扩展磁盘容量——设置为想要的大小 三、 虚拟机…

新能源汽车的未来:车载电源与V2G技术的前景

近年来,新能源汽车在全球市场上发展迅速,尤其是在中国,新能源汽车的月销量已经超过了燃油车。随着新能源技术的不断发展,新能源汽车不仅仅是作为出行工具,而逐渐成为“移动能源站”。本文将探讨电动汽车的车载外放电功…

JavaScript知识点梳理及案例实践

1. Date对象 创建Date对象 //方法1:不指定参数 var nowd1new Date(); console.log(nowd1.toLocaleString( )); //方法2:参数为日期字符串 var d2new Date("2004/3/20 11:12"); console.log(d2.toLocaleString( )); var d3new Date("04/…

[vulnhub]DC:7

https://www.vulnhub.com/entry/dc-7,356/ 端口扫描主机发现 探测存活主机,178是靶机 nmap -sP 192.168.75.0/24 Starting Nmap 7.94SVN ( https://nmap.org ) at 2024-11-03 13:30 CST Nmap scan report for 192.168.75.1 Host is up (0.00037s l…

探索React源码:React Diff

本篇文章我们来了解一下Diff算法的实现过程。 相关概念 React中的各种节点 假设当前存在一个DOM节点,触发了一次更新,那么在协调的过程中,会有四种节点和该节点相关联: 该DOM节点本身。 workInProgress fiber,更新过程…

开源库 FloatingActionButton

开源库FloatingActionButton Github:https://github.com/Clans/FloatingActionButton 这个库是在前面这个库android-floating-action-button的基础上修改的,增加了一些更强大和实用的特性。 特性: Android 5.0 以上点击会有水波纹效果 可以选择自定义…

微服务设计模式 - 重试模式(Retry Pattern)

微服务设计模式 - 重试模式(Retry Pattern) 定义 重试模式(Retry Pattern)是一种微服务中的设计模式,用于在临时性失败(如网络故障或暂时不可用的服务)发生时,自动重新尝试请求&…

HTML 基础标签——链接标签 <a> 和 <iframe>

文章目录 1. `<a>` 标签属性详细说明示例2. `<iframe>` 标签属性详细说明示例注意事项总结链接标签在HTML中是实现网页导航的重要工具,允许用户从一个页面跳转到另一个页面或嵌入外部内容。主要的链接标签包括 <a> 标签和<iframe> 标签。本文将深入探…

Netty 组件介绍 - Future Promise

在异步处理时&#xff0c;经常用到这两个接口 netty 中的 Future 继承 jdk 中的 FutuFuture&#xff0c;而Promise 又对 netty Future 进行了扩展。 idk Future 只能同步等待任务结束&#xff08;或成功或失败)才能得到结果netty Future 可以同步等待任务结束得到结也可以异…

Excel:vba实现批量插入图片批注

实现的效果&#xff1a;实现的代码如下&#xff1a; Sub InsertImageNamesAndPictures()Dim PicPath As StringDim PicName As StringDim PicFullPath As StringDim RowNum As IntegerDim Name As StringDim Comment As CommentDim folder As FileDialog 定义文件选择对话框 清…

C++(类和对象-友元)

友元的作用 作用&#xff1a; 在C中&#xff0c;友元&#xff08;friend&#xff09;是一种特殊的类成员&#xff0c;它可以让一个函数或者类访问其他类的私有&#xff08;private&#xff09;和保护&#xff08;protected&#xff09;成员。 注意&#xff1a; 友元的使用应该谨…

ssm044基于java和mysql的多角色学生管理系统+jsp(论文+源码)_kaic

毕 业 设 计&#xff08;论 文&#xff09; 题目&#xff1a;学生管理系统设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本学生管理系统就是在这…

猜字谜 华为OD

源码 Java import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test;import java.util.ArrayList; import java.util.List; import java.util.TreeSet;public class GuessWord {public Input input;BeforeEachpublic void init() {input new Input("…