【机器学习】12. 线性回归 Residual 残差系数 R方

Sum of Squares Total (SST)
单个数据点(观测值)于响应变量的均值差的平方和。

Sum of Squares Regression (SSR)
预测值ŷi与响应变量均值差的平方和。

Sum of Squares Error (SSE)
预测值ŷi与观测值差的平方和。

R 2 = 1 − S S E / S S T = S S R / S S T R^2 = 1 - SSE/SST = SSR / SST R2=1SSE/SST=SSR/SST

SST = SSE + SSR

SSE = 0 -> R2 = 1 模型是好的

SSE = SST -> R2 = 0 预测值等于平均值,这个模型完全没用,直接算平均值好了

SSE > SST -> R2 < 0 预测值还不如平均值

这里的R方,有个比较有趣的结论,是本人在调用sklearn后R方为负数情况下思考的。R方在实际应用中,确实可能小于0,但是在数学和统计学的角度来说,SSE是不会大于SST的。

SSE ≤ SST , because a model can‘t introduce more variation than originally present in the data.
回归模型至少与均值模型一样好:在使用回归模型时,模型会尝试找到一条最佳拟合的直线或曲线,以尽量减少观测值和预测值之间的差异(SSE)。一个合理的回归模型应该至少比均值模型更好,或与其相当。
最差的情况是模型根本没有任何解释能力,此时
SSE=SST,即模型和均值模型一样糟糕。
但通常情况下,回归模型至少可以解释部分变异性,因此 SSE ≤ SST。

为什么 SSE > SST 不可能发生:
总变异 (SST) 包括了所有观测值相对于均值的偏差,而 残差平方和 (SSE) 是模型预测值与观测值之间的误差。因此,SST 是“总的变异”,而 SSE 是“模型无法解释的那部分变异”。最糟糕的情况是模型完全无法解释数据中的变异性,这时候 SSE = SST。

如果出现 SSE > SST 的情况,意味着模型拟合的误差比直接用均值预测的误差还要大,这不仅没有减少误差,反而引入了更多的误差,违背了模型拟合的基本目标。

R方为负数的案例

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import r2_score

# Set random seed for reproducibility
np.random.seed(42)

# Generate random data for original X
X = np.random.rand(100, 1)  # 100个样本的特征

# Generate y values that are independent of X
y = np.random.rand(100) * 1000 + 5000  # 随机生成 y 值,范围大

# Fit a linear regression model
model = LinearRegression()
model.fit(X, y)

# Generate a new set of X values that are independent from the original
X_new = np.random.rand(100, 1) * 100  # 新生成的 X 值,范围为 0-100

# Make predictions using the new X values
y_pred = model.predict(X_new)

# Calculate R²
r2 = r2_score(y, y_pred)
print(f"R²: {r2}")


但是,在实战中,确实会有R方<0的情况。
为什么会得到负的 R² 值

  • 完全独立的 y 值:y 是随机生成的,与 X 完全无关。这意味着无论如何拟合模型,模型都无法捕捉到 y 中的任何变异。

  • 新 X 值的引入:通过使用一个与原始 X 完全独立的新 X 值进行预测,模型预测的输出与实际 y 值之间的差异会显著增加。这导致模型预测效果变得很糟糕。

  • 残差平方和 (SS_res):由于 y 的随机性,模型的预测值(即 y_pred)与实际 y 值之间的差异会很大,导致残差平方和 (SS_res) 变得很高。

  • 结果:因为 SS_res 相对于 SS_tot 的值非常高,导致 R² 计算结果小于 0。负的 R² 值表明模型的表现甚至比简单使用均值来预测更糟糕(即 SS_res 大于 SS_tot)。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值