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

server/2025/3/5 8:34:33/

马修斯相关系数(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) / denominatorprint("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.ppmy.cn/server/172557.html

相关文章

【每日学点HarmonyOS Next知识】getContext问题、清除Web缓存、弹层的点击事件透传、去除间隙、侧滑菜单设置

【每日学点HarmonyOS Next知识】getContext问题、清除Web缓存、弹层的点击事件透传、去除间隙、侧滑菜单设置 1、HarmonyOS getContext()获取不到? 在两个不同的页面分别使用bindPopup与bindSheet弹出相同的弹窗,点击弹窗中的按钮跳转H5页面&#xff0…

SpringCloud系列教程(十二):网关配置动态路由

除了token以外,还有一个很实用的功能就是把网关的路由配置放到nacos上,并且修改路由配置的时候,网关服务可以动态的更新,这样我们在调整网络配置的时候,就不用重启服务了。所以我们需要用到两个重要的类:Na…

中科大计算机网络笔记第一章1.8 互联网历史笔记

计算机网络与互联网历史概述 一、早期通信方式 1. 线路交换 ‌时间‌:1960年之前‌特点‌: 线路建立时间长,代价高。线路资源独享,不适合突发性强的计算机通信。可靠性不高,核心节点损毁影响大。 二、分组交换理论的…

物理竞赛中的线性代数

线性代数 1 行列式 1.1 n n n 阶行列式 定义 1.1.1:称以下的式子为一个 n n n 阶行列式: ∣ A ∣ ∣ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n n ∣ \begin{vmatrix}\mathbf A\end{vmatrix} \begin{vmatrix} a_{11…

翻译: 深入分析LLMs like ChatGPT 二

监督微调(SFT) 使用人工标注的对话数据集(如1M条"用户-助手"对话)继续训练模型。 标注员遵循指导原则编写理想回答,使模型学习助手的回应风格。 示例对话格式: [系统] 你是一个有帮助的AI助手……

Apache Kafka单节点极速部署指南:10分钟搭建开发单节点环境

Apache Kafka单节点极速部署指南:10分钟搭建开发单节点环境 Kafka简介: Apache Kafka是由LinkedIn开发并捐赠给Apache基金会的分布式流处理平台,现已成为实时数据管道和流应用领域的行业标准。它基于高吞吐、低延迟的设计理念,能够…

uploadlabs经验总结

目录 一、基础上传漏洞(太过简单目前环境不可能存在) 1、抓包然后改后缀进行绕过 2、抓包然后改上传文件类型进行绕过 3、改后缀大小写绕过,以及收尾加空格,加::$DATA,加点等等 4、黑名单不完整绕过,复习后缀绕过&…

【网络安全】——二进制协议 vs 文本协议:从原理到实战的深度解析

目录 引言 一、协议的本质与分类 二、二进制协议详解 1. 核心特点 2. 典型结构示例 3. 常见应用场景 4. 详细介绍 三、文本协议详解 1. 核心特点 2. 典型结构示例 3. 常见应用场景 4.详细介绍 四、关键对比:二进制协议 vs 文本协议 五、实战案例&…