机器学习回归任务指标评价及Sklearn神经网络模型评价实践

news2024/11/19 7:44:43

机器学习回归模型评价是指对回归模型的性能进行评估,以便选择最佳的回归模型。其中,MAE、MSE、RMSE 用于衡量模型预测值与真实值之间的误差大小,R² 用于衡量模型对数据的拟合程度。在实际应用中,我们可以使用这些指标来评估回归模型的性能,并对模型进行优化。

例如,在工业领域,回归算法可以通过对历史数据的回归分析,预测用电负荷、发电量等生产指标。

1. 机器学习回归模型的预测结果评价

机器学习回归模型的预测结果评价有很多方法,以下是一些常用的方法:

R2(决定系数):R2评估模型对数据的拟合程度,它的取值范围为0到1,越接近1表示模型的拟合程度越好(sklearn回归模型评估所使用的score默认是R2的计算公式)。R2的计算公式如下:

R 2 = 1 − ∑ i = 1 n ​ ( y i ​ − y i ^ ​ ) 2 ∑ i = 1 n ​ ( y i ​ − y i ˉ ​ ) 2 ​ R2=1−\frac{\sum_{i=1}^{n}​(y_i​−\hat{y_i}​)^2}{\sum_{i=1}^n​(y_i​−\bar{y_i}​)^2}​ R2=1i=1n(yiyiˉ)2i=1n(yiyi^)2

R2(决定系数)回归评分函数的最好分数是1.0,它可以是负数(因为模型可以任意变差)。

平均绝对误差(Mean Absolute Error,MAE):MAE是预测值与真实值之间差的绝对值的平均数,它的值越小表示模型预测的准确度越高。计算公式为:

M A E = 1 n ∑ ​ i = 1 n ​ ∣ y i ​ − y i ^ ​ ∣ MAE=\frac{1}{n}\sum_{​i=1}^n​∣y_i​−\hat{y_i}​∣ MAE=n1i=1nyiyi^

又称L1范数损失,来衡量预测值与真实值之间的真实距离。

均方误差(Mean Squared Error,MSE):MSE是预测值与真实值之间差的平方的平均数,它的值越小表示模型预测的准确度越高。计算公式为:

M S E = 1 n ∑ ​ i = 1 n ​ ( y i ​ − y i ^ ) 2 MSE=\frac{1}{n}\sum_{​i=1}^n​(y_i​−\hat{y_i})^2 MSE=n1i=1n(yiyi^)2

通过平方的形式便于求导,所以常被用作线性回归的损失函数。

均方根误差(Root Mean Squared Error,RMSE):RMSE是MSE的平方根,它的值越小表示模型预测的准确度越高。计算公式为:

R M S E = 1 n ∑ ​ i = 1 n ​ ( y i ​ − y i ^ ) 2 RMSE=\sqrt{\frac{1}{n}\sum_{​i=1}^n​(y_i​−\hat{y_i})^2} RMSE=n1i=1n(yiyi^)2

常用来作为机器学习模型预测结果衡量的标准,衡量观测值与真实值之间的偏差。受异常点影响较大,鲁棒性比较差。

其中, y i y_i yi​是真实值, y i ^ \hat{y_i} yi^​是预测值, y i ˉ \bar{y_i} yiˉ​是真实值的平均值,n 表示样本数量。

R平方(R-squared):R平方与R2的计算方式类似,但它可以对模型的复杂度进行惩罚,避免模型过拟合。

可决系数(Adjusted R-squared):可决系数是R平方的改进版本,它考虑了自变量数量对模型的影响,可以更准确地评估模型的拟合程度。

2. 如何评价机器学习回归模型

评价机器学习得到的回归模型可以从多个方面入手,例如:模型的拟合程度、模型的预测能力、模型的稳定性等。

