假设我们想要在一个二分类问题上训练一个机器学习模型, 一个标准的度量模型性能的方法叫做log-loss或binary cross-entropy. 这意味着对于给定的预测标签y的任务, 我们想要得到概率 y ^ \hat{y} y^,而不是仅仅输出一个0/1的预测类别.模型的cross entropy 分数定义为:
∑ i − y i l o g y i ^ − ( 1 − y i ) l o g ( 1 − y i ^ ) \sum_i -y_i log \hat{y_i}-(1-y_i)log(1-\hat{y_i}) i∑−yilogyi^−(1−yi)log(1−yi^)
现在假设测试集的正负样本比例与训练集不同.这不是一个假设的情景. 这正是最近添加的 "Quora question pair challenge” 的竞争对手面临的问题。这篇文章是为了解释为什么交叉熵的性质使得这是一个有问题的设置和理论解决方案.这个问题也可能出现在正样本的比例随时间变化的情况下,但是要使用训练交叉熵得分. Kaggle讨论区的一些posters提到了将训练集预测转换为测试集预测的尝试,但\到目前为止还没有对其进行过严格的发表分析,所以这里…
交叉熵是一种源于信息理论的损失函数。 “One way to think about it is how much extra information is required to derive the label set from the predicted set.” 在我看来,一种更直观的方式理解是" it is as a loss function that rewards the model for being ‘honest’ about how probable it believes labels to be." 假设我们的预测模型认为给定标签是正的概率为p。 我们应该输出什么值 0 ≤ q ≤ 1 0 \leq q \leq 1 0≤q≤1来最小化交叉熵损失? 好吧,如果我们真的相信标签是正面的可能性为p,那么我们对损失的最佳估计是:
l o s s ( q ) = − p l o g ( q ) − ( 1 − p ) l o g ( 1 − q ) loss(q) =-p log(q)-(1-p)log(1-q) loss(q)=−plog(q)−(1−p)log(1−q)
针对q对这个问题进行求导,并且设置为0来找到最小值.我们获得:
1 − p 1 − q = p q \frac{1-p}{1-q}=\frac{p}{q} 1−q1−p=qp
因此可以验证当q = p时,损失函数达到最小值。
现在让我们考虑为什么训练和测试集之间的类别比例不同对于交叉熵损失来说是有问题的。假设我们只想采用最天真的模型,即我们为每个标签输出相同的值。通过上面的讨论,将优化训练集上的损失的单个值是 P ( y ) \mathbb {P}(y) P(y),即随机选择的标签为正的概率,但是如果这样,如果概率是相同的话在测试集上也将最大化它. 即如果在训练/测试集中正例是相同的。这是在Bayesian-speak中的’先验’。
此外,更复杂的模型在它们非常“不确定”时会倾向于围绕这个模型,即当它们不从训练特征中收集关于标签的任何额外信息时,如果训练/测试集类别不平衡时它们将会受到惩罚。
假设我们的训练集是从分布 ( X , y ) (X,y) (X,y)中提取的,我们的测试集是从 ( X ′ , y ′ ) (X',y') (X′,y′)中提取的。 我们的假设是,这两个分布之间的唯一区别是它们恰好具有不同比例的正例或负例。例如 X ∣ ( y = 0 ) ∼ X ′ ∣ ( y ′ = 0 ) X|(y=0) \sim X'|(y'=0) X∣(y=0)∼X′∣(y′=0) and X ∣ ( y = 1 ) ∼ X ′ ∣ ( y ′ = 1 ) X|(y=1) \sim X'|(y'=1) X∣(y=1)∼X′∣(y′=1).
假设我们有一些样本 x ∈ X x \in X x∈X. 我们的模型是想要估计 P ( y ∣ x ) \mathbb{P} (y| x) P(y∣x), 其中 y y y是标签为正的事件 (并且 ¬ y \neg y ¬y是标签为负的事件). 假设我们模型的最佳估计是p. 通过贝叶斯理论,我们有:
现在假设相同的 x x x从 X ′ X' X′中采样,我们现在正在尝试估算 P ( y ′ ∣ x ) \mathbb {P}(y'| x) P(y′∣x)。 我们假设 X ′ X' X′与 X X X相同,除了正样本已由比率 α \alpha α过采样,负样本乘以比率 β \beta β . 即 P ( y ′ ) = α P ( y ) \mathbb {P}(y')= \alpha \mathbb {P}(y) P(y′)=αP(y)和 P ( ¬ y ′ ) = β P ( ¬ y ) \mathbb {P}(\neg y')= \beta \mathbb {P}(\neg y) P(¬y′)=βP(¬y). 如上所述,在条件 y ′ y' y′上, X ′ X' X′和 X X X是相同的,因此 P ( x ∣ y ) = P ( x ∣ y ′ ) \mathbb {P}(x | y)= \mathbb {P}(x | y') P(x∣y)=P(x∣y′),所以
从上述等式,可以得出 v ≈ μ ( 1 − p ) / p v \approx \mu(1-p)/p v≈μ(1−p)/p,所以
因此,从训练集中的概率到测试集中的概率的链接函数映射是:
可以做进一步的工作来估计x的不确定性如何影响 f ( x ) f(x) f(x)的不确定性.
注意,也可以从尝试优化损失函数的方式得出该公式:
这表明我们可以优化损失函数:
举个例子,让我们回到原来的Quora数据集。 (目前)认为训练集有37%的阳性,而测试集只有16.5%的阴性。 从上面的讨论中,我们采用 α = 16.5 / 37 \alpha = 16.5 / 37 α=16.5/37和 β = 83.5 / 63 \beta = 83.5 / 63 β=83.5/63,然后f看起来像这样:
这里我们有标记线来确认 f ( 0.37 ) = 0.165 f(0.37)= 0.165 f(0.37)=0.165。 我们的函数还具有一些简单的线性缩放所不具备的理想特性,例如: 如果我们的x非常接近0或1,那么 f ( x ) f(x) f(x)也将是。
还要注意,我们在很大程度上依赖于 X X X中的正/负分别与 X ′ X' X′中的正/负相等的假设。 如果不是这样,那么这种分析是非常有限的!
参考:Cross entropy and training-test class imbalance/