统计学、机器学习名词解析——TSS、ESS、RSS、拟合优度、调整后拟合优度
统计学、机器学习名词解析——TSS、ESS、RSS、拟合优度、调整后拟合优度
在统计学和机器学习领域,评估模型的拟合优度是至关重要的一步。本文将介绍几个常用的评估指标:TSS(总平方和)、ESS(解释平方和)、RSS(残差平方和)、R-squared(拟合优度)以及Adjusted R-squared(调整后拟合优度)。通过Python代码示例和图形化展示,帮助读者深入理解这些概念及其计算方法。
数据准备
首先,我们随机生成一组数据并进行拟合(注意,这里只是为了演示目的,并不进行严格的拟合):
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()
关键指标解释
TSS(Total Sum of Squares):总平方和
TSS反映了数据的总变异,计算公式为:
$$
TSS = \sum_{i=1}^{n} (y_i - \bar{y})^2
$$
其中,$y_i$是实际观测值,$\bar{y}$是所有观测值的平均值。
ESS(Explained Sum of Squares):解释平方和
ESS反映了模型对数据变异的解释能力,计算公式为:
$$
ESS = \sum_{i=1}^{n} (\hat{y}_i - \bar{y})^2
$$
其中,$\hat{y}_i$是模型预测值。
RSS(Residual Sum of Squares):残差平方和
RSS衡量了模型预测误差的总量,计算公式为:
$$
RSS = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2
$$
R-squared(拟合优度)
R-squared也称为决定系数,表示模型解释的数据方差比例,计算公式为:
$$
R^2 = \frac{ESS}{TSS}
$$
拟合优度越接近1,模型对数据的解释能力越强,拟合越好。
Python代码实现
下面是计算这些指标的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 += (temp - y_mean) ** 2
# 循环求解ESS
ESS = 0
for temp in data_pred:
ESS += (temp - y_mean) ** 2
# 循环求解RSS
temp_real_pred = data_real - data_pred
RSS = sum(x ** 2 for x in temp_real_pred)
# 计算拟合优度R方
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
调整后拟合优度(Adjusted R-squared)
调整后拟合优度考虑了模型自由度对拟合优度的影响,其会在模型增加自变量但增加的拟合优度并不显著时进行惩罚。计算公式为:
$$
Adjusted\ R^2 = 1 - (1 - R^2) \frac{n-1}{n-k-1}
$$
其中,$n$为样本数量,$k$为自变量个数。
Python代码实现:
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
总结
- R-squared衡量模型解释因变量变化的能力,但不考虑模型复杂度。
- Adjusted R-squared在计算时考虑了模型的复杂度,通过减去自由度的惩罚项来避免因模型复杂度增加而导致的不合理的优化。
因此,一般来说,当比较不同模型时,调整后拟合优度更适合用作评估标准,因为它可以更准确地反映模型的预测能力,避免了过度拟合的可能性。
由于本文使用的数据是随机生成的,每次运行代码得到的数值可能会有所不同,这是正常现象。