首页 > 解决方案 > 如何为回归计算训练 VS 测试调整后的 R^2

问题描述

对于训练和测试集的调整后 R^2 的计算,我有点困惑。在为我的训练和测试数据集计算调整后的 R^2 系数 ( n )时,我应该使用多少个观察值?

这是调整后的 R2 公式,其中:

  1. n表示数据中的点(行)数
  2. k表示独立回归变量的数量(不包括响应变量的列)

我的问题是,在训练和测试数据上计算调整后的 R^2 时使用的n是多少?

我使用了此处提到的另一个问题的公式(从 sklearn 获得了 r2)函数。

adj_r2 = 1 - (1-r2)*(len(X)-1)/(len(X)-X.shape[1]-1)

其中 X 是 X_train 或 X_test。

对于X_trainX_test,k相同但n不同。以 80-20 分割为例,得到 8 个训练行和 2 个测试行。计算调整后的 R^2 时是否使用相应的 train/test n

我觉得使用不同n会导致调整后的 R^2 发生巨大差异,从而导致测试 R^2 受到更多惩罚。

标签: pythonmachine-learningscikit-learnregression

解决方案


是的,您应该分别使用每个数据集中的观察次数。即:n_train = len(X_train)n_test = len(X_test)

你是对的,这可能会导致调整后的 R2 值发生剧烈变化,但前提是你的模型不稳定。这就是将数据拆分为训练和测试数据集背后的全部想法:您希望您的模型能够很好地概括以前看不见的数据。如果您的模型是稳定的,它将在所有数据集中具有相似的性能指标。

如果您的 R2 系数变化很大,这表明您的模型对训练数据过度拟合。您的目标是通过调整模型的超参数、转换或删除某些变量等来最小化这种差异。


推荐阅读