马修斯相关系数(MCC)详解
1. 引言
在机器学习和二分类问题中,我们通常使用各种指标来评估分类模型的性能,例如准确率(Accuracy)、精确率(Precision)、召回率(Recall)和 F1 分数(F1 Score)。然而,这些指标在数据不均衡的情况下可能会产生误导。比如,当正负样本比例严重失衡时,高准确率并不意味着模型分类效果好。
为了解决这一问题,马修斯相关系数(Matthews Correlation Coefficient, MCC) 提供了一种更全面的评估方法。MCC 考虑了真阳性(TP)、真阴性(TN)、假阳性(FP)、假阴性(FN)的平衡情况,能够在数据分布不均衡时提供更加可靠的分类性能评估。
2. MCC 公式
从图中可以看出,MCC 的计算公式如下:
其中:
- 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,我们可以分步解析公式的计算逻辑。
- 计算 TP × TN:表示模型正确分类的两个部分——正确识别的正例(TP)和正确识别的负例(TN)。
- 计算 FP × FN:表示模型错误分类的两个部分——错误地识别为正例的负例(FP)和错误地识别为负例的正例(FN)。
- 计算分子(TP × TN - FP × FN):表示正确分类与错误分类的平衡情况。
- 计算分母:
- (TP + FP):所有被预测为正类的样本数(包括正确预测和错误预测)。
- (TP + FN):所有实际为正类的样本数(包括被正确预测和错误预测)。
- (TN + FP):所有实际为负类的样本数(包括被正确预测和错误预测)。
- (TN + FN):所有被预测为负类的样本数(包括正确预测和错误预测)。
- 分母的开平方部分:保证 MCC 的归一化,使其范围保持在 -1 到 1 之间。
4. MCC 的优势
MCC 之所以被广泛使用,是因为它具有以下优势:
-
适用于不均衡数据集
- 传统的准确率在正负样本不均衡时会产生偏差,而 MCC 能够公平地衡量分类器的性能,不受类别比例的影响。
-
考虑所有四种情况(TP、TN、FP、FN)
- 相比于 F1-score 只考虑 TP、FP 和 FN,MCC 还包含 TN,因此能够更全面地衡量分类效果。
-
对对称分类问题有效
- MCC 在对称分类问题(例如癌症检测、欺诈检测)中表现良好,能够客观衡量模型的分类能力。
-
稳定性好
- 由于 MCC 的计算方式,它比准确率、F1-score 更稳定,避免了某些评估指标可能出现的偏差问题。
5. MCC 与其他指标的比较
评估指标 | 公式 | 适用场景 | 局限性 |
---|---|---|---|
准确率(Accuracy) | 适用于类别均衡的数据 | 在类别不均衡时可能误导分析 | |
精确率(Precision) | 关注误报较多的情况(如垃圾邮件检测) | 只关注正类,忽略负类情况 | |
召回率(Recall) | 关注漏报较多的情况(如癌症检测) | 可能导致 FP 增多 | |
F1-score | 适用于类别不均衡的数据 | 仍然忽略 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 等多个指标综合评估模型的表现,以确保模型在不同数据分布下的稳定性和可靠性。