模型评价

常用的模型评价指标以及他们的一些问题

0x01 常用指标

混淆矩阵 Confusion Matrix

image-20210212010539602

TF表示预测结果是True还是FalsePN则表示正样本和负样本。

TP表示正样本被预测正确的数目,TN表示负样本被预测正确的数目。

FP表示正样本被预测为负样本的数目,FN表示负样本被预测为正样本的数目。

sklearn的混淆矩阵示例是一个三分类,所以考虑了多分类的混淆矩阵应该怎么表示。

python实现混淆矩阵

混淆矩阵M的每一行表示真实的类,每一列表示预测的类。

重点关注混淆矩阵的对角线区域,它表示实际类别和预测类别相一致,即TP区域。

  • 准确率

    • 公式 :$ Accuracy = \frac{n{correct}}{n{total}} $
    • 预测正确的占全部比例,最简单的指标
  • 精确率

    • 公式 :$Precision = \frac{TP}{TP+FP}$
    • “你认为是对的里,有多少是对的”
  • 召回率

    • 公式 :$Recall = \frac{TP}{TP+FN}$
    • “所有对的里,你找到了多少”
  • 精确率召回率是一对欢喜冤家

    • Precision值和Recall值是既矛盾又统一的两个指标,为了提高Precision值,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致Recall值降低。反之亦然。
    • 基于以上特点,就出现了F1-Score评价指标。
  • F1-Score

    • 从公式的后半部分可以看出,F1-Score的目的就是同时提高精确率和召回率。

  • P-R 曲线附图右图

    • 横坐标为召回率,纵坐标为精确率
    • 根据不同阈值下获得的每一个结果作为每一个点,绘制曲线图。(存在先排序,切分坐标系,直接填结果的画图方式,不需要不同阈值反复统计)
  • FPR 误报率 假阳性率(False Positive Rate,FPR)

    • 假的里有多少被判为真了

  • TPR 检出率 真阳性 率(True Positive Rate,TPR)

    • 真的里有多少检测出来了

  • ROC 曲线 附图左图

    • 横坐标FPR,纵坐标TPR
    • 同样根据不同阈值下的预测结果来确定FPR TPR,即一对坐标
    • Receiver Operating Characteristic Curve | 受试者工 作特征曲线 起源见附录
  • AUC

    • Aera Under Curve,曲线下的面积
    • AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。
  • ROC曲线 P-R曲线区别

    • ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。
    • 若选择不同的测试集,P-R曲线的变化就会非常大,而ROC曲线则 能够更加稳定地反映模型本身的好坏。ROC曲线的适用场景更多,被广泛 用于排序、推荐、广告等领域。
    • 如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线则能够更直观地反映其性能。
  • MSE 均方误差 (Mean Squared Error )

    • image-20210212014707594
  • RMSE 平方根误差

    • image-20210212014303169
    • 容易受离群点(Outlier)影响
    • 离群点要么过滤,要么加入建模(复杂),要么使用其他误差评估指标,比如MAPE
  • MAE (Mean Absolute Error) 平均绝对误差是绝对误差的平均值

    • image-20210212014756491
  • MAPE

    • image-20210212014927383
  • 标准差 SD

  • 马修斯相关系数 —- MCC

    • “马修斯相关系数 —- MCC 主要用于衡量二分类问题,其综合考虑了 TP TN, FP , FN, 是一个比较均衡的指标, 对于样本不均衡情况下也可以使用。MCC的取值范围在 [-1, 1], 取值为1 表示预测与实际完全一致, 取值为0表示预测的结果还不如随机预测的结果, -1 表示预测结果与实际的结果完全不一致。因此我们看到, MCC 本质上描述了预测结果与实际结果之间的相关系数。”

0x02 模型评估方法

  • Holdout检验
    • 正常划分 训练集验证集
  • 交叉检验
    • k-fold交叉验证
    • 留一验证(留P验证)
      • 必须进行$C^{P}_{N}$次训练和验证
  • 自助法
    • 又放回抽取N次抽取
    • 当N趋近去无穷大时,未被抽取的概率:
      • 某一个样本N次都未被抽取的改率
        • $(1-\frac{1}{n})^{n}$
        • 根据重要极限$\lim_{x \to \infty} (1+\frac{1}{n})^{n} = e$
        • 最终结果等于$\frac{1}{e}$,约等于0.368

0x03 过拟合 欠拟合

统计学习方法里说过,模型能够学习的必要条件,就是存在绝对误差下届,也是拟合的前提。

image-20210212211226486

解决过拟合

  1. 更多数据(保证质量)
  2. 降低模型复杂度,减少参数
  3. 正则化
  4. 集成学习

解决欠拟合

      1. 的反方法。

0x04 其他问题

4-1 调参方法

  • 网格搜索
    • 全局搜索,可以调整步长跳跃尝试,但目标函数通常非凸,容易跳过最优点
  • 随机搜索
  • 贝叶斯优化
    • 会根据先验分布假设搜集函数,根据后验分布,给出最优值可能的点
    • 容易陷入局部最优,会尝试新区域继续探索或者该区域继续利用
  • Google Vizier
  • ACCESS审稿过一篇文章说过一种调参方法
    • The Slap Swarm Algorithm (SSA) is a heuristic algorithm that simulates the foraging of slaps in the biological world [28]. “ There should be “salp” instead of “slap”.
  • AutoML/DL

4-2 余弦相似度

  • 余弦相似度
    • image-20210212213555296
  • 余弦距离
    • image-20210212213607844

4-3 A/B测试

独立 互不影响

无偏 随机抽取

参考文献

附图:

roc&aucPrecision-Recall

附录:

​ ROC曲线最早是运用在军事上的,后来逐渐运用到医学领域,并于20世纪80年代后期被引入机器学习领域。相传在第二次 世界大战期间,雷达兵的任务之一就是死死地盯住雷达显示器,观察是否有敌机来袭。理论上讲,只要有敌机来袭,雷达屏幕上 就会出现相应的信号。但是实际上,如果飞鸟出现在雷达扫描区域时,雷达屏幕上有时也会出现信号。这种情况令雷达兵烦恼不 已,如果过于谨慎,凡是有信号就确定为敌机来袭,显然会增加误报风险;如果过于大胆,凡是信号都认为是飞鸟,又会增加漏 报的风险。每个雷达兵都竭尽所能地研究飞鸟信号和飞机信号之间的区别,以便增加预报的准确性。但问题在于,每个雷达兵都 有自己的判别标准,有的雷达兵比较谨慎,容易出现误报;有的雷达兵则比较胆大,容易出现漏报。 为了研究每个雷达兵预报的准确性,雷达兵的管理者汇总了所有雷达兵的预报特点,特别是他们漏报和误报的概率,并将 这些概率画到一个二维坐标系里。这个二维坐标的纵坐标为敏感性(真阳性率),即在所有敌机来袭的事件中,每个雷达兵准确 预报的概率。而横坐标则为1-特异性(假阳性率),表示在所有非敌机来袭信号中,雷达兵预报错误的概率。由于每个雷达兵的 预报标准不同,且得到的敏感性和特异性的组合也不同。将这些雷达兵的预报性能进行汇总后,雷达兵管理员发现他们刚好在一 条曲线上,这条曲线就是后来被广泛应用在医疗和机器学习领域的ROC曲线。