получение отрицательного r в квадрате с регрессией лассо, питон

Я сделал регрессию лассо, но получил отрицательный 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 .

Почему это? Любая помощь будет оценена. Спасибо.

1 ответ

Решение

Невозможно получить значение R^2 меньше 0.

R^2 - это показатель, используемый для измерения производительности регрессора. Оптимальная оценка метрики R^2 составляет1. Если какой-либо регрессор предсказывает постоянное значение, вы должны ожидать, что оценка R^2 составит0для этого регрессора. Но неожиданно вы можете получить более низкую производительность. Это потому что:

R^2 определяется по формуле:

R^2 = 1-FVU

Где, FVU (доля необъяснимой дисперсии) - это отношение остаточной суммы квадратов и дисперсии данных. Итак, когда ваша остаточная сумма квадратов больше дисперсии данных, вы должны ожидать, что FVU>1, следовательно, значение R^2 меньше 0. Это может случиться при выборе неправильной модели или бессмысленных параметров.

Короче говоря, вы можете получить оценку R^2 меньше 0. Значит, вы выбрали неправильную модель или параметры.

Другие вопросы по тегам