Python计算回归拟合各项指标

0、各项回归指标简介

  • Relative Root Mean Squared Error(RRMSE):The RRMSE normalizes the Root Mean Squared Error (RMSE) by the mean of observations. It goes from 0 to infinity. The lower the better the prediction performance.
  • The NRMSE(Normalized Root Mean Square Error) is calculated as the RMSE divided by the range of the observed values, expressed as a percentage. The range of the observed values is the difference between the maximum and minimum values of the observed data.
    Best possible score is 0.0, smaller value is better. Range = [0, +inf)
  • MAE (Mean absolute error) represents the difference between the original and predicted values extracted by averaged the absolute difference over the data set.
  • MSE (Mean Squared Error) represents the difference between the
    original and predicted values extracted by squared the average
    difference over the data set.
  • RMSE (Root Mean Squared Error) is the error rate by the square root
    of MSE.
  • R-squared (Coefficient of determination) represents the coefficient
    of how well the values fit compared to the original values. The value
    from 0 to 1 interpreted as percentages. The higher the value is, the
    better the model is.

1、Python计算回归拟合各项指标:包括RMSE # RRMSE # RSE # NSE # MAE # R # R2 # MAPE # ρ
在这里插入图片描述
图片来源:https://github.com/alifrmf/Evaluation-Metrics-for-Linear-Regression/blob/main/README.md

代码:

# RMSE
def rmse(y_true, y_pred):squared_diff = (y_true - y_pred) ** 2mean_squared_diff = np.mean(squared_diff)rmse_value = np.sqrt(mean_squared_diff)return rmse_value

RRMSE计算方式一:RMSE除以真实值的均值

# RRMSE(Relative Root Mean Squared Error )
def rrmse(y_true, y_pred):# Calculate the squared errors between the predicted and true valuessquared_errors = (y_true - y_pred) ** 2# Calculate the mean of the squared errorsmean_squared_error = np.mean(squared_errors)# Take the square root of the mean squared errorroot_mean_squared_error = np.sqrt(mean_squared_error)# Calculate the relative error by dividing the root mean squared error by the mean of the true valuesrelative_error = root_mean_squared_error / np.mean(y_true)# Return the RRMSE valuereturn relative_error

RRMSE计算方式二:除以真实值最大值-真实值最小值

def rrmse(s, o):"""Relative Root Mean Squared Errorinput:s: simulatedo: observedoutput:relative root mean squared error"""return 100*np.sqrt(np.mean((s-o)**2))/(o.max()-o.min())
# RSE
def root_squared_error(y_true, y_pred):"""Calculate the Root Squared Error between two arrays (y_true and y_pred).Args:y_true (numpy.ndarray): Actual values.y_pred (numpy.ndarray): Predicted values.Returns:float: The Root Squared Error."""error = y_true - y_predsquared_error = np.square(error)mean_squared_error = np.mean(squared_error)root_squared_error = np.sqrt(mean_squared_error)return root_squared_error
# NSE
def nash_sutcliffe_efficiency(y_true, y_pred):"""Calculate the Nash-Sutcliffe Efficiency (NSE) between two arrays (y_true and y_pred).Args:y_true (numpy.ndarray): Actual values.y_pred (numpy.ndarray): Predicted values.Returns:float: The Nash-Sutcliffe Efficiency."""numerator = np.sum(np.square(y_true - y_pred))denominator = np.sum(np.square(y_true - np.mean(y_true)))nse = 1 - (numerator / denominator)return nse
# MAE
def mean_absolute_error(y_true, y_pred):"""Calculate the Mean Absolute Error (MAE) between two arrays (y_true and y_pred).Args:y_true (numpy.ndarray): Actual values.y_pred (numpy.ndarray): Predicted values.Returns:float: The Mean Absolute Error."""absolute_error = np.abs(y_true - y_pred)mae = np.mean(absolute_error)return mae
# R
def pearson_correlation_coefficient(y_true, y_pred):"""Calculate the Pearson Correlation Coefficient (R) between two arrays (y_true and y_pred).Args:y_true (numpy.ndarray): Actual values.y_pred (numpy.ndarray): Predicted values.Returns:float: The Pearson Correlation Coefficient."""correlation_matrix = np.corrcoef(y_true, y_pred)r = correlation_matrix[0, 1]return r
# R2
def r_squared(y_true, y_pred):"""Calculate the R squared value between two arrays (y_true and y_pred).Args:y_true (numpy.ndarray): Actual values.y_pred (numpy.ndarray): Predicted values.Returns:float: The R squared value."""correlation_matrix = np.corrcoef(y_true, y_pred)correlation_xy = correlation_matrix[0,1]r_squared = correlation_xy**2return r_squared
# ρ (RRMSE / (1 + R))
def relative_rmse(y_true, y_pred):rmse = np.sqrt(metrics.mean_squared_error(y_true, y_pred))return rmse / (np.max(y_true) - np.min(y_true))def pearson_correlation_coefficient(y_true, y_pred):correlation_matrix = np.corrcoef(y_true, y_pred)r = correlation_matrix[0, 1]return r

