前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python实现回归评估指标sse、ssr、sst、r2、r等

Python实现回归评估指标sse、ssr、sst、r2、r等

作者头像
lovelife110
发布2021-01-14 16:17:11
5.9K0
发布2021-01-14 16:17:11
举报
文章被收录于专栏:爱生活爱编程

SST

总平方和

SSE

误差平方和

SSR

回归平方和

R2

判定系数

R

多重相关系数

MSE

均方误差

RMSE

均方根误差

MAE

平均绝对误差

MAPE

平均绝对百分误差

count

行数

yMean

原始因变量的均值

predictionMean

预测结果的均值

R2 判定系数

一般来说,R2在0到1的闭区间上取值,但在实验中,有时会遇到R2为inf(无穷大)的情况,这时我们会用到R2的计算公式:

是反映评价拟合好坏的指标。R2是最常用于评价回归模型优劣程度的指标,R2越大(接近于1),所拟合的回归方程越优

R多重相关系数

相关系数是一个评价两个变量线性相关度的指标。在线性拟合中可以通过拟合结果和实测值得相关系数来反应拟合结果和实测结果线性相关度。但是如果本来就用的非线性拟合(多项式、曲线),那这个指标对于评估拟合没有任何意义。

y_{i}
y_{i}

表示原回归值,​

\overline{y}
\overline{y}

表示原回归值的平均值,

\widehat{y}_{i}
\widehat{y}_{i}

表示预测回归值

总平方和,表示变量

y_{i}
y_{i}

相对于中心 ​

\overline{y}
\overline{y}

的异动;它表征了观测数据总的波动程度

回归平方和,表示估计值

\widehat{y}_{i}
\widehat{y}_{i}

相对于中心 ​

\overline{y}
\overline{y}

的异动;

误差平方和,表示变量

y_{i}
y_{i}

相对于估计值

\widehat{y}_{i}
\widehat{y}_{i}

的异动。

MSE

均方误差(Mean Square Error)

当预测值与真实值完全吻合时等于0,即完美模型;误差越大,该值越大。

RMSE

均方根误差(Root Mean Square Error),其实就是MSE加了个根号,这样数量级上比较直观,比如RMSE=10,可以认为回归效果相比真实值平均相差10。

MAE

平均绝对误差(Mean Absolute Error)MAE虽能较好衡量回归模型的好坏,但是绝对值的存在导致函数不光滑,在某些点上不能求导,可以考虑将绝对值改为残差的平方,这就是均方误差。

MAPE

平均绝对百分比误差(Mean Absolute Percentage Error)

MAPE 为0%表示完美模型,MAPE 大于 100 %则表示劣质模型。

可以看到,MAPE跟MAE很像,就是多了个分母。

注意点:当真实值有数据等于0时,存在分母0除问题,该公式不可用!

代码语言:javascript
复制
def regression_assessment(original_regression_val, prediction_regression_val, input1, output1):
    df = pd.read_csv(input1, header=None)
    y_actual = df.iloc[:, original_regression_val]
    y_predicted = df.iloc[:, prediction_regression_val]
    mae = mean_absolute_error(y_actual, y_predicted)
    mape = np.mean(np.abs((y_predicted - y_actual) / y_actual)) * 100
    mse = mean_squared_error(y_actual, y_predicted)
    sse = np.sum((y_actual - y_predicted) ** 2)
    ssr = np.sum((y_predicted - np.mean(y_actual)) ** 2)
    sst = np.sum((y_actual - np.mean(y_actual)) ** 2)
    r2 = 1 - sse / sst  # r2_score(y_actual, y_predicted, multioutput='raw_values')
    rmse = np.sqrt(mean_squared_error(y_actual, y_predicted))
    count = np.size(y_predicted)
    predictionMean = np.mean(y_predicted)
    yMean = np.mean(y_actual)
    try:
        r = math.sqrt(r2)
    except ValueError:
        r = np.nan
    print('mae:', mae)
    print('mape:', mape)
    print('mse:', mse)
    print('r:', r)
    print('r2:', r2)
    print('rmse:', rmse)
    print('sse:', sse)
    print('ssr:', ssr)
    print('sst:', sst)
    print('count:', count)
    print('predictionMean:', predictionMean)
    print('yMean:', yMean)

if __name__ == '__main__':
    regression_assessment(original_regression_val=2, prediction_regression_val=1, input1="../data_source/price_pai.csv",
                          output1="")

输出结果:

mae: 359.2171428571428 mape: 109.14431827903451 mse: 193251.1310857142 r: nan r2: -9.395675629275434 rmse: 439.60337929287374 sse: 12174821.258399995 ssr: 15998947.858399985 sst: 1171142.8571428566 count: 63 predictionMean: 690.1595238095236 yMean: 330.94238095238126

和阿里pai平台上计算结果一致

参考:

https://zhuanlan.zhihu.com/p/37605060

https://help.aliyun.com/document_detail/42745.html#h2-u4E8Cu5206u7C7Bu8BC4u4F3015

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/02/21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • R2 判定系数
  • R多重相关系数
  • MSE
  • RMSE
  • MAE
  • MAPE
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档