Home > Mobile >  Local variable referenced before assignment in If statement when calculating mean absolute error
Local variable referenced before assignment in If statement when calculating mean absolute error

Time:07-30

I'm trying to add a weight to not penalize as much if prediction is greater than the actual in a forecast. Here's my code, however, I keep getting:

UnboundLocalError: local variable 'under' referenced before assignment

import numpy as np

def mae(y, y_hat):
    if np.where(y_hat >= y):
        over = np.mean(0.5*(np.abs(y - y_hat)))
    elif np.where(y_hat < y):
        under = np.mean(np.abs(y - y_hat))
    return (over   under) / 2

I've tried setting 'under' to global but that doesn't work either. This is probably an easy fix though I'm more of an R user.

CodePudding user response:

So because of the if and elif statement, when you return np.mean(over,under), either under or over isn't going to be defined. Therefore, you either need to initialize under and over with initial values or rework it because with you current logic only one of those variables will be defined.

EDIT

So you changed it to (over under) / 2 as the return statement. Still one of them isn't going to be defined. So you should initialize them as 0. Such as:

import numpy as np

def mae(y, y_hat):
    under = 0
    over = 0
    if np.where(y_hat >= y):
        over = np.mean(0.5*(np.abs(y - y_hat)))
    elif np.where(y_hat < y):
        under = np.mean(np.abs(y - y_hat))
    return (over   under) / 2

Then they won't affect the output at all when not in use.

  • Related