代码来源:https://github.com/alifrmf/Evaluation-Metrics-for-Linear-Regression/blob/main/Regression%20Metrics%20for%20Machine%20Learning.py

2、Python计算bias、rbias、mae、rmse等指标
代码来源:https://github.com/dsi-llc/scripts/blob/d4445ef02a971754fdaef901250b42b8394539fa/EEstatslib.py#L80

import numpy as np# ------------------------------------------------------------------------------
# statistic functions
# ------------------------------------------------------------------------------def drop_nan(df):"""this function reads in dataframe after using dffromdatfile function in dataFrameFromdatfiles.pythen returns a dataframe without nan """df_dropped = df.dropna()return df_droppeddef data_paired(df):"""this function return the number of data pairedafter dropping nan values"""return df.shape[0]def bias(s, o):"""Biasinput:s: simulatedo: observedoutput:bias"""return np.mean(s-o)def rbias(s, o):"""Relative Biasinput:s: simulatedo: observedoutput:relative bias"""return 100*(np.sum(s-o))/np.sum(o)def mae(s, o):"""Mean(Average) Absolute Errorinput:s: simulatedo: observedoutput:mean absolute error"""return np.mean(np.abs(s-o))def rmse(s, o):"""Root Mean Squared Errorinput:s: simulatedo: observedoutput:root mean squared error"""return np.sqrt(np.mean((s-o)**2))def rrmse(s, o):"""Relative Root Mean Squared Errorinput:s: simulatedo: observedoutput:relative root mean squared error"""return 100*np.sqrt(np.mean((s-o)**2))/(o.max()-o.min())def correlation(s, o):"""Correlation Coefficientinput:s: simulatedo: observedoutput:correlation coefficient"""return np.corrcoef(o, s)[0, 1]def r_sqr(s, o):"""R Squared (Square of Correlation Coefficient)input:s: simulatedo: observedoutput:R Squared"""    return correlation(s, o)**2def nsi(s, o):"""Nash-Sutcliffe Index of Efficiencyinput:s: simulatedo: observedoutput:nash-sutcliffe index of efficiency"""return 1-np.sum((s-o)**2)/np.sum((o-np.mean(o))**2)def coe(s, o):"""Coefficient of Efficiencyinput:s: simulatedo: observedoutput:coefficient of efficiency"""return 1 - np.sum(np.abs(s-o))/np.sum(np.abs(o-np.mean(o)))def ioa(s, o):"""Index of Agreementinput:s: simulatedo: observedoutput:index of agreement"""return 1 - (np.sum((o-s)**2))/\(np.sum((np.abs(s-np.mean(o))+np.abs(o-np.mean(o)))**2))def kge(s, o):"""Kling-Gupta Efficiencyinput:s: simulatedo: observedoutput:kgef: kling-gupta efficiencycc: correlationalpha: ratio of the standard deviationbeta: ratio of the mean"""cc = correlation(s, o)alpha = np.std(s)/np.std(o)beta = np.sum(s)/np.sum(o)kgef = 1 - np.sqrt((cc-1)**2 + (alpha-1)**2 + (beta-1)**2)return kgef, cc, alpha, betadef stats_summary(df, sim_column_idx=0, obs_column_idx=1, decimals=3):"""Statistics Summary, output all statistics number in dictionaryinput:df: dataframe from EE.dat file (default just two columns, model and data)sim_column_idx: column index for simulated values (default 0)obs_column_idx: column index for observed values (default 1)decimals: round all statistics to the given number of decimals (default 3)output:statsummary: dictionary with all statistics number"""df_drop = drop_nan(df)simulated = df_drop.iloc[:, sim_column_idx]observed = df_drop.iloc[:, obs_column_idx]statsummary = {'Data Paired': data_paired(df_drop),'Bias': np.round(bias(simulated, observed), decimals),'Percent Bias': np.round(rbias(simulated, observed), decimals),'Mean Absolute Error': np.round(mae(simulated, observed), decimals),'RMSE': np.round(rmse(simulated, observed), decimals),'RRMSE': np.round(rrmse(simulated, observed), decimals),'R': np.round(correlation(simulated, observed), decimals),'R-Sqr': np.round(r_sqr(simulated, observed), decimals),'Nash-Sutcliffe Efficiency': np.round(nsi(simulated, observed), decimals),'Coefficient of Efficiency': np.round(coe(simulated, observed),decimals),'Index of Agreement': np.round(ioa(simulated, observed), decimals),'Kling-Gupta Efficiency': np.round(list(kge(simulated, observed))[0], decimals)}return statsummary

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

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

