对于二进制预测问题,如果真实标签为0,则右预测的增益为T_0,错误预设的损失为F_0。 1,T_1,F_1相同。
每个样本都有其唯一的T_0,T_1,F_0,F_1。我想我需要更改eval指标,但我不知道该怎么做。由于大多数自定义eval指标仅输入(pred,true label),您知道如何解决问题吗?
答案 0 :(得分:1)
我认为一个解决方法是简单地将四个值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
也可能有一种有效的方法,如果我发现了什么,我会更新答案。但是,只要将值正确附加到基础事实上,这应该可以正常工作。