其中,模型的拟合程度可以通过决定系数(Coefficient of Determination,R2)来衡量。R2的取值范围在0到1之间,越接近1表示模型对数据的拟合程度越好。但是,R2并不能告诉我们哪些变量对目标变量有影响。

模型的预测能力可以通过均方根误差(Root Mean Squared Error,RMSE)、平均绝对误差(Mean Absolute Error,MAE)等指标来衡量。这些指标可以用来衡量模型对新数据的预测能力。

模型的稳定性可以通过交叉验证(Cross Validation)等方法来衡量。交叉验证可以用来评估模型在不同数据集上的表现,从而判断模型是否过拟合或欠拟合。

3. Sklearn回归模型实践

3.1. 多层感知机回归模型

实践案例使用简洁的神经网络感知机(MLPRegressor)。

from sklearn.neural_network import MLPRegressor
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import mean_squared_error, mean_absolute_error
from sklearn.utils import column_or_1d
import pandas as pd
import numpy as np
import joblib
import matplotlib.pyplot as plt

df = pd.read_csv('power_pv09.csv')
# 数据处理过程,略
train_datas = df[cols_dict].loc[df['p_mp'] > 0]
y = train_datas[['ThisPower']] 
X = train_datas.drop(columns='ThisPower')
model_filename = 'mlpmodel.joblib'

x_train, x_test, Y_train, Y_test = train_test_split(X, y, test_size=0.2)

std_x = StandardScaler()
std_x.fit(x_train)
# y值可以不进行归一化,使用原值
std_y = StandardScaler()
std_y.fit(Y_train)

y_train = std_y.transform(Y_train)
y_test  = std_y.transform(Y_test)
X_train = std_x.transform(x_train)
X_test = std_x.transform(x_test)

forest_model = MLPRegressor(hidden_layer_sizes=(80, 90, 80), 
                            solver = 'adam', 
                            tol=1e-3, max_iter=600, random_state=0).fit(X_train, y_train)

joblib.dump(forest_model, model_filename)  # 存储模型

y_ = forest_model.predict(X_test)
y_ = y_.reshape(-1,1)
pre_y = std_y.inverse_transform(y_)

3.2. 可视化训练过程

# 可视化损失函数
plt.figure(figsize=(12,6))
plt.plot(forest_model.loss_curve_)
plt.xlabel("iters")
plt.ylabel(forest_model.loss)
plt.show()

注意:适用于solver = 'adam’等,牛顿法不适用solver=‘lbfgs’。

在这里插入图片描述

3.3. 回归模型评估

使用常用机器学习回归模型评估方法R2、MSE、MAE等方法,在Sklearn库中,分别调用其函数实现评估,具体函数详见如下代码。

R2 = forest_model.score(X_test, y_test)
print ("Test R2 Score = ", R2)
'''计算训练集 MSE'''
pre_train = forest_model.predict(X_train)
mse_train = mean_squared_error(pre_train,y_train)
print ("Train mean squared ERROR = ", mse_train)
'''计算训练集 MAE'''
pre_train = forest_model.predict(X_train)
mae_train = mean_absolute_error(pre_train,y_train)
print ("Train mean absolute ERROR = ", mae_train)
'''计算测试集mse'''
pred_test = forest_model.predict(X_test)
mse_test = mean_squared_error(pred_test,y_test)
print ("Test mean_squared ERROR = ", mse_test)
'''结果可视化'''
xx=range(0,len(y_test))
plt.figure(figsize=(8,6))
plt.scatter(xx,Y_test,color="red",label="Sample Point",linewidth=3) 
plt.plot(xx,column_or_1d(pre_y, warn=True),color="blue",label="Fitting Line",linewidth=2)
plt.legend()

评估结果如下:

Test R2 Score = 0.884
Train mean squared ERROR = 0.0475
Train mean absolute ERROR = 0.147
Test mean_squared ERROR = = 0.1026

测试集预测结果与真实值对比图如下:
在这里插入图片描述

参考:

