更高r2r2测试数据的价值高于训练数据?

机器算法验证 回归 线性模型 r平方
2022-04-19 18:55:37

我正在尝试创建一个线性回归模型。我将我的数据分成训练和测试数据,并建立了一个模型。训练数据上的值为 0.840。然后我在测试数据上运行模型。当我计算时,我得到 0.982:R2R2

y.predicted <- predict(lm1, newdata=test)
y.actual <- donation_test$yval
errors <- (y.actual - y.predicted)
1 - sum(errors^2)/sum(y.actual^2)
[1] 0.9823576  

我做错了什么?我的模型似乎不太可能比我的训练数据更适合我的测试数据。

3个回答

我认为计算r平方的公式是

R-squared = 1 - (RSS/TSS)

在哪里TSS = sum((y-mean(y))^2)RSS = sum((y-y.predict)^2)

R2value 不是模型选择或模型拟合的指标。 原因是数据的固有可变性可能会影响R2. 考虑以下数据集: 在此处输入图像描述

( Y_ v/s X) 图比 ( Y v/s X) 分布更广。结果是R2前一个(方差较大)的值将低于后者(方差较小)。

这证明你不能使用R2检查模型是否很好地拟合数据的值。

相反,您应该检查以下模型假设:

  • 线性趋势:(来自散点图)
  • 误差的恒定方差:(来自残差 v/s 拟合图)
  • 误差的正态分布:(来自QQ图)

一种解释可能与您如何对测试数据进行子集化(他们拆分训练和测试数据的方式)有关。如果您的测试数据仅包含(仅几个)类似的观察结果,那么您的 R 平方度量很可能与训练数据的不同。

一个好的做法是将随机选择的 X% 的数据拆分为训练集,将剩余的 (100 - X)% 拆分为测试数据。

此外,一般来说,您不应该对测试数据使用 R 平方,而是使用 RMSE 或 MSE 之类的东西。