回归模型的score得分为负_深度研究:回归模型评价指标R2_score

回归模型评价中,R2_score作为关键指标,尤其在量纲不一时,它能有效衡量模型效果。R2_score计算涉及回归平方和、残差平方和与总离差平方和,其值越接近1表示模型拟合度越好。然而,R2_score可能为负,意味着模型预测效果甚至不如直接取平均值。在使用R2_score时应注意,它不完全反映模型预测能力,且在不同数据集间比较需谨慎。
摘要由CSDN通过智能技术生成

点击“机器学习算法与Python实战”,“置顶”公众号

重磅干货,第一时间送达c6bbd8add130f67b50ce7760dc9c4a6a.png

回归模型的性能的评价指标主要有:RMSE(平方根误差)、MAE(平均绝对误差)、MSE(平均平方误差)、R2_score。但是当量纲不同时,RMSE、MAE、MSE难以衡量模型效果好坏。这就需要用到R2_score,实际使用时,会遇到许多问题,今天我们深度研究一下。

预备知识

搞清楚R2_score计算之前,我们还需要了解几个统计学概念。

若用表示真实的观测值,用表示真实观测值的平均值,用表示预测值,则:

回归平方和:SSR

即估计值与平均值的误差,反映自变量与因变量之间的相关程度的偏差平方和

残差平方和:SSE

即估计值与真实值的误差,反映模型拟合程度

总离差平方和:SST

即平均值与真实值的误差,反映与数学期望的偏离程度

R2_score计算公式

R^2 score,即决定系数,反映因变量的全部变异能通过回归关系被自变量解释的比例。计算公式:

进一步化简

分子就变成了常用的评价指标均方误差MSE,分母就变成了方差。

对于可以通俗地理解为使用均值作为误差基准,看预测误差是否大于或者小于均值基准误差。

R2_score = 1,样本中预测值和真实值完全相等,没有任何误差,表示回归分析中自变量对因变量的解释越好。

R2_score = 0。此时分子等于分母,样本的每项预测值都等于均值。

R2_score不是r的平方,也可能为负数(分子>分母),模型等于盲猜,还不如直接计算目标变量的平均值。

r2_score使用方法

根据公式,我们可以写出r2_score实现代码

1- mean_squared_error(y_test,y_preditc)/ np.var(y_test)

也可以直接调用sklearn.metrics中的r2_score

sklearn.metrics.r2_score(y_true, y_pred, sample_weight=None, multioutput='uniform_average')
#y_true:观测值
#y_pred:预测值
#sample_weight:样本权重,默认None
#multioutput:多维输入输出,可选‘raw_values’, ‘uniform_average’, ‘variance_weighted’或None。默认为’uniform_average’;
raw_values:分别返回各维度得分
uniform_average:各输出维度得分的平均
variance_weighted:对所有输出的分数进行平均,并根据每个输出的方差进行加权。

sklearn.metrics.r2_score使用方法

import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import r2_score
#导入数据
diabetes_X, diabetes_y = datasets.load_diabetes(return_X_y=True)
diabetes_X = diabetes_X[:, np.newaxis, 2]
#划分测试集验证集
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_train = diabetes_y[:-20]
diabetes_y_test = diabetes_y[-20:]
# 创建线性回归模型
regr = linear_model.LinearRegression()
# 训练模型
regr.fit(diabetes_X_train, diabetes_y_train)
# 预测
diabetes_y_pred = regr.predict(diabetes_X_test)
# 模型评价
print('r2_score: %.2f'
% r2_score(diabetes_y_test, diabetes_y_pred))
# 绘制预测效果图
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()

r2_score: 0.472f471be7640aec4fdc98b706b47a73b9.png

r2_score偏小,预测效果一般。

注意事项

1、 一般用在线性模型中(非线性模型也可以用)

2、不能完全反映模型预测能力的高低,某个实际观测的自变量取值范围很窄,但此时所建模型的R2 很大,但这并不代表模型在外推应用时的效果肯定会很好。

3、数据集的样本越大,R²越大,因此,不同数据集的模型结果比较会有一定的误差,此时可以使用Adjusted R-Square (校正决定系数),能对添加的非显著变量给出惩罚:

n是样本的个数,p是变量的个数

Reference

https://zhuanlan.zhihu.com/p/36305931 https://blog.csdn.net/Dear_D/article/details/86144696 

340ed4c394cea2534b8b7d88a5e08b17.png

戳一下右下角在看,小小举动,大大支持~

加入机器学习微信群,请后台回复「入群

推荐阅读:

一文读懂机器学习分类模型评价指标模型评估指标AUC和ROC,这是我看到的最透彻的讲解

4154c4eb001ee1a46ed71fb4599e30ab.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值