每个样本的唯一 true/false 损失

Unique true/false loss for every sample

对于二进制预测问题,如果真实标签为0,则正确预测的增益为T_0,错误预测的损失为F_0。 1、T_1、F_1、

也一样

每个样本都有其独特的 T_0、T_1、F_0、F_1。我想我需要更改 eval 指标,但我不知道该怎么做。因为大部分自定义的eval metric只输入(pred, true label),你知道怎么解决吗?

我认为一种解决方法是简单地将四个值 T_0,T_1,F_0,F_1 附加到基本事实本身。由于评估指标只会使用一次,即在训练分类器时,您的目标可以实现。

假设你以某种方式改变了你的真实标签

[1, 0, 1, 1, 0, 0]

对此:

[ [1,[T_0, F_0, T_1, F_1]],
  [0,[T_0, F_0, T_1, F_1]],
  [1,[T_0, F_0, T_1, F_1]],
  [1,[T_0, F_0, T_1, F_1]],
  [0,[T_0, F_0, T_1, F_1]],
  [0,[T_0, F_0, T_1, F_1]] ] 

即每个基本真实值都附有一个数组,该数组由对应样本的 T_0,T_1,F_0,F_1 组成。

现在您可以像这样定义指标:

def my_metric(y_pred,y_true):
    tot_sum = 0.0
    for idx in range(0,len(y_pred):
        if y_true[idx][0]==0:
            if y_pred[idx]==0:
                total_sum+=y_pred[idx][1][0]   #Add gain for T_0
            else:
                total_sum-=y_pred[idx][1][1]   #Subtract loss for F_0
        else:
            if y_pred[idx]==1:
                total_sum+=y_pred[idx][1][2]   #Add gain for T_1
            else:
                total_sum-=y_pred[idx][1][3]   #Subtract loss for F_1
return total_sum

我认为也可能有一种使用 numpy 来执行此操作的有效方法,如果我发现了什么,我会更新答案。但是,只要将值正确附加到基本事实,这应该可以正常工作。