python笔记:sklearn r2_score和explained_variance_score的本质区别是什么?
python version 3.8.6
numpy version 1.19.2
sklearn version 0.23.2
Q:我知道r2_score
表示的是在总变量中模型解释的百分比。但是explained_variance_score
和它有什么区别?
A:从公式的差别角度看:
当残差的均值为0时,它俩是一样的。至于用哪个,就看你有没有假设残差均值为0。
——Answered by CT Zhu:
一、先举个残差均值不为0的栗子:
import numpy as np
from sklearn import metricsy_true = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 8]
print(metrics.explained_variance_score(y_true, y_pred))
print(metrics.r2_score(y_true, y_pred))# 结果如下
0.9571734475374732
0.9486081370449679# 注意:此处残差的均值不为0
print((np.array(y_true) - np.array(y_pred)).mean())
# 结果如下
-0.25
- explained_variance_score 和r^2其实是:
explained_variance_score=1−Variance(Yture−Ypred)VarianceYtrueexplained\_variance\_score = 1- \frac{ Variance_{(Y_{ture}-Y_{pred})} }{Variance_{Y_{true}}}explained_variance_score=1−VarianceYtrueVariance(Yture−Ypred)
r2=1−∑SquaredResidualsNVarianceYtrue=1−∑SquaredResidualsN∗VarianceYtruer2 = 1-\frac{\frac{\sum SquaredResiduals}{N}}{Variance_{Y_{true}}} = 1-\frac{\sum SquaredResiduals}{N * Variance_{Y_{true}}}r2=1−VarianceYtrueN∑SquaredResiduals=1−N∗VarianceYtrue∑SquaredResiduals
重点是: Variance(Yture−Ypred)=∑SquaredResiduals−MeanErrorNVariance_{(Y_{ture}-Y_{pred})}=\frac{ \sum SquaredResiduals-MeanError}{N}Variance(Yture−Ypred)=N∑SquaredResiduals−MeanError。注:此处MeanError实质上取绝对值abs(MeanError)。
# 上边的例子用numpy这样实现:
explained_variance_score = 1- np.var( np.array(y_true)-np.array(y_pred) ) / np.var(y_true)
r2 = 1 - ((np.array(y_true) - np.array(y_pred))**2).sum() / (4 * np.array(y_true).var()) print(explained_variance_score)
print(r2)# 结果如下
0.9571734475374732
0.9486081370449679
1)
r2
分母4 * np.array(y_true).var()
的另一种解释:
依据R2 = 1 - Sum_of_Squares_for_Error/ Sum_of_Squares_for_Total,所以 分母应是总方差SST
,即4 * np.array(y_true).var() = ((y - y.mean())**2).sum()
,其中,y 代表 np.array(y_true)
。2) explained_variance_score = 1 - np.cov( np.array(y_pred)-np.array(y_true) )/np.cov(y_true)
二、再举个残差均值为0的栗子:
y_ture = [3, -0.5, 2, 7]
y_pred = [2.5, 0.0, 2, 7]print((np.array(y_true) - np.array(y_pred)).mean())
# 结果如下
0.0print(metrics.explained_variance_score(y_true, y_pred))
print(metrics.r2_score(y_true, y_pred))
# 结果入下
0.9828693790149893
0.9828693790149893
备注:对于一维数据,
协方差cov/
和方差var
的区别仅仅是自由度的区别,或者说是前者是样本方差,后者是总体方差。例如:a = [1, 2, 3, 45] print(np.cov(a)) print(np.var(a)*len(a)/(len(a)-1)) # 即 cov=离差的平方/(样本数 -1),var=离差平方/(样本数)# 结果如下:462.91666666666663462.9166666666667
从含义的差别角度看:Answered by Yahya:
- 先看R2 / 可决系数 / 判定系数:
– 从公式上看:Variancetrue_y x R2true_y = Variancepred_y,很明显R2越接近1,效果越好。
– R2的含义,是从最小二乘(就是2次方差)的角度出发,表示实际y值的方差有多大比重被预测y值解释了。
python笔记:sklearn r2_score和explained_variance_score的本质区别是什么?相关推荐
- Python数模笔记-Sklearn(4)线性回归
1.什么是线性回归? 回归分析(Regression analysis)是一种统计分析方法,研究自变量和因变量之间的定量关系.回归分析不仅包括建立数学模型并估计模型参数,检验数学模型的可信度,也包括利 ...
- Python数模笔记-Sklearn(5)支持向量机
支持向量机(Support vector machine, SVM)是一种二分类模型,是按有监督学习方式对数据进行二元分类的广义线性分类器. 支持向量机经常应用于模式识别问题,如人像识别.文本分类.手 ...
- Python数模笔记-Sklearn(3)主成分分析
主成分分析(Principal Components Analysis,PCA)是一种数据降维技术,通过正交变换将一组相关性高的变量转换为较少的彼此独立.互不相关的变量,从而减少数据的维数. 1.数据 ...
- Python数模笔记-Sklearn(2)聚类分析
1.分类的分类 分类的分类?没错,分类也有不同的种类,而且在数学建模.机器学习领域常常被混淆. 首先我们谈谈有监督学习(Supervised learning)和无监督学习(Unsupervised ...
- Python数模笔记-Sklearn (1)介绍
1.SKlearn 是什么 Sklearn(全称 SciKit-Learn),是基于 Python 语言的机器学习工具包. Sklearn 主要用Python编写,建立在 Numpy.Scipy.Pa ...
- 机器学习之聚类学习笔记-利用python的sklearn实现
学习来源 sklearn中文文档 聚类算法练习 python代码实现K-means算法 Python数模笔记-Sklearn(2)聚类分析 均值偏移聚类 K-means聚类算法 该算法可分为三个步骤. ...
- python笔记-1(import导入、time/datetime/random/os/sys模块)
python笔记-6(import导入.time/datetime/random/os/sys模块) 一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其它内 ...
- 初学者python笔记(内置函数_2)
这篇初学者笔记是接着上一篇初学者python笔记(内置函数_1)的.同样都是介绍Python中那些常用内置函数的. max()和min()的高级用法 我们都知道,max():取最大值,min():取最 ...
- 初学者python笔记(map()函数、reduce()函数、filter()函数、匿名函数)
文章目录 一.匿名函数 二.map()函数 三.reduce()函数 四.filter()函数 五.三大函数总结 本篇文章内容有Python中的匿名函数和map()函数.reduce()函数.filt ...
最新文章
- pandas使用pad函数向dataframe特定数据列的每个字符串添加补齐字符或者字符串、向所有字符串的左右两侧填充、直到宽度达到指定要求(both padding)
- 41.和为s的两个数字 VS 和为s的连续正数序列
- 失败已是过去,现在成就未来
- MySql优化的方法
- 常用批处理命令总结之Find和FindStr
- python sendto函数返回值_有返回值的函数amp;闭包(python)
- 安装vs2017出现闪退现象_Adobe Reader 闪退
- CodeForces 560A,B,C
- ACM题目————食物链
- 编写绘图代码的技巧(二)
- 大数据相关端口号(hive hdfs spark)
- 用户角色权限设计思路
- 全网最详细的Windows里下载与安装Sublime Text *(图文详解)
- 曲面化原理创新设计_女裤制版要多久创新服务
- 二叉查找树(BST)的性质
- java贪吃蛇源代码_java贪吃蛇源代码详解
- 网站优化工具-YUI Compressor
- 操作系统排名服务器,服务器操作系统排行榜
- 基于单片机的学生视力保护仪
- 阿里云上部署的SQL Server服务器和SVN服务器不能远程访问