当前位置: 首页 > article >正文

【漫话机器学习系列】117.马修斯相关系数(Matthews Correlation Coefficient, MCC)

马修斯相关系数(MCC)详解

1. 引言

在机器学习和二分类问题中,我们通常使用各种指标来评估分类模型的性能,例如准确率(Accuracy)、精确率(Precision)、召回率(Recall)和 F1 分数(F1 Score)。然而,这些指标在数据不均衡的情况下可能会产生误导。比如,当正负样本比例严重失衡时,高准确率并不意味着模型分类效果好。

为了解决这一问题,马修斯相关系数(Matthews Correlation Coefficient, MCC) 提供了一种更全面的评估方法。MCC 考虑了真阳性(TP)、真阴性(TN)、假阳性(FP)、假阴性(FN)的平衡情况,能够在数据分布不均衡时提供更加可靠的分类性能评估


2. MCC 公式

从图中可以看出,MCC 的计算公式如下:

M = \frac{TP \times TN - FP \times FN}{\sqrt{(TP + FP)(TP + FN)(TN + FP)(TN + FN)}}

其中:

  • TP(True Positive,真阳性):被正确预测为正类的样本数
  • TN(True Negative,真阴性):被正确预测为负类的样本数
  • FP(False Positive,假阳性):被错误预测为正类的负样本数(即“假警报”)
  • FN(False Negative,假阴性):被错误预测为负类的正样本数(即“漏检”)

MCC 的取值范围为 [-1, 1]

  • MCC = +1 :模型的分类结果完全正确(完美分类器)
  • MCC = 0 :模型的分类效果与随机分类相当
  • MCC = -1 :模型的分类结果完全错误(预测结果与真实标签完全相反)

相比于其他评估指标,MCC 在数据不均衡的情况下仍然能够提供一个较好的衡量标准。


3. MCC 计算方式解析

为了更直观地理解 MCC,我们可以分步解析公式的计算逻辑。

  1. 计算 TP × TN:表示模型正确分类的两个部分——正确识别的正例(TP)和正确识别的负例(TN)。
  2. 计算 FP × FN:表示模型错误分类的两个部分——错误地识别为正例的负例(FP)和错误地识别为负例的正例(FN)。
  3. 计算分子(TP × TN - FP × FN):表示正确分类与错误分类的平衡情况。
  4. 计算分母
    • (TP + FP):所有被预测为正类的样本数(包括正确预测和错误预测)。
    • (TP + FN):所有实际为正类的样本数(包括被正确预测和错误预测)。
    • (TN + FP):所有实际为负类的样本数(包括被正确预测和错误预测)。
    • (TN + FN):所有被预测为负类的样本数(包括正确预测和错误预测)。
    • 分母的开平方部分:保证 MCC 的归一化,使其范围保持在 -1 到 1 之间。

4. MCC 的优势

MCC 之所以被广泛使用,是因为它具有以下优势:

  1. 适用于不均衡数据集

    • 传统的准确率在正负样本不均衡时会产生偏差,而 MCC 能够公平地衡量分类器的性能,不受类别比例的影响。
  2. 考虑所有四种情况(TP、TN、FP、FN)

    • 相比于 F1-score 只考虑 TP、FP 和 FN,MCC 还包含 TN,因此能够更全面地衡量分类效果。
  3. 对对称分类问题有效

    • MCC 在对称分类问题(例如癌症检测、欺诈检测)中表现良好,能够客观衡量模型的分类能力。
  4. 稳定性好

    • 由于 MCC 的计算方式,它比准确率、F1-score 更稳定,避免了某些评估指标可能出现的偏差问题。

5. MCC 与其他指标的比较

评估指标公式适用场景局限性
准确率(Accuracy)\frac{TP + TN}{TP + TN + FP + FN}适用于类别均衡的数据在类别不均衡时可能误导分析
精确率(Precision)\frac{TP}{TP + FP}关注误报较多的情况(如垃圾邮件检测)只关注正类,忽略负类情况
召回率(Recall)\frac{TP}{TP + FN}关注漏报较多的情况(如癌症检测)可能导致 FP 增多
F1-score2 \times \frac{Precision \times Recall}{Precision + Recall}适用于类别不均衡的数据仍然忽略 TN
MCC见上公式适用于所有场景,特别是不均衡数据计算较复杂,但提供最全面的评估

