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−VarianceYtrue​​Variance(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−VarianceYtrue​​N∑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的本质区别是什么?相关推荐

  1. Python数模笔记-Sklearn(4)线性回归

    1.什么是线性回归? 回归分析(Regression analysis)是一种统计分析方法,研究自变量和因变量之间的定量关系.回归分析不仅包括建立数学模型并估计模型参数,检验数学模型的可信度,也包括利 ...

  2. Python数模笔记-Sklearn(5)支持向量机

    支持向量机(Support vector machine, SVM)是一种二分类模型,是按有监督学习方式对数据进行二元分类的广义线性分类器. 支持向量机经常应用于模式识别问题,如人像识别.文本分类.手 ...

  3. Python数模笔记-Sklearn(3)主成分分析

    主成分分析(Principal Components Analysis,PCA)是一种数据降维技术,通过正交变换将一组相关性高的变量转换为较少的彼此独立.互不相关的变量,从而减少数据的维数. 1.数据 ...

  4. Python数模笔记-Sklearn(2)聚类分析

    1.分类的分类 分类的分类?没错,分类也有不同的种类,而且在数学建模.机器学习领域常常被混淆. 首先我们谈谈有监督学习(Supervised learning)和无监督学习(Unsupervised ...

  5. Python数模笔记-Sklearn (1)介绍

    1.SKlearn 是什么 Sklearn(全称 SciKit-Learn),是基于 Python 语言的机器学习工具包. Sklearn 主要用Python编写,建立在 Numpy.Scipy.Pa ...

  6. 机器学习之聚类学习笔记-利用python的sklearn实现

    学习来源 sklearn中文文档 聚类算法练习 python代码实现K-means算法 Python数模笔记-Sklearn(2)聚类分析 均值偏移聚类 K-means聚类算法 该算法可分为三个步骤. ...

  7. python笔记-1(import导入、time/datetime/random/os/sys模块)

    python笔记-6(import导入.time/datetime/random/os/sys模块) 一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其它内 ...

  8. 初学者python笔记(内置函数_2)

    这篇初学者笔记是接着上一篇初学者python笔记(内置函数_1)的.同样都是介绍Python中那些常用内置函数的. max()和min()的高级用法 我们都知道,max():取最大值,min():取最 ...

  9. 初学者python笔记(map()函数、reduce()函数、filter()函数、匿名函数)

    文章目录 一.匿名函数 二.map()函数 三.reduce()函数 四.filter()函数 五.三大函数总结 本篇文章内容有Python中的匿名函数和map()函数.reduce()函数.filt ...

最新文章

  1. pandas使用pad函数向dataframe特定数据列的每个字符串添加补齐字符或者字符串、向所有字符串的左右两侧填充、直到宽度达到指定要求(both padding)
  2. 41.和为s的两个数字 VS 和为s的连续正数序列
  3. 失败已是过去,现在成就未来
  4. MySql优化的方法
  5. 常用批处理命令总结之Find和FindStr
  6. python sendto函数返回值_有返回值的函数amp;闭包(python)
  7. 安装vs2017出现闪退现象_Adobe Reader 闪退
  8. CodeForces 560A,B,C
  9. ACM题目————食物链
  10. 编写绘图代码的技巧(二)
  11. 大数据相关端口号(hive hdfs spark)
  12. 用户角色权限设计思路
  13. 全网最详细的Windows里下载与安装Sublime Text *(图文详解)
  14. 曲面化原理创新设计_女裤制版要多久创新服务
  15. 二叉查找树(BST)的性质
  16. java贪吃蛇源代码_java贪吃蛇源代码详解
  17. 网站优化工具-YUI Compressor
  18. 操作系统排名服务器,服务器操作系统排行榜
  19. 基于单片机的学生视力保护仪
  20. 阿里云上部署的SQL Server服务器和SVN服务器不能远程访问

热门文章

  1. 国二计算机考试office准考证
  2. 大神教你如何安装win7系统
  3. 董树义 近代微波测量技术_新型矿山溜井微波窄束测深装置
  4. crontab自定义脚本执行失败,但是手动执行是成功的
  5. Excel玩转工资条
  6. 开发了一个网盘搜索引擎
  7. 由“芝诺悖论”引发的思考
  8. 【Python 20】BMR计算器4.0(异常处理)
  9. 小象学院 零基础Python入门 案例三 BMR计算器v_3.0+v_4.0
  10. win10关机后自动重启_win10电脑自动关机设置方法