计算平均绝对误差时,If语句中赋值前引用的局部变量



如果预测大于预测中的实际值,我试图添加一个权重,以避免惩罚太多。这是我的代码,然而,我一直得到:

UnboundLocalError:在分配之前引用了局部变量"under">

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

我试过将"under"设置为global,但也不起作用。这可能是一个简单的解决方案,尽管我更喜欢R用户。

因此,由于ifelif语句,当您返回np.mean(over,under)时,不会定义underover。因此,您要么需要用初始值初始化underover,要么重新处理它,因为在当前逻辑中,只会定义其中一个变量。

编辑

所以您将其更改为(over + under) / 2作为返回语句。仍然有一个不会被定义。因此,您应该将它们初始化为0。例如:

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

这样它们在不使用时就不会影响输出。

最新更新