zoukankan      html  css  js  c++  java
  • 混淆矩阵与二分类评价指标

    本文总结的内容是二分类模型评价方式, 与二分类模型中的混淆矩阵.

    一. 混淆矩阵 Confusion Matrix

    1.1 为什么需要混淆矩阵

    • 评价二分类模型时, 仅仅使用 Accuracy (准确率) 指标, 会变得片面.
    • 希望能有一种更合理的评价二分类模型的方式.

    二分类模型使用 Accuracy 指标, 会产生一些不合理的情况. 比如, 一个二分类预测器将所有输入都预测为"1", 而实际数据中, "1" 标签所占比例为 90%, 那么这个分类器什么都不做就可以有 90% 的 accuracy. 比如, 在 skewed dataset 类别不均衡数据集[1]中, 仅仅适用准确率作为指标, 指标偏高, 模型之间效果区分不明显.

    1.2 混淆矩阵是什么

    • 混淆矩阵是对预测结果进行划分, 如下图[2]所示.

    image-20201203213524849

    将样本的预测结果划分为四个类别, 从预测结果来看:

    • TN, true negatives: 预测对的 Negative 样本.
    • FN, false positives: 预测错的 Negative 样本.
    • FP, false negatives: 预测错的 Positive 样本.
    • TP, true positives: 预测对的 Positive 样本.

    适用混淆矩阵中的区域来表示准确率 accuracy:

    [ ext{Accuracy} = frac{ ext{TP}+ ext{TN}}{ ext{TP}+ ext{FN}+ ext{FP}+ ext{TN}} ]

    二. 精确率 precision 和召回率 recall

    2.1 Precision

    • precision, 准确率, 查准率;

    • 预测真值正确的占所有预测的比例

    • 求稳 "预测的都是对的" / "找到的都是对的", 表示找的准

    [ ext{precision} = frac{TP}{TP+FP} ]

    2.2 Recall

    • recall, 召回率, 查全率;
    • 预测真值正确的占所有真值的比例
    • 减少漏网之鱼 "真值全都预测到" / "真值全部都能找到", 表示找的全

    [ ext{recall} = frac{TP}{TP+FN} ]

    2.3 (F_1) score

    • 权衡考虑 precision 和 recall

    [F_1 = frac{2}{frac{1}{ ext{precision}} + frac{1}{ ext{recall}}} ]

    三. 一个例子

    不妨举这样一个例子[3]: 某池塘有 1400 条鲤鱼, 300 只虾, 300只鳖. 现在以捕鲤鱼为目的. 撒一大网, 逮着了 700 条鲤鱼, 200 只虾, 100只鳖. 那么, 这些指标分别如下:

    • 正确率 = 700 / (700 + 200 + 100) = 70%

    • 召回率 = 700 / 1400 = 50%

    • F值 = 70% * 50% * 2 / (70% + 50%) = 58.3%

    不妨看看如果把池子里的所有的鲤鱼, 虾和鳖都一网打尽, 这些指标又有何变化:

    • 正确率 = 1400 / (1400 + 300 + 300) = 70%

    • 召回率 = 1400 / 1400 = 100%

    • F值 = 70% * 100% * 2 / (70% + 100%) = 82.35%

    由此可见, 正确率是评估捕获的成果中目标成果所占得比例; 召回率, 顾名思义, 就是从关注领域中, 召回目标类别的比例; 而F值, 则是综合这二者指标的评估指标, 用于综合反映整体的指标.

    我们希望检索结果 Precision 越高越好, 同时 Recall 也越高越好, 但事实上这两者在某些情况下有矛盾的. 比如极端情况下, 我们只搜索出了一个结果, 且是准确的, 那么 Precision 就是 100%, 但是 Recall 就很低; 而如果我们把所有结果都返回, 那么比如 Recall 是 100%, 但是 Precision 就会很低. 因此在不同的场合中需要自己判断希望 Precision 比较高或是 Recall 比较高. 如果是做实验研究, 可以绘制 Precision-Recall曲线 来帮助分析.

    References


    1. Skewed Data ↩︎

    2. Hands on Machine Learning with Scikit Learn Keras and TensorFlow 2nd Edition ↩︎

    3. 推荐系统评测指标 ↩︎

  • 相关阅读:
    fzyjojP2931 乱搞
    bzoj3730. 震波
    禁用DRM
    [学习笔记]替罪羊树
    Oracle数据库升级前必要的准备工作
    [NOI2012]骑行川藏
    oracle补丁类型
    IOI2018题解
    Oracle的Central Inventory和Local inventory详解
    CodeCraft-19 and Codeforces Round #537 (Div. 2)
  • 原文地址:https://www.cnblogs.com/crayonsea/p/14784341.html
Copyright © 2011-2022 走看看