最大化目标总和的损失函数

数据挖掘 神经网络 分类 回归 损失函数
2021-09-25 06:17:55

我有一个数据集 {Xi, Yi}。 Yi- 真正的价值目标,它们可以是负数。任务是教分类器f:Xi{0,1} 最大化下面的总和

L(f)=if(Xi)Yi
所以 f(Xi)=I[Yi>0]将是理想的分类器。我正在寻找合适的平滑损失函数来教授 NN。NN输出是概率p(Xi), 所以 f(Xi)=I[p(Xi)>0.5]. 我尝试了下一个损失函数:
BadLoss(p)=ip(Xi)Yi
但是因为 Yi可以是负数,这是定义错误的损失,并且 NN 收敛到什么都不好。我得到的最好结果是通常的 logloss:
Loss(p)=ilogloss(p(Xi),I[Yi>0])

是否有更好的损失函数来最大化总和 L(f)?

1个回答

定义 Zi=1[Yi>0], IE, Zi=1 如果 Yi>0, 别的 Zi=1. 现在数据集(Xi,Zi)定义了一个二分类布尔分类问题。最高精度的布尔分类问题的解决方案解决了您的原始问题(最小化您的损失函数)。

因此,您基本上是在问如何训练神经网络来解决两类布尔分类问题。一种合理的方法是在神经网络的输出端放置一个 softmax 层,并像往常一样使用交叉熵损失对其进行训练。在测试期间,要选择一个类,您可以选择两个类中的哪一个具有从 softmax 阶段输出的更高可能性。换句话说,在训练时,您查看来自 softmax 层的实际输出(连续值)并使用交叉熵;在测试时,您比较两个输出并选择较大的一个来选择分类(除此之外忽略它们的确切值)。

这种方法的缺点是没有考虑到 Yi的,只有他们的标志。为了改善这一点,请对样本使用权重。我们将再次在训练集上训练一个布尔分类器(Xi,Zi),但这次我们将对训练集中的每个样本进行不同的加权。把重量Yi 在样品上 (Xi,Zi)在你的训练集中。换句话说,在训练布尔分类器时,损失函数将是每个样本损失的加权和:

Loss(θ)=iYi(fθ(Xi),Zi)

在哪里 θ 是模型参数, fθ(Xi) 是分类器在输入上的输出 Xi, 和 (,)是交叉熵损失。请注意,样本中的错误Yi 大的惩罚更多,样本中的错误 Yi小则处罚少;这是合适的,因为这正是您使用分类器时会发生的事情fθ 计算 L(fθ). 这应该会改进您采用的方法。