召回率(Recall)是评估分类器性能的一个重要指标,它衡量的是模型识别出所有正样本的能力。召回率的计算公式为:召回率 = 真正例(TP)/(真正例(TP)+假负例(FN))。召回率的值介于0到1之间,值越接近1表示模型的召回率越高,即模型能够识别出更多的正样本。
在多类别和多标签数据集中,召回率的计算可以通过将问题转化为多个二分类问题来实现。对于二分类问题,设置average参数为'binary'将仅返回指定正样本标签的召回率。如果average参数不是'binary',则会忽略pos_label参数,并计算两个类别的召回率,然后进行平均或者全部返回(当average=None时)。对于多类别和多标签目标,根据average参数的设置,可以返回所有标签的召回率或者计算它们的平均值。
在计算召回率时,可以通过设置labels参数来指定要计算召回率的标签集合。如果average参数不等于'binary',可以通过设置labels参数来指定要计算的标签,并且可以排除数据中存在的标签,例如在多类别分类中排除“负类”。不在数据中出现的标签也可以被包含,并且会被“分配”0个样本。对于多标签目标,labels参数是列索引。默认情况下,会使用y_true和y_pred中所有标签,并按排序顺序进行计算。
召回率的计算还涉及到样本权重(sample_weight)和零除错误处理(zero_division)。样本权重可以为每个样本指定不同的权重,而zero_division参数可以设置在出现零除错误时返回的值。如果设置为“warn”,则会像返回0一样,但同时会发出警告。如果设置为np.nan,则这样的值将从平均值中排除。
召回率的计算可以通过Python中的sklearn库来实现。以下是一个示例代码,展示了如何使用sklearn.metrics中的recall_score函数来计算召回率:
import numpy as np
from sklearn.metrics import recall_score
# 真实标签
y_true = [0, 1, 2, 0, 1, 2]
# 预测标签
y_pred = [0, 2, 1, 0, 0, 1]
# 使用macro平均计算召回率
recall_macro = recall_score(y_true, y_pred, average='macro')
print(recall_macro)
# 使用micro平均计算召回率
recall_micro = recall_score(y_true, y_pred, average='micro')
print(recall_micro)
# 使用weighted平均计算召回率
recall_weighted = recall_score(y_true, y_pred, average='weighted')
print(recall_weighted)
# 返回每个类别的召回率
recall_none = recall_score(y_true, y_pred, average=None)
print(recall_none)
在实际应用中,召回率的计算需要根据具体的数据集和业务需求来选择合适的参数设置。例如,在处理不平衡数据集时,可能需要使用加权平均(weighted)来计算召回率,以考虑不同类别样本数量的不平衡。而在某些情况下,可能需要关注特定类别的召回率,这时可以设置average参数为'binary'并指定pos_label参数。
召回率是评估分类器性能的重要指标之一,但单独使用召回率可能无法全面评估模型的性能。因此,在实际应用中,通常会结合其他指标,如精确率(Precision)、F1分数(F1-Score)等,来综合评估模型的性能。此外,还可以通过绘制召回率-精确率曲线(Precision-Recall Curve)来直观地展示模型在不同阈值下的性能表现。