决定系数R^2

在对数据进行线性回归计算之后,我们能够得出相应函数的系数, 那么我们如何知道得出的这个系数对方程结果的影响有强呢?
所以我们用到了一种方法叫 coefficient of determination (决定系数) 来判断 回归方程 拟合的程度.

0. 平均数

y¯=1ni=1nyi

1. THE TOTAL SUM OF SQUARES(总平方和)

SStot=(yiy¯)2

yi 表示真实数据, y¯ 表示平均值

2. THE REGREESION SUM OF SQUARES(回归平方和)

SSreg=(fiy¯)2

fi 表示估计数据, y¯ 表示平均值

3. THE SUM OF SQUARES OF RESIDUALS(残差平方和)

SSres=(yifi)2

yi 表示真实数据, fi 表示估算的数据

4. COEFFICIENT OF DETERMINATION(决定系数)

R2=1SSresSStot

  • 由于 SSres 是估计数据也就是回归数据与平均值的误差
  • SStot 是真实数据与平均值的误差
  • SSres 一般比 SStot 小,结果一般在0-1之间, SStot 在数据确定后始终是固定值,如果估计的越不准确,那么 SSres 就越大,那么 R2 就越接近0,所以估计的越准确就越接近1

sklearn实现的 R2

from sklearn.metrics import r2_score  

def performance_metric(y_true, y_predict):  
    score = r2_score(y_true, y_predict)  
    return score  


score = performance_metric([3, -0.5, 2, 7, 4.2], [2.5, 0.0, 2.1, 7.8, 5.3])
print "Model has a coefficient of determination, R^2, of {:.3f}.".format(score)

自己实现的 R2

def performance_metric2(y_true, y_predict):
    """计算并返回预测值相比于预测值的分数"""
    import numpy as np
    arr_true = np.array(y_true)
    y_mean = np.mean(arr_true)

    ssreg = 0
    sstotal = 0
    ssres = 0
    for item in y_predict:
        ssreg += (item - y_mean)**2
    for item in y_true:
        sstotal += (item - y_mean)**2
    for index,item in enumerate(y_true):
        ssres += (item - y_predict[index])**2

    score = 1-(ssres/sstotal)

    return score

score = performance_metric2([3, -0.5, 2, 7, 4.2], [2.5, 0.0, 2.1, 7.8, 5.3])
print "Model has a coefficient of determination, R^2, of {:.3f}.".format(score)

参考资料

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:技术工厂 设计师:CSDN官方博客 返回首页

打赏作者

灵魂画手-编程如画

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值