相关文章

衍生品赛道的 UniSwap:SynFutures 或将成为行业领军者

经过一个周期的发展,DeFi 已经成为基于区块链构建的最成功的去中心化应用,并彻底改变了加密市场的格局。加密货币交易开始逐步从链下转移到链上,并从最初简单的 Swap 到涵盖借贷、Staking、衍生品交易等广泛的生态系统。 在 DeFi 领域&#x…

从普通神经网络到transformer

1.单隐藏层的多层感知机 2. 循环神经网络 3.现代循环神经网络。 GRU 门控循环单元 LSTM 长短期记忆网络 候选记忆元: ˜C t ∈ R (nh) 记忆元

超详细的前后端实战项目(Spring系列加上vue3)前后端篇(四)(一步步实现+源码)

兄弟们,继昨天的代码之后,继续完成最后的用户模块开发, 昨天已经完成了关于用户的信息编辑页面这些,今天再完善一下, 从后端这边开始吧,做一个拦截器,对用户做身份校验, 拦截器 这…

OrangePi AIpro 性能测试以及使用体验

OrangePi AIpro 性能测试以及使用体验 1. 介绍 OrangePi AIpro(8T)采用昇腾AI技术路线。 具体为4核64位处理器AI处理器,集成图形处理器,支持8TOPS AI算力拥有8GB/16GB LPDDR4X,可以外接32GB/64GB/128GB/256GB eMMC模块,支持双4…

输出相关命令

什么是输入输出重定向,就是用另外一个位置来代替它,默认输入为键盘,默认输出为终端窗口 管道能把一系列的命令连起来,|为命令符 cat file 历史查询 history 回车可以查到用过的命令。上下左右键可以回到之前命令或…

记mapboxGL实现鼠标经过高亮时的一个问题

概述 mapboxGL实现鼠标经过高亮可通过注册图层的mousemove和moveout事件来实现,在mousemove事件中可以拿到当前经过的要素,但是当使用该要素时,发现在某个地图级别下会有线和面数据展示不全的情况。究其原因,发现是mapboxGL在绘图…

【多线程】线程安全

目录 1.观察线程不安全 2.线程不安全的原因 2.1 随机调度 2.2 修改共享数据 2.3 原子性 2.4 内存可见性 2.5 指令重排序 3.synchronized 加锁操作 3.1 synchronized是什么? 3.2 synchronized的特性 1) 互斥 2) 可重入 3.3 synchronized使用示例 3.3.1 针…

“二叉堆:不是,啊?”

目录 前言一、堆的概念及结构堆的性质:堆的结构:最大堆最小堆堆顶注意 二、堆的实现1.初始化堆2. 堆的插入什么是堆的向上调整算法? 3.堆的删除什么是堆的向下调整算法? 4.获取堆顶的数据5.获取堆的数据个数6.堆的判空7.堆的销毁 三、建堆的时…