大鱼. 机器学习常见评价指标. 知乎. 2022.11
Xiaofei@IDO. 机器学习:回归模型的评价指标. CSDN博客. 2021.06

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

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

相关文章

git 撤销中间某次提交,保留其他提交的方法

今天上班脑抽了,吧test直接合到了uat,因为项目近期就我一个人开发,自己拉个三个分支再改不同的东西,最后都是发到test分支发测试,发生产的时候一个个和嫌麻烦,直接吧test分支怼到了uat,结果生产就出问题了&…

Revit插件 | 精装模块15个新功能正式上线,快来体验

大家好,这里是建模助手。 建模助手建模、算量、出图,一站搞定的——精装模块,正式上线了! 简单来说,精装模块就是辅助用户快速搭建精装修模型,便于后续的模型渲染、出量、出图工作。 目前暂时上线15个功能&#xff0…

ShardingSphere数据分片、读写分离、数据屏蔽教程

本文不讨论框架实现原理以及源码分析,只做功能使用案例说明 数据分片: 表分片可以帮助评论应用程序更有效地管理其不断增长的评论表,提高性能和可扩展性,同时还使备份和维护任务更易于管理 Apache ShardingSphere 有两种形式&am…

公众号推文添加附件秀米添加附件?三步轻松实现

很多人都不知道,其实公众号文章正文是支持添加附件的,只是需要借助一个叫做“文章附件”的网站来实现。公众号自身是不支持直接上传文件的,但是我们可以通过另外的方式来实现。 其实原理很简单,公众号文章中是可以添加小程序链接…

AOP(小卡拉米!!!)温故!

前面我们说了AOP底层是使用代理模式进行实现,spring写的接口是通过代理反射,实现方法,然后定义切入点: springAOP接口定义的方法有:被加强的方法前执行,被加强的方法后执行,出错了执行&#xf…

docker数据卷volume详细配置案例讲解

docker数据卷 文章目录 docker数据卷1.docker挂载宿主机数据卷1.2.具体配置1.3.挂载命令1.3.1访问页面 2.多端口的容器nginx配置2.1.创建目录位置2.2.访问结果 3.数据卷volume持久化配置3.1.语法格式3.2.详细参数3.3.操作案例3.4.数据改动3.5.查看卷的详细属性 4.与某个容器使用…

如何利用技术做到脱颖而出?亚马逊云科技泛娱乐高峰论坛为你揭秘

互联网技术的飞速进步与数字内容消费的蓬勃发展,使得泛娱乐市场越来越红火,用户对于高品质内容的个性化需求也在不断提升,这对技术底座也提出了更加严苛的要求,时代潮流已至,如何利用技术在一片红海中做到脱颖而出&…

【溯源反制】CDN域前置云函数-流量分析|溯源

文章目录 CDN隐藏C2地址环境搭建上传至威胁感知平台直接分析使用DNSQuerySniffer和Process Monitor定位进程网络流量分析文件属性(IDAPro Ollydbg) 域前置隐藏环境搭建威胁感知流量分析 云服务API网关/云函数云函数使用HTTPcs的流量可以简单的分为三个阶段 云函数使用HTTPS 总结…

kali Linux root密码修改

kali root 密码修改有时候是经常发生的,要么忘记,要么是必须限时要改的,今天记录下,修改方法,以便后续。 Kali Linux的前身是BackTrack Linux发行版。Kali Linux是一个基于Debian的Linux发行版,它被认为是最好的渗透测试的 Linux 发行版之一,而且名副其实。 作为一名从…

Vivado使用技巧:时钟的约束方法

时钟的基础知识 数字设计中,“时钟”表示在寄存器之间可靠地传输数据所需的参考时间;Vivado的时序引擎利用时钟特征来计算时序路径需求,通过计算时间裕量(Slack)的方法报告设计的时序空余;时钟必须…

C++11 -- 入门基础知识

