使用套索回归得到负 r 平方,python

getting negarive r squared with lasso regression, python

我做了套索回归,但得到了负 R 平方。这是我的编码:

X = df.drop('var', axis=1)
y = df['var']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=10)
reg = Lasso(alpha=0.5)
reg.fit(X_train, y_train)
lambdas = (0.001, 0.01, 0.1, 0.5, 1, 2, 10)
l_num = 7
pred_num = X.shape[1]

# prepare data for enumerate

coeff_a = np.zeros((l_num, pred_num))
train_r_squared = np.zeros(l_num)
test_r_squared = np.zeros(l_num)

# enumerate through lambdas with index and i
for ind, i in enumerate(lambdas):    
    reg = Lasso(alpha = i)
    reg.fit(X_train, y_train)

    coeff_a[ind,:] = reg.coef_
    train_r_squared[ind] = reg.score(X_train, y_train)
    test_r_squared[ind] = reg.score(X_test, y_test)

当我打印 test_r_squared[ind] 时,我得到 -0.8086 。

这是为什么?任何帮助,将不胜感激。谢谢

获得小于0的R^2值并非不可能。

R^2 是用于衡量回归器性能的指标。 R^2 指标的最佳分数是 1。如果任何回归量预测一个常数值,您应该期望该回归量的 R^2 得分为 0。但出乎意料的是,您可以获得比这更差的性能。那是因为:

R^2 由以下公式给出:

R^2 = 1-FVU

其中,FVU(Fraction of Variance Unexplained)是残差平方和与数据方差的比值。因此,当您的残差平方和大于数据的方差时,您应该期望 FVU > 1,因此 R^2 值 小于 0。当您选择错误的模型或无意义的参数时,可能会发生这种情况。

简而言之,您可能会得到 小于 0 的 R^2 分数。这意味着您选择了错误的模型或参数。