我写了一个自定义损失函数,该函数应该通过二进制决策来优化收益。但是,神经网络难以转换,因此我怀疑此函数存在问题。
收益如下。想象一下,对于每个样本,神经网络都必须决定是否参与(真/假)。每个样本都有一些解释变量和已知的单个收益(p)。奖励或损失如下:
定制的keras损失函数如下所示(我通过y_true传递收益,但在开始时将其拆分。这是必需的,因为keras收益函数仅允许两个参数):
def custom_cross_entropy(y_true, y_pred):
# y_true has the payoffs in the last dimension
y_true, payoffs = splitter(y_true)
tp_weight = K.abs(payoffs) # true positive has a positive payoff as described in the payoff vector, it's different for every item
tn_weight = 0 # true negative has a payoff of 0
fp_weight = 1 # cost of 1 for false positive
fn_weight = K.abs(payoffs) # false negative has an opportunity cost of payoff (vector)
loss = -K.mean(fn_weight * y_true * K.log(y_pred + 1e-7) + # false negative
fp_weight * (1 - y_true) * K.log(1 - y_pred + 1e-7)) # false positive
return loss
def splitter(y_true):
payoffs = y_true[:, 1]
payoffs = K.expand_dims(payoffs, 1)
y_true = y_true[:, 0]
y_true = K.expand_dims(y_true, 1)
return y_true, payoffs
此付款功能可能有什么问题?我只使用假阴性和假阳性。那是对的吗?还有什么可能是问题?如果真负数的收益为x,则损失函数有何不同?似乎仅使用假的true和negatives是不够的。 任何建议表示赞赏。