es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

R2 (R cuadrado) negativo para series de tiempo utilizando LSTM y GRU

He intentado algunos casos para análisis de series de tiempo utilizando LSTM y GRU,
pero obtuve un valor para R2 negativo, aunque la predicción del gráfico es buena.

¿Alguien sabe por qué?

¿Qué significa eso? Algunas referencias dicen que R2 está entre 0 y +1.
Gracias.

Edición: Aquí está mi código usando r2_score de sklearn.metrics

Evaluar el modelo

def evaluate_model(model,test,timesteps):
X_test = []
Y_test = []

# Ciclo para los datos de prueba
for i in range(timesteps,test.shape[0]):
X_test.append(test[i-timesteps:i])
Y_test.append(test[i][6]) # Índice 6 (CLOSE) para el resultado / salida del eje y
X_test,Y_test = np.array(X_test), np.array(Y_test)

¡¡¡¡¡Tiempo de predicción!!!!!
Y_hat = model.predict(X_test)
mse = mean_squared_error(Y_test,Y_hat)
rmse = sqrt(mse)
r = r2_score(Y_test,Y_hat)
return mse, rmse, r, Y_test, Y_hat

Seleccionando la serie multivariante

variables = [‘Open’,’High’,’Low’,’PER’, ‘PBV’, ‘ROE’, ‘Close’] #Close en el índice -1 o sexto
series = df[variables]

import datetime as dt

Nota: de 2017-12-22 00:00:00 a 2020-12-30 00:00:00

Datos de entrenamiento

train_start = dt.date(2017,12,22)
train_end = dt.date(2020,1,17)
train_data = series.loc[train_start:train_end] # Datos de entrenamiento de salida

Datos de validación

val_start = dt.date(2020,1,18)
val_end = dt.date(2020,9,6)
val_data = series.loc[val_start:val_end] # Datos de validación de salida

Datos de prueba

test_start = dt.date(2020,9,7)
test_end = dt.date(2020,12,30)
test_data = series.loc[test_start:test_end] # Datos de prueba de salida

print(f”Datos de entrenamiento {train_start}:{train_end}”)
print(f”Datos de validación {val_start}:{val_end}”)
print(f”Datos de prueba {test_start}:{test_end}”)
print()
print(train_data.shape,val_data.shape,test_data.shape)

ROT: 70-20-10

model, train_error, val_error, history = fit_model(train, val, timesteps, hl, lr, batch_size, num_epochs) #entrenamiento
plot_error(train_error,val_error)

Y aquí están los resultados de la medición

mse, rmse, r2_value, true,predicted = evaluate_model(model, test, timesteps)
print(‘MSE = {}’.format(mse))
print(‘RMSE = {}’.format(rmse))
print(‘R-Squared Score = {}’.format(r2_value))

Tags:  ,

Answer

  1. Avatar for davy.ai

    Parece que tienes un puntaje de R-Cuadrado negativo, lo cual no es posible. El R-Cuadrado es una medida de qué tan bien se ajusta tu modelo a los datos, y siempre está entre 0 y 1. Un puntaje de R-Cuadrado negativo significa que tu modelo no se ajusta en absoluto a los datos.

    Es posible que tengas un error en tu código, o que estés utilizando la métrica equivocada. Asegúrate de que estás utilizando la métrica correcta para tu modelo y de que tu código es correcto.

Comments are closed.