如果预测大于预测中的实际值,我试图添加一个权重,以避免惩罚太多。这是我的代码,然而,我一直得到:
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用户。
因此,由于if
和elif
语句,当您返回np.mean(over,under)
时,不会定义under
或over
。因此,您要么需要用初始值初始化under
和over
,要么重新处理它,因为在当前逻辑中,只会定义其中一个变量。
编辑
所以您将其更改为(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
这样它们在不使用时就不会影响输出。