【ES6】ECMAS6新特性概览(一):变量声明let与const、箭头函数、模板字面量全面解析

🔥 个人主页:空白诗 🔥 热门专栏:【JavaScript】 文章目录 🌿 引言一、 let 和 const - 变量声明的新方式 🌟📌 var的问题回顾📌 let的革新📌 const的不变之美 二、 Arro…

第六十六节 Java设计模式 -责任链模式

Java设计模式 -责任链模式 责任链模式为请求创建一个接收者对象列表。 这种模式是行为模式。 当使用责任链模式时,通常每个接收器包含对另一个接收器的引用。 如果一个对象不能处理请求,则它将相同的对象传递给下一个接收者,等等。 例子 …

删除edge浏览器文本框储存记录值以及关闭自动填充

当我们点击输入框时总会出现许多以前输入过的信息。 一、删除edge浏览器文本框储存记录值 1、首先按下↓键选中你想删除的信息 二、关闭自动填充。 1、在地址栏输入edge://wallet/settings跳转到以下界面 2、往下滑找到 全部取消即可

你也许不知道,自己可能是一个热人

今天想跟大家分享的,是一种很少有人了解的人格特质。它非常普遍,许多人都或多或少有一些倾向,但却很少有人意识到它。 不妨看一看,你有没有下面这些特征: 有着极其旺盛的求知欲,对许多奇奇怪怪的问题都有着…

nvm安装教程及使用nvm管理多个node版本

文章目录 前言一、nvm 安装教程温馨提示macOS/LinuxWindows 二、安装 node 前言 工作中,你可能会遇到以下场景: 我想使用 pnpm 命令安装依赖,但是在使用 pnpm 命令时提示如下 $ pnpm -v ERROR: This version of pnpm requires at least No…

捷报!恒瑞医药ADC创新药SHR-A1921卵巢癌适应症拟纳入突破性治疗品种公示

近日,恒瑞医药自主研发的TROP-2抗体偶联药物(antibody-drug-conjugate, ADC)注射用SHR-A1921用于治疗铂耐药复发上皮性卵巢癌、输卵管癌或原发性腹膜癌适应症被国家药品监督管理局药品审评中心拟纳入突破性治疗品种公示名单。今年3月&#xf…

第五天 从零开始构建基于Kubernetes的DevOps平台

基于Kubernetes的DevOps平台实践 持续集成工具: JenkinsgitlabciTekton 本章基于k8s集群部署gitlab、sonarQube、Jenkins等工具,并把上述工具集成到Jenkins中,以Django项目和SpringBoot项目为例,通过多分支流水线及Jenkinsfile…

工业4.0 企业级云MES全套源码,支持app、小程序、H5、台后管理端

工业4.0 企业级云MES全套源码,支持app、小程序、H5、台后管理端 采用javaspringboot-vue.jsuniapp开发 随着工业4.0的快速发展,制造执行系统(MES)成为了智能制造的核心。今天,将为大家介绍一款开源的MES系统——MES管…

本周 MoonBit 核心库进行 API 整理工作、工具链持续完善

MoonBit更新 【核心库 Breaking】核心库进行API整理工作 所有immutable数据结构被放在immut路径下,如immutable_hashmap.Map变为immut/hashmap.Map // Before let a : immutable_hashmap.Map[Int, Int] immutable_hashmap.make() // After let a : immut/hashma…

我的创作纪念日——我与CSDN一起走过的128天

目录 一、机缘:旅程的开始 二、收获:沿路的花朵 三、日常:不断前行中 四、成就:一点小确幸 五、憧憬:梦中的重点 一、机缘:旅程的开始 最开始开始写博客是在今年一二月份的时候,也就是寒假…

如何自学制作电子画册,这个秘籍收藏好

随着数字技术的飞速发展,电子画册作为一种新兴的媒体展示形式,以其独特的魅力和丰富的表现手法,受到了越来越多人的喜爱。那么,如何自学制作电子画册呢? 1. 学习基础知识 首先,你需要了解电子画册的基本构…

SAP SCU0 比较两个环境之间的SPRO配置差异

TCODE : SCU0 直接选择所有 因为对比全部,所以会有点久,慢慢等着,吃个橘子 输入正式环境的账号密码