在机器学习领域,混淆矩阵是一种评估分类模型性能的工具。它通过展示模型预测结果与实际标签之间的匹配情况,帮助理解模型在不同类别上的表现。对于多标签分类问题,传统的混淆矩阵需要进行一些调整,以适应多个标签的情况。本文将介绍如何使用Python的sklearn库中的multilabel_confusion_matrix
函数来计算多标签混淆矩阵。
多标签混淆矩阵(Multilabel Confusion Matrix,简称MCM)与传统的混淆矩阵类似,但它为每个类别或样本计算一个2x2的混淆矩阵。在MCM中,真阴性(True Negatives)的数量表示为MCM[:,0,0]
,假阴性(False Negatives)为MCM[:,1,0]
,真阳性(True Positives)为MCM[:,1,1]
,假阳性(False Positives)为MCM[:,0,1]
。对于多类数据,这些数据会被当作二进制数据处理,这是基于一对多(one-vs-rest)的转换。返回的混淆矩阵将按照y_true
和y_pred
中所有唯一标签的排序顺序返回。
函数multilabel_confusion_matrix
的参数包括:
y_true
:真实标签,可以是数组或稀疏矩阵,形状为(n_samples, n_outputs)
或(n_samples,)
。y_pred
:预测标签,可以是数组或稀疏矩阵,形状与y_true
相同。sample_weight
:可选参数,样本权重,形状为(n_samples,)
,默认为None
。labels
:可选参数,类别列表或列索引,用于选择某些类别或强制包含数据中不存在的类别,默认为None
。samplewise
:布尔值,默认为False
。在多标签情况下,如果设置为True
,则为每个样本计算一个混淆矩阵。函数返回的是一个形状为(n_outputs, 2, 2)
的数组,表示每个输出对应的2x2混淆矩阵。当计算类别级别的多标签混淆矩阵(默认)时,n_outputs = n_labels
;当计算样本级别的多标签混淆矩阵(samplewise=True
)时,n_outputs = n_samples
。如果定义了labels
,则结果将按照labels
中指定的顺序返回,否则默认按排序顺序返回。
下面是一个使用multilabel_confusion_matrix
函数的示例。首先,导入必要的库:
import numpy as np
from sklearn.metrics import multilabel_confusion_matrix
然后,创建一些模拟数据来表示真实标签和预测标签:
y_true = np.array([
[1, 0, 1],
[0, 1, 0],
[1, 1, 0]
])
y_pred = np.array([
[1, 0, 0],
[0, 1, 1],
[1, 0, 1]
])
接下来,调用multilabel_confusion_matrix
函数来计算混淆矩阵:
result = multilabel_confusion_matrix(y_true, y_pred)
print(result)
这将输出每个类别的混淆矩阵,帮助评估模型在每个类别上的表现。
需要注意的是,multilabel_confusion_matrix
函数在处理多类任务时,会将标签二值化处理,采用一对多的方式。而传统的confusion_matrix
函数则用于计算两个类别之间的混淆情况。