您的位置:首页 > 游戏 > 手游 > adobe h5制作软件_企业网站推广品牌_微信客户管理系统_百度大搜推广和百度竞价

adobe h5制作软件_企业网站推广品牌_微信客户管理系统_百度大搜推广和百度竞价

2024/12/23 22:46:05 来源:https://blog.csdn.net/qq_18668137/article/details/144539058  浏览:    关键词:adobe h5制作软件_企业网站推广品牌_微信客户管理系统_百度大搜推广和百度竞价
adobe h5制作软件_企业网站推广品牌_微信客户管理系统_百度大搜推广和百度竞价

模型的性能评价指标有几种方案:RMSE(平方根误差)、MAE(平均绝对误差)、MSE(平均平方误差)、R2_score

其中,当量纲不同时,RMSE、MAE、MSE难以衡量模型效果好坏。这就需要用到R2_score;

这里注意,使用 r2 是平行的对比不同因子/品种的;即 两个shape 一样的样本集,若同个样本集,进行样本切分成不同长度的数据,则会有其他的问题,这个放最后去解释!!!!

先看看 r2 怎么算的

使用 \hat{y}表示预测值,y表示真实值,\bar{y}表示真实值的平均值;则有

回归平方和:    ssr = \sum_{i=1}^{n}(\hat{y} - \bar{y})^{2}

表示预测值与平均值的误差,反映相关程度的偏差平方和。

残差平方和:sse = \sum_{i=1}^{n}(y - \hat{y})^{2}

表示预测值与真实值的误差,反映模型拟合程度

总离差平方和:sst = \sum_{i=1}^{n}(y - \bar{y})^{2}

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

R2 = 1 - \frac{sse}{sst}

    R2 = 1 - \frac{\sum_{i=1}^{n}(y - \hat{y})^{2}}{\sum_{i=1}^{n}(y - \bar{y})^{2}}

进一步变形得到

R2 = 1 - \frac{\sum_{i=1}^{n}(y - \hat{y})^{2}/n}{\sum_{i=1}^{n}(y - \bar{y})^{2}/n} = 1 - \frac{RMSE}{Var}

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

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

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

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

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

代码如下:

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)## r2 = mean_squared_error(y_test,y_preditc)/ np.var(y_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()

注意:

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

2. r2 不能完全反映模型预测能力的高低,比如实际观测的自变量取值范围很窄(即var很小/分母很小),此时计算出来的 r2 值很大,但这并不代表模型在样本外应用时的效果很好;

3. 数据集的样本越大,r2 越大。因此,不同数据集的模型结果比较起来会有误差,这也是开头提到的问题,如果不同模型使用的因子数据不同,但是数据条数一致,即 shape1 = (10000,5) 和 shape2 =  (10000,8);

针对这种情况,可以使用 Adjusted R square(校正决定系数),对非显著变量给出惩罚

R_{adj}^{2} = 1 - (1 - R^{2})\frac{n-p-1}{n-1}

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

ps: 关于  shape1 = (1000,5)  和 shape2 = (100,5)这种情况, r2 可能不合适作为评价指标,可以考虑RMSE(标准化的)去作为评价指标,或者有人有更好的方案可以讨论一下,我也很想学习!!!!!

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com