文章目录 C11简介列表初始化std::initializer_list 变量类型推导nullptr范围for循环STL中的一些变化 C11简介 在2003年C标准委员会曾经提交了一份技术勘误表(简称TC1),使得C03这个名字已经取代了C98称为C11之前的最新C标准名称。不过由于C03(TC1)主要是对C98标准中…

怎么在照片上添加logo

怎么在照片上添加logo?现在是全面自媒体的时代,很多旅行博主或者摄影爱好者喜欢将自己拍摄的照片发布到各大平台上,分享自己的摄影作品,不过互联网属于一个开放平台,所以盗取照片的事情时有发生,很多不法分…

LabVIEWCompactRIO 开发指南16 有效使用网络共享变量的技巧

LabVIEWCompactRIO 开发指南16 有效使用网络共享变量的技巧 在使用网络共享变量进行编程时,可以遵循三个技巧来最大化性能并避免任何不需要的行为。图4.11显示了包含每个技巧的初始化过程。 技巧1:初始化共享变量 在应用程序开始时将共享变量初始化为已知值。如…

全文检索-Elasticsearch-整合SpringBoot

文章目录 前言一、整合检索服务1.1 创建 gulimall-search 模块1.2 配置 Maven 依赖1.3 搜索服务注册到注册中心1.4 新增 es 配置类1.5 测试 RestHighLevelClient 组件 二、存储数据到 ES2.1 测试 ES 简单插入数据2.2 测试 ES 查询复杂语句2.3 读入数据 前言 前面记录了 Elasti…

如何修复d3dcompiler_47.dll缺失?多种解决方法分享

在使用Windows操作系统的过程中,有时候会遇到d3dcompiler_47.dll缺失的情况。这个问题可能会导致某些应用程序无法正常运行,因此需要及时解决。本文将介绍如何修复d3dcompiler_47.dll缺失的问题。 一.什么是d3dcompiler_47.dll D3dcompiler_47.dll是Di…

Kali-linux查看打开的端口

对一个大范围的网络或活跃的主机进行渗透测试,必须要了解这些主机上所打开的端口号。在Kali Linux中默认提供了Nmap和Zenmap两个扫描端口工具。为了访问目标系统中打开的TCP和UDP端口,本节将介绍Nmap和Zenmap工具的使用。 4.4.1 TCP端口扫描工具Nmap 使…

revit的附着顶部/底部工具使用及CAD图纸转柱

一、revit的附着顶部/底部工具的使用 生活上,有很多建筑是斜屋顶的房子,像是一些别墅的装修,斜屋顶往往比平屋顶更有装饰感,也更有利于排水。 那么在Revit中,绘制带有斜屋顶的往往会遇到这样一个问题,屋顶之…

OpenCL编程指南-3.2OpenCL上下文

OpenCL上下文 上下文是所有OpenCL应用的核心。上下文为关联的设备、内存对象(例如,缓冲区和图像)以及命令队列(在上下文和各设备之间提供一个接口)提供了一个容器。正是上下文驱动着应用程序与特定设备以及特定设备之…

算法训练Day53:​ 1143.最长公共子序列 1035.不相交的线 53.最大子序和 动态规划

文章目录 最长公共子序列题解 不相交的线题解 最大子数组和题解 最长公共子序列 CategoryDifficultyLikesDislikesContestSlugProblemIndexScorealgorithmsMedium (64.94%)13110--0 Tags Companies 给定两个字符串 text1 和 text2,返回这两个字符串的最长 公共子…

浏览csdn博客自动隐藏侧边栏并只看目录

背景 CSDN 总算做了点好事,能够隐藏大部分无关信息,只看博客内容本身。具体如图,还在测试版 以我的一篇博客为例,原始界面,花里胡哨一堆 点击隐藏侧栏后的清爽版 点击只看目录后的清爽版 前提提要 安装油猴脚本&…