从上表可以看出,MCC 能够提供比 F1-score 和准确率更全面的衡量标准。


6. Python 实现 MCC 计算

在 Python 中,可以使用 sklearn.metrics 计算 MCC。

from sklearn.metrics import matthews_corrcoef

# 假设有真实标签(y_true)和预测结果(y_pred)
y_true = [1, 0, 1, 1, 0, 1, 0, 0, 1, 0]
y_pred = [1, 0, 1, 0, 0, 1, 0, 1, 1, 0]

# 计算 MCC
mcc = matthews_corrcoef(y_true, y_pred)
print("Matthews Correlation Coefficient:", mcc)

运行结果

Matthews Correlation Coefficient: 0.6

此外,我们也可以手动计算:

import numpy as np

# 假设的 y_true 和 y_pred 数据
y_true = np.array([1, 0, 1, 1, 0, 1, 0, 0, 1, 0])
y_pred = np.array([1, 0, 0, 1, 0, 1, 1, 0, 1, 1])

# 计算 TP、TN、FP、FN
TP = np.sum((y_true == 1) & (y_pred == 1))
TN = np.sum((y_true == 0) & (y_pred == 0))
FP = np.sum((y_true == 0) & (y_pred == 1))
FN = np.sum((y_true == 1) & (y_pred == 0))

# 计算 MCC
denominator = np.sqrt((TP + FP) * (TP + FN) * (TN + FP) * (TN + FN))
if denominator == 0:
    mcc_manual = 0  # 避免除以零的情况
else:
    mcc_manual = (TP * TN - FP * FN) / denominator

print("Manual MCC Calculation:", mcc_manual)

 运行结果

Manual MCC Calculation: 0.408248290463863


7. 结论

马修斯相关系数(MCC)是一种强大的分类评估指标,尤其适用于类别不均衡的数据集。它综合考虑了 TP、TN、FP 和 FN,能够提供比传统指标更可靠的分类性能评估。

总结:

  • MCC 适用于不均衡数据分类任务,如欺诈检测、癌症检测、垃圾邮件分类等。
  • MCC 的值范围在 [-1,1],其中 1 表示完美分类器,0 表示随机分类器,-1 表示完全错误的分类器
  • MCC 计算全面,比准确率、F1-score 更具鲁棒性。

在实际应用中,建议结合 MCC、F1-score、AUC-ROC 等多个指标综合评估模型的表现,以确保模型在不同数据分布下的稳定性和可靠性。


http://www.kler.cn/a/571665.html

相关文章:

  • 【四.RAG技术与应用】【11.阿里云百炼应用(上):RAG在云端的实践】
  • 【前端跨域】CORS:跨域资源共享的机制与实现
  • 探秘 Linux 系统编程:进程地址空间的奇妙世界
  • 一文看懂 DeepSeek 版本全解析
  • 【YashanDB认证】yashandb23.3.1 个人版单机部署安装实践
  • 算法-二叉树篇22-二叉搜索树的最近公共祖先
  • 大语言模型 智能助手——既能生成自然语言回复,又能在必要时调用外部工具获取实时数据
  • PyTorch内存优化的10种策略总结:在有限资源环境下高效训练模型
  • RefuseManualStart/Stop增强Linux系统安全性?详解systemd单元保护机制
  • 浅谈⽂件操作和IO
  • HTML-05NPM使用踩坑
  • 新仙剑奇侠传98 for Mac v98 支持M、Intel芯片
  • 运动想象 (MI) 迁移学习系列 (14) : 特征关系对比网络 (FRCN)
  • 智能合约安全指南 [特殊字符]️
  • 强化学习-随机近似与随机梯度下降
  • SQL注入练习场:PHPStudy+SQLI-LABS靶场搭建教程(零基础友好版)
  • 爬虫不“刑”教程
  • 航天科技民用化破局:凡拓数创以数字孪生重塑智能制造基因
  • AMD RDNA3 GPU架构解析
  • Visual Studio 2022 安装指南