统计学、机器学习名词解析——TSS、ESS、RSS、拟合优度、调整后拟合优度

        在统计学和机器学习领域做拟合等其他操作时,如何判断真实值与拟合值的贴合程度?本文介绍5个参数以供参考。

        先随机生成一组随机数并拟合(不严格拟合,仅作解释变量用),拟合结果如下图所示

import matplotlib.pyplot as plt
import numpy as np
x=np.arange(1,51)
y=x+np.round(np.random.uniform(-5, 5, 50), 2)
plt.plot(x,x,color='r')
plt.plot(x,y,color='b')
plt.show()

 

        判断拟合结果如何最直接的参数是$R^2$,由TSS、ESS、RSS结合运算得到,计算过程如下:

        设$y$为真实值,也是待拟合值(上图中蓝线),\overline{y}为所有真实值的均值,\hat{y}为预测值(上图中红线),即可得

总体平方和TTS(Total Sum of Squares)              TSS= \sum (y_i - \bar{y})^2

解释平方和ESS (Explained Sum of Squares)   ESS = \sum (\hat{y}_i - \bar{y})^2

残差平方和RSS(Residual Sum of Squares)      RSS = \sum (y_i - \hat{y}_i)^2

拟合优度 (R-squared)                                          R^2 = \frac{ESS}{TSS} = 1 - \frac{RSS}{TSS}

        当拟合程度越好时,TSS越大,ESS越大,RSS越小。

        TSS反映了数据的总变异,模型能够解释的方差越多,TSS就越大。

        ESS反映了模型对数据变异的解释能力,模型越能够解释数据,ESS就越大。

        RSS衡量了模型预测误差的总量,拟合得越好,残差就越小。

        拟合优度 (R-squared)也称为决定系数,表示模型解释的数据方差比例,拟合优度越接近1,模型对数据的解释能力越强,拟合越好。

python代码实现过程如下

def compute_R_square(data_real,data_pred):
    #计算真实值平均值
    y_mean=sum(data_real)/len(data_real)
    # 循环求解TTS
    TSS=0
    for temp in data_real:#遍历每一个真实值
        TSS=TSS+(temp-y_mean)**2
    #循环求解ESS
    ESS=0
    for temp in data_pred:
        ESS=ESS+(temp-y_mean)**2
    #循环求解RSS
    temp_real_pred=data_real-data_pred
    #计算拟合优度R方
    RSS = sum(x ** 2 for x in temp_real_pred)
    R_square=ESS/TSS
    return TSS,ESS,RSS,R_square

将真实值带入得到最终结果

y_TSS,y_ESS,y_RSS,y_R_square=compute_R_square(y,x)
print(y_TSS,y_ESS,y_RSS,y_R_square)
11065.547048 10416.845352000002 397.7123999999999 0.9413764459013126

得最终R^2=0.94

        调整后拟合优度 (Adjusted R-squared)考虑了模型自由度对拟合优度的影响,其会在模型增加自变量但增加的拟合优度并不显著时进行惩罚,拟合越好,调整后拟合优度越大,但通常不会超过R^2,因为考虑了模型的复杂度。

主要区别总结

  • R-squared衡量模型解释因变量变化的能力,但不考虑模型复杂度。
  • Adjusted R-squared在计算时考虑了模型的复杂度,通过减去自由度的惩罚项来避免因模型复杂度增加而导致的不合理的优化。

因此,一般来说,当比较不同模型时,调整后拟合优度更适合用作评估标准,因为它可以更准确地反映模型的预测能力,避免了过度拟合的可能性。

调整后拟合优度等式及代码:

[ \text{Adjusted R-squared} = 1 - \frac{(1 - R^2) \cdot (n - 1)}{n - k - 1} ]

#n为样本数量,k为自变量个数,R_square为拟合优度
def compute_Adjust_R_square(n,k,R_square):
    Adjust_R_square=1-(1-R_square)*(n-1)/(n-k-1)
    return Adjust_R_square

得到结果:

0.94015512185759

        由于示范数据为随机生成,每次所得到的数据不同,所以若有读者运行代码得到的数值不同为正常情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值