Keras精确率与sklearn precision_score参数匹配及zero_division=1效果
Keras端精确率计算实现
通过Keras配置模型时,可在编译阶段直接挂载精确率评估指标,对应代码如下:
model.compile(optimizer='sgd', loss='mse', metrics=[tf.keras.metrics.Precision()])
技术问题解答
匹配Keras计算结果的Sklearn参数取值
默认参数下的tf.keras.metrics.Precision(),是对模型输出以0.5为阈值做二值化后,仅统计正类的TP、FP计算单类精确率,公式为 Precision = TP / (TP + FP)。
在给定的可选average参数中,应选取**none**:
- 传入
average='none'时,sklearn会返回每个类别单独计算的精确率数组,其中索引为1的正类精确率,与Keras端的计算结果完全一致。 - 其余参数均不匹配:
micro是全局聚合所有类别的TP、FP计算的单值结果,逻辑与单类统计不符;macro、weighted是多类精确率的算术平均/样本量加权平均结果,属于聚合指标,无法对应单类精确率的计算结果。
zero_division=1的实际效果
执行precision_score(y_true, y_pred, average=None, zero_division=1)时,参数的实际作用为:
当某一类别出现分母为0的场景(即模型从未将样本预测为该类别,该类的TP=0、FP=0),不会抛出分母为0的警告,也不会返回默认的0值,而是直接将该类的精确率设为1。该参数仅影响零分母场景的取值,不改变正常非零分母场景下的精确率计算结果。
内容的提问来源于stack exchange,提问作者user14251114
相关产品推荐
相关产品推荐

