多标签分类的评价指标

 多标签分类作为多分类的一种推广,每个样本可以有多个类别,如下图的标签为:sea,sunset。所以其评价指标与多分类的也有差异,本文将介绍几种评价指标


 1.Hamming loss(汉明损失),表示所有label中错误样本的比例,所以该值越小则网络的分类能力越强。计算公式如下。


其中:|D|表示样本总数,|L|表示标签总数,xi和yi分别表示预测结果和ground truth。xor表示异或运算。

样例

 

 


  from sklearn.metrics import hamming_loss
 y_pred = [1, 2, 3, 4]
 y_true = [2, 2, 3, 4]
 hamming_loss(y_true, y_pred)  #输出结果为0.25

hamming_loss(np.array([[0, 1], [1, 1]]), np.zeros((2, 2)))  #输出结果为0.75

2. Jaccard index(杰卡德指数),概念挺陌生,公式是再熟悉不过了。其中:T表示ground truth,P表示预测结果。再观察这个公式,和检测算法中的IOU多么相近。


3. 精度、召回率和F1值。其中精度计算公式为,召回率计算公式为,F1值的计算为精度和召回率的调和平均数。

4. 准确匹配。这个是最严格的标准了,是预测结果和ground truth完全一致时的样本数与总的样本数的比值。


参考文献:https://en.wikipedia.org/wiki/Multi-label_classification

### 多标签分类中的常用评估指标 多标签分类是一种机器学习任务,在这种任务中,每个样本可以被分配多个类别。为了衡量模型性能的好坏,通常会采用一系列专门设计的评估指标。 #### 精确率 (Precision) 精确率表示预测为正类别的样本中有多少比例实际上是正类别。对于多标签分类问题,可以通过计算所有标签上的平均值来得到总体的精确率[^1]。 \[ \text{Precision} = \frac{\sum_{i=1}^{n} TP_i}{\sum_{i=1}^{n}(TP_i + FP_i)} \] 其中 \(TP_i\) 和 \(FP_i\) 分别代表第 i 个标签的真实正例数和假正例数。 #### 召回率 (Recall) 召回率是指实际为正类别的样本中有多少比例被成功识别出来。同样地,也可以通过求取各个标签上召回率的均值得到整体表现[^2]。 \[ \text{Recall} = \frac{\sum_{i=1}^{n} TP_i}{\sum_{i=1}^{n}(TP_i + FN_i)} \] 这里 \(FN_i\) 表示第 i 个标签的假负例数量。 #### F1分数 (F1-Score) 由于精确率和召回率之间可能存在权衡关系,因此引入了综合考虑两者平衡性的度量标准——F1分数[^3]。 \[ F_1 = 2 * \frac{\text{Precision} * \text{Recall}}{\text{Precision} + \text{Recall}} \] 此公式适用于二元情况;而对于多标签场景,则需分别针对每一个可能的目标变量单独计算后再加以汇总处理。 #### Hamming损失 (Hamming Loss) 这是一种特别适合用来评判多标记数据集预测效果好坏的方法之一。它定义为错误标注的比例,即在整个测试集中误判次数占总实例-标签对总数之百分比[^4]。 \[ HL(Y, Z) = \frac{1}{m}\Sigma^m_{j=1}\frac{|y_j \oplus z_j|}{l} \] 在此表达式里,\(Y=\{y_1,..., y_m\},Z=\{z_1,... ,z_m\}\),分别对应真实值矩阵与估计值矩阵;而符号"\(\oplus\)"意味着逐位异或运算操作符。 ```python from sklearn.metrics import hamming_loss, precision_score, recall_score, f1_score # Example usage of metrics functions with true and predicted labels. true_labels = [[0, 1], [1, 1]] predicted_labels = [[0, 1], [1, 0]] hl = hamming_loss(true_labels, predicted_labels) ps = precision_score(true_labels, predicted_labels, average='samples') rs = recall_score(true_labels, predicted_labels, average='samples') fs = f1_score(true_labels, predicted_labels, average='samples') print(f'Hamming Loss: {hl}') print(f'Precision Score: {ps}') print(f'Recall Score: {rs}') print(f'F1 Score: {fs}') ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值