回归模型的性能评价指标主要包括:RMSE(平方根误差)、MAE(平均绝对误差)、MSE(均方误差)、R2_score。但是,当维度不同时,RMSE、MAE、MSE很难衡量模型的效果。这需要使用R2_score。在实际使用中,会遇到很多问题。今天我们就来深入研究一下。预备知识在弄清楚R2_score的计算之前,我们需要了解几个统计概念。如果用$y_i$表示真实观测值,用$\bar{y}$表示真实观测值的平均值,用$\hat{y_i}$表示预测值,则:回归平方和:SSR$$SSR=\sum_{i=1}^{n}(\hat{y_i}-\bar{y})^2$$为估计值与平均??值的误差,反映自变量与因变量相关程度的偏差平方和与残差平方和:SSE$$SSE=\sum_{i=1}^{n}(y_i-\hat{y_i})^2$$为估计值与真值的误差,反映模型拟合程度总偏差的平方和:SST$$SST=SSR+SSE=\sum_{i=1}^{n}(y_i-\bar{y})^2$$为平均值与真实值的误差,反映了数学期望R2_score计算公式R^2得分的偏离程度,即决定系数,反映依赖项的所有变化的比例自变量通过回归关系可以解释的变量。计算公式:$$R^2=1-\frac{SSE}{SST}$$即$$R^2=1-\frac{\sum_{i=1}^{n}(y_i-\hat{y}_i)^2}{\sum_{i=1}^{n}(y_i-\bar{y})^2}$$进一步简化$$R^2=1-\frac{\sum\limits_i(y_i-y_i)^2/n}{\sum\limits_i(y_i-\hat{y})^2/n}=1-\frac{RMSE}{Var}$$分子成为常用的评价指标均方误差MSE,分母变为方差。对于$R^2$,可以通俗理解为以均值作为误差基准,看预测误差是大于还是小于均值基准误差。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_scoresklearn.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使用importmatplotlib.pyplotaspltimportnumpyasnpfromsklearnimportdatasets,linear_modelfromsklearn.metricsimportr2_score#导入数据diabetes_X,diabetes_y=datasets.load_diabetes(return_X_y=True)diabetes_X[ax:pdiabetes_X=,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.47r2_score偏小,预测效果一般。注1.$R^2$一般用于线性模型(也可以使用非线性模型)2.$R^2$不能完全反映模型预测能力的高低,实际的取值范围观察到的自变量很宽很窄,但是此时建立的模型的R2很大,但这并不意味着外推时模型的效果就一定好。3、数据集的样本越大,R2越大。因此,不同数据集的模型结果对比会存在一定的误差。这时候可以用AdjustedR-Square(校正决定系数)来给添加的非显着变量。Penalty:$$R^2_{\text{Adj}}=1-(1-R^2)\frac{n-p-1}{n-1}$$n为样本数,p为变量Number参考https://scikit-learn.orghttps://zhuanlan.zhihu.com/p/...https://www.jianshu.com/p/9ee...https://blog.csdn.net/Dear_D/...https://blog.csdn.net/shy1989...本文由多篇博文平台OpenWrite发布!
