是否可以使 F1_Score 可微分并直接用作损失函数?

数据挖掘 机器学习 Python 优化 损失函数 f1score
2021-09-25 23:58:45

在二元分类中广泛使用的指标之一是 F1 分数:

F1=2recallprecisionrecall+precision

F1-score 的问题在于它不可微,因此我们不能将其用作损失函数来计算梯度并在训练模型时更新权重。F1 分数需要二元预测 (0/1) 来测量。

我经常看到它。假设我使用的是线性回归或梯度提升。

有什么办法可以直接最小化吗?

2个回答

是的,让我们采取 F1分数 基定义,具有:

F1=2×precision×recallprecision+recallF1=2×TP2×TP+FP+FN
这与Sørensen-Dice系数相同,也称为 Dice 系数或 Bray-Curtis 距离。这是衡量两个样本相似度的统计指标:

Dice(X,Y)=2|XY||X|+|Y|

关于这个损失的实现,我们可以近似 |XY|作为使用Hadamard 乘积获得的矩阵的总和(, 也称为元素乘积) 之间的基本事实 (y) 和预测 (y^)。然后我们可以定义LDice 如下:

LDice=1DiceLDice(y,y^)=12yy^y+y^

您经常会在分割问题的上下文中发现这种损失,以及其他非常接近的问题,例如Jaccard 索引(IoU)。

继 Thomas 之后,关于 Bray-Curtis 距离与 F1 分数之间的关系以及一阶和二阶导数的计算: 如果将向量 X 和向量 Y 之间的 Bray Curtis 距离定义为:|XiYi|(Xi+Yi), 比一阶导数xd(dx) |xy|(x+y)=2y(xy)((x+y)2(|xy|))二阶导数是d2dx2|xy|(x+y)=4y(xy)((x+y)3(|xy|))