好的模型可以有低的 R 方值吗?

Can a good model have a low R square value?

我使用 scikit learn 进行了线性回归

当我在测试数据上看到我的均方误差时,它非常低 (0.09)

当我在测试数据上看到 r2_score 时,它也非常少 (0.05)

据我所知,当均方误差很低时,当前模型很好,但 r2_score 非常小,这表明模型不好

不明白我的回归模型好不好

好的模型可以具有较低的 R 方值还是坏的模型可以具有较低的均方误差值?

R^2 是衡量您的拟合度代表数据的程度。

假设您的数据具有线性趋势并且其中有一些噪声。我们可以构建数据并查看 R^2 是如何变化的:

数据

我将使用 numpy:

创建一些数据
xs = np.random.randint(10, 1000, 2000)
ys = (3 * xs + 8) + np.random.randint(5, 10, 2000)

适合

现在我们可以使用 scikit 创建一个拟合对象

reg = LinearRegression().fit(xs.reshape(-1, 1), ys.reshape(-1, 1))

而且我们可以从这个拟合中得到分数。

reg.score(xs.reshape(-1, 1), ys.reshape(-1, 1))

我的 R^2 是:0.9999971914416896

错误数据

假设我们有一组更分散的数据(上面有更多噪声)。

ys2 = (3 * xs + 8) + np.random.randint(500, 1000, 2000)

现在我们可以计算 ys2 的分数,以了解我们对 xsys2 数据的拟合程度:

reg.score(xs.reshape(-1, 1), ys2.reshape(-1, 1))

我的 R^2 是:0.2377175028951054

分数低。我们知道数据的趋势没有改变。它仍然是 3x+8 +(噪声)。但是 ys2 离合身更远了。

因此,R^2 是您的拟合代表数据的好坏程度的感应器。但数据本身的状况很重要。也许即使分数低,您也能得到最合适的选择。由于数据因噪声而分散。