• 【scikit-learn基础】--『分类模型评估』之系数分析


    前面两篇介绍了分类模型评估的两类方法,准确率分析损失分析
    本篇介绍的杰卡德相似系数马修斯相关系数为我们提供了不同的角度来观察模型的性能,
    尤其在不平衡数据场景中,它们更能体现出其独特的价值。

    接下来,让我们一起了解这两个评估指标的原理与特点。

    1. 杰卡德相似系数

    杰卡德相似系数Jaccard similarity coefficient)用于衡量两个集合的相似度。
    在分类模型中,通常将每个类别看作一个集合,然后计算模型预测结果与实际结果之间的杰卡德相似系数。

    杰卡德相似系数能够直观地反映模型预测的准确性,并且对于不平衡数据集具有一定的鲁棒性。
    它特别适用于二元分类问题,但也可以扩展到多类分类问题中。

    1.1. 计算公式

    \(J(y, \hat{y}) = \frac{|y \cap \hat{y}|}{|y \cup \hat{y}|}\)
    其中,\(y\)是真实值,\(\hat y\)是预测值。

    1.2. 使用示例

    import numpy as np
    from sklearn.metrics import jaccard_score
    
    n = 100
    k = 2
    y_true = np.random.randint(0, k, n)
    y_pred = np.random.randint(0, k, n)
    
    s = jaccard_score(y_true, y_pred)
    print("jaccard score:{}".format(s))
    
    # 运行结果:
    jaccard score:0.36585365853658536
    

    上面的示例中,是针对二分类数据(k=2)来计算杰卡德相似系数的。

    如果是多分类的数据,需要设置jaccard_scoreaverage参数,否则会报错。
    average参数主要有以下选项:

    • binary:仅当目标 是二分类时才适用
    • micro:通过计算总的真阳性假阴性假阳性来计算全局指标
    • macro:计算每个标签的指标,并找到它们的未加权平均值
    • weighted:计算每个标签的指标,并找到其平均值,并按支持度(每个标签的真实实例数)加权
    • samples:计算每个实例的指标,并找到它们的平均值(仅对多标签分类有意义)
    import numpy as np
    from sklearn.metrics import jaccard_score
    
    n = 100
    k = 5
    y_true = np.random.randint(0, k, n)
    y_pred = np.random.randint(0, k, n)
    
    s1 = jaccard_score(y_true, y_pred, average="micro")
    s2 = jaccard_score(y_true, y_pred, average="macro")
    s3 = jaccard_score(y_true, y_pred, average="weighted")
    print("jaccard score:\nmicro:{}\nmacro:{}\nweighted:{}".format(s1, s2, s3))
    
    # 运行结果:
    jaccard score:
    micro:0.0989010989010989
    macro:0.09772727272727273
    weighted:0.09639935064935062
    

    上面的示例是多分类的情况,不设置 average参数的话,会报错。

    2. 马修斯相关系数

    马修斯相关系数Matthews correlation coefficient)是一种用于衡量二分类模型性能的指标,
    它考虑了真阳性(TP)、真阴性(TN)、假阳性(FP)和假阴性(FN)四个方面的信息。

    马修斯相关系数对于不平衡数据集具有较好的适应性,并且能够综合考虑模型的真正例率和真负例率。
    与准确率、召回率等指标相比,马修斯相关系数在处理不平衡数据集时更为可靠。

    2.1. 计算公式

    \(MCC = \frac{tp \times tn - fp \times fn}{\sqrt{(tp + fp)(tp + fn)(tn + fp)(tn + fn)}}\)

    关于 \(tp\)\(tn\)\(fp\)\(fn\)的概念,参见下表:


    实际结果(真) 实际结果(假)
    预测结果(真) tp(true positive)真阳性 fp(false positive)假阳性
    预测结果(假) fn(false negative)假阴性 tn(true negative)真阴性

    2.2. 使用示例

    import numpy as np
    from sklearn.metrics import matthews_corrcoef
    
    n = 100
    k = 2
    y_true = np.random.randint(0, k, n)
    y_pred = np.random.randint(0, k, n)
    
    s = matthews_corrcoef(y_true, y_pred)
    print("matthews corrcoef:{}".format(s))
    
    # 运行结果
    matthews corrcoef:0.028231544780468854
    

    上面示例中,用的随机样本数据是二分类(k=2)的,不过,马修斯相关系数对多分类数据也是支持的。

    3. 总结

    总的来说,杰卡德相似系数马修斯相关系数为我们提供了更全面、更深入的分类模型性能评估视角。
    尤其是在处理不平衡数据集时,这两个指标的表现尤为突出。

    杰卡德相似系数从集合相似度的角度展现了模型的预测准确性,
    马修斯相关系数则综合考虑了各类别的预测情况,为模型的整体性能给出了更为准确的反馈。

  • 相关阅读:
    【一】ERNIE:飞桨开源开发套件,入门学习,看看行业顶尖持续学习语义理解框架,如何取得世界多个实战的SOTA效果?
    【kafka】可视化工具KAFKA EAGLE安装分享
    【图论】拓扑排序
    如何使用Abaqus进行摩擦生热仿真
    青少年近视问题不容小觑,蔡司用专业技术助力孩子视力健康发展
    鲁大师电动车智能化测评报告第二十三期:实测续航95km,九号Q90兼顾个性与实用
    mybatis使用foreach标签实现union集合操作
    第五章:抽象类
    贪心算法实现规定长度范围的字符串增删改
    HTML+CSS+JS个人网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计
  • 原文地址:https://www.cnblogs.com/wang_yb/p/17999175