Precision-Recall的平衡
上一篇博客介绍了在有一些场景我们可能更注重精准率,有一些场景可能更注重召回率。还有一些情况下,我们可能并不是特别偏向精准率和召回率,此时我们希望两者越大越好,此时我们就可以用 F 1 F1 F1 S c o r e Score Score 这样的指标来综合精准率和召回率这两个指标。那么我们怎么同时使这两者都特别的大呢?其实这样的目标有可能是实现不了的,因为精准率和召回率之间是互相矛盾的指标。如果想要精准率提高,召回率就会不可避免地下降;想要召回率提高,精准率就不可避免地下降。我们要找到的是一个精准率和召回率之间的平衡。
之前我们学习逻辑回归算法时,提到了一个决策边界,当时我们的决策边界是:
如果我们的样本点在决策边界的一侧我们就将它们分类为 1, 在决策边界的另一侧就将他们分类为 0。那么有的小伙伴就可能有疑问了,对于这条直线,我们为什么让它等于 0 呢?如果我设置任意一个常量 t h r e s h o l d threshold threshold,我们可不可以让 t h r e s h o l d threshold threshold 作为决策边界呢?
如果
θ
T
⋅
x
b
θ^T·x_b
θT⋅xb 大于
t
h
r
e
s
h
o
l
d
threshold
threshold 的话,我们就分类为 1,小于
t
h
r
e
s
h
o
l
d
threshold
threshold 的话就将它分类为 0。这样其实也形成了一个决策边界。那么基于这样的想法,其实相当于为我们的逻辑回归算法引入了一个新的超参数。我们通过指定这个
t
h
r
e
s
h
o
l
d
threshold
threshold 相当于平移我们的决策边界对应的这根直线从而影响分类结果。
下面我们就来看一下 t h r e s h o l d threshold threshold 取不同的值将会怎样影响我们的分类结果?
我们用一个横轴代表 θ T ⋅ x b θ^T·x_b θT⋅xb 计算出来的值,为了不失一般性,我们将该轴取名为 s c o r e score score。我们在该轴上找到 0 这根直线,我们的回归算法就是以 0 作为阈值,如果 s c o r e score score 大于 0, 我们就将其分类为 1,如果 s c o r e score score 小于 0,就将其分类为 0。
现在我们在该轴上分布若干个样本,样本由两种形状进行标识,星形是我们关注的事件,换句话说,就是分类为 1 的事件,圆圈代表分类为 0 的事件。
现在这个图就表示出了,如果我们将 0 作为阈值的话,我们就把大于 0 的 5 个样本分类为 1,小于 0 的 7 个样本分类为 0。此时我们就可以算出我们的精准率和召回率。
现在我们向右挪动阈值,相当于我们增大了
t
h
r
e
s
h
o
l
d
threshold
threshold 的值,此时我们再次计算精准率和召回率。
我们发现精准率提高了,但是召回率却下降了。如果我们将
t
h
r
e
s
h
o
l
d
threshold
threshold 变小一些会发生什么?我们向左挪动我们的阈值,计算精准率和召回率。
此时召回率提高了,精准率却下降了。从上图中就可以清楚的看到,随着精准率的升高,召回率在下降;随着召回率的升高,精准率在下降。所以精准率和召回率在互相牵制,它们是互相矛盾的一对变量。
编程实现
下面我们再编程看一下这两者之间的关系。
我们再次用程序证明了精准率和召回率之间相互制约的关系,那么我们在实际运用的时候,怎么设置
t
h
r
e
s
h
o
l
d
threshold
threshold 呢?请听下回分解~~