具有自定义损失函数的二元决策收益

时间:2018-07-10 07:41:59

标签: tensorflow neural-network keras loss-function

我写了一个自定义损失函数,该函数应该通过二进制决策来优化收益。但是,神经网络难以转换,因此我怀疑此函数存在问题。

收益如下。想象一下,对于每个样本,神经网络都必须决定是否参与(真/假)。每个样本都有一些解释变量和已知的单个收益(p)。奖励或损失如下:

  • 真正数:收益(通过变量在y_true中的第二个维度上传递)。收益是一个向量,并且每个样本的收益都不同。
  • 真否定:0
  • 误报:-1
  • 假阴性:0(但有机会获得回报)

定制的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是不够的。 任何建议表示赞赏。

0 个答案:

没有答案