Resultados de RMSLE distintos en comet que lo que calculo

Resultados de RMSLE distintos en comet que lo que calculo

de Valentina Chagas Bas -
Número de respuestas: 1

Hola, yo vengo calculando los scores como 

scores_train = cross_validate(....)
 
train_rmsle_scores = np.sqrt(-scores_train['train_score'])  
val_rmsle_scores = np.sqrt(-scores_train['test_score'])   
 
train_rmsle_scores.mean()
val_rmsle_scores.mean()
 
En comet, subo los scores como: 
train_scores = np.sqrt(-cv_scores['train_score'])
val_scores = np.sqrt(-cv_scores['test_score'])
 
Donde cv_scores es scores_train.
En metricas obtengo un resultado distinto al que calculo con el mean. 
Por ejemplo para decision trees calculado por mi obtengo:
Error de validación para un arbol de decision con parametros por defecto 0.5372219221737858
 
Y en comet tengo dos cosas:
Val RMSLE  0.539441
Val RMSLE Mean 0.537222
 
Entonces, que es Val RMSLE? Ya que para mi era el mean, pero aparentemente hace otra cuenta.
 
Este es el codigo completo para guardar los resultados:
 
def save__results(cmt_exp, cv_scores, kf, model, clip_negative=False):
 
    n_splits = kf
   
    if clip_negative: #es para xgboost
        train_scores = np.sqrt(np.maximum(0, -cv_scores['train_score']))
        val_scores = np.sqrt(np.maximum(0, -cv_scores['test_score']))
    else:
        train_scores = np.sqrt(-cv_scores['train_score'])
        val_scores = np.sqrt(-cv_scores['test_score'])
 
    model_params = model.get_params(deep=True)
    cmt_exp.log_parameters(model_params)
 
    for k in range(n_splits):
        metrics_step = {
            'Train RMSLE': train_scores[k],
            'Val RMSLE': val_scores[k],
        }
        cmt_exp.log_metrics(metrics_step, step=k)
 
    cmt_exp.log_metrics({
        'Train RMSLE Mean': train_scores.mean(),
        'Train RMSLE Std': train_scores.std(),
        'Val RMSLE Mean': val_scores.mean(),
        'Val RMSLE Std': val_scores.std(),
    })

    return train_scores.mean(), val_scores.mean()
 
Gracias.
En respuesta a Valentina Chagas Bas

Re: Resultados de RMSLE distintos en comet que lo que calculo

de Sara Silva -
Hola Valentina,

Me parece que lo que está pasando es simplemente que Val RMSLE es para cada fold, y el mean es efectivamente la media. O sea mirando en el momento en que definis "Val RMSLE" en tu código, es:

for k in range(n_splits):
metrics_step = {
'Train RMSLE': train_scores[k],
'Val RMSLE': val_scores[k],
}
cmt_exp.log_metrics(metrics_step, step=k)

Se va a loggear un diccionario para cada fold con el step k. No tengo claro qué hace Comet cuando le indicás el step pero mirando rápidamente la documentación dice que:

step (Optional[int], default: None ) –
Used as the X axis when plotting on Comet.

o sea que simplemente va a loggear esa métrica para cada step que le pases en el eje x, en ningún momento parece hacer un promedio. Si a vos te aparece un solo valor problemente sea el del último fold o algo del esitlo.

Espero que sea este el problema, fijate si coincide el valor del último fold con lo que te está guardando ahí Comet. Sino cualquier cosa consultá de nuevo.

Saludos