多标签分类中常用指标和可视化例子

发布时间:2023年12月23日

多标签分类中常用指标

1. 准确率(Accuracy)

准确率计算的是正确预测的标签比例。对于多标签分类,这通常是一个较为严格的指标,因为要求每个实例的所有标签都预测正确。

Accuracy = 正确预测的标签数 总标签数 \text{Accuracy} = \frac{\text{正确预测的标签数}}{\text{总标签数}} Accuracy=总标签数正确预测的标签数?

2. 精确度(Precision)

对于每个标签,精确度计算为:

Precision = TP TP + FP \text{Precision} = \frac{\text{TP}}{\text{TP} + \text{FP}} Precision=TP+FPTP?

其中,TP(True Positives)是正确预测的正样本数,FP(False Positives)是错误预测的正样本数。对于多标签分类,通常对每个标签计算精确度,然后取平均值。

3. 召回率(Recall)

对于每个标签,召回率计算为:

Recall = TP TP + FN \text{Recall} = \frac{\text{TP}}{\text{TP} + \text{FN}} Recall=TP+FNTP?

其中,FN(False Negatives)是未能正确预测的正样本数。和精确度一样,通常对每个标签单独计算召回率。

4. F1 分数(F1 Score)

对于每个标签,F1 分数是精确度和召回率的调和平均:

F1?Score = 2 × Precision × Recall Precision + Recall \text{F1 Score} = 2 \times \frac{\text{Precision} \times \text{Recall}}{\text{Precision} + \text{Recall}} F1?Score=2×Precision+RecallPrecision×Recall?

对于多标签分类,可以计算宏观(平均每个标签的F1分数)或微观F1分数(在所有标签上累积TP、FP、FN后计算)。

5. 汉明损失(Hamming Loss)

汉明损失反映了预测错误的标签比例:

Hamming?Loss = 错误预测的标签数 总标签数 \text{Hamming Loss} = \frac{\text{错误预测的标签数}}{\text{总标签数}} Hamming?Loss=总标签数错误预测的标签数?

6. 子集准确率(Subset Accuracy)

这是一个非常严格的指标,要求预测的每个标签集合完全匹配真实标签集合:

Subset?Accuracy = 完全匹配的样本数 总样本数 \text{Subset Accuracy} = \frac{\text{完全匹配的样本数}}{\text{总样本数}} Subset?Accuracy=总样本数完全匹配的样本数?

7. ROC 和 AUC

  • ROC 曲线:真正类率(TPR)对假正类率(FPR)的图形表示。
  • AUC 值:ROC 曲线下的面积。

在多标签设置中,这些指标通常是对每个标签单独计算然后取平均值。

宏观评价指标(Macro Metrics)

宏观指标是对每个标签分别计算指标值,然后取所有标签指标值的平均。对于精确度、召回率和F1分数,其宏观计算公式如下:

  1. 宏观精确度(Macro Precision)
    M a c r o ? P r e c i s i o n = 1 N ∑ i = 1 N P r e c i s i o n i Macro\ Precision = \frac{1}{N} \sum_{i=1}^{N} Precision_i Macro?Precision=N1?i=1N?Precisioni?
    其中,Precision_i 是第 i 个标签的精确度,N 是标签的总数。

  2. 宏观召回率(Macro Recall)
    M a c r o ? R e c a l l = 1 N ∑ i = 1 N R e c a l l i Macro\ Recall = \frac{1}{N} \sum_{i=1}^{N} Recall_i Macro?Recall=N1?i=1N?Recalli?

  3. 宏观 F1 分数(Macro F1 Score)
    M a c r o ? F 1 = 1 N ∑ i = 1 N F 1 i Macro\ F1 = \frac{1}{N} \sum_{i=1}^{N} F1_i Macro?F1=N1?i=1N?F1i?

微观评价指标(Micro Metrics)

微观指标是在所有标签的汇总数据上计算指标值。对于精确度、召回率和F1分数,其微观计算公式如下:

  1. 微观精确度(Micro Precision)
    M i c r o ? P r e c i s i o n = ∑ i = 1 N T P i ∑ i = 1 N ( T P i + F P i ) Micro\ Precision = \frac{\sum_{i=1}^{N} TP_i}{\sum_{i=1}^{N} (TP_i + FP_i)} Micro?Precision=i=1N?(TPi?+FPi?)i=1N?TPi??
    其中, T P i TP_i TPi? F P i FP_i FPi?分别是第 i i i个标签的真正例和假正例数。

  2. 微观召回率(Micro Recall)
    M i c r o ? R e c a l l = ∑ i = 1 N T P i ∑ i = 1 N ( T P i + F N i ) Micro\ Recall = \frac{\sum_{i=1}^{N} TP_i}{\sum_{i=1}^{N} (TP_i + FN_i)} Micro?Recall=i=1N?(TPi?+FNi?)i=1N?TPi??

  3. 微观 F1 分数(Micro F1 Score)
    M i c r o ? F 1 = 2 × M i c r o ? P r e c i s i o n × M i c r o ? R e c a l l M i c r o ? P r e c i s i o n + M i c r o ? R e c a l l Micro\ F1 = 2 \times \frac{Micro\ Precision \times Micro\ Recall}{Micro\ Precision + Micro\ Recall} Micro?F1=2×Micro?Precision+Micro?RecallMicro?Precision×Micro?Recall?

在多标签分类中,选择宏观还是微观指标取决于你的具体需求和数据的特性。例如,如果你希望每个标签都同等重要,可以选择宏观指标。如果你的数据集中某些标签的样本数远多于其他标签,使用微观指标可能更合适。

简单可视化

import matplotlib.pyplot as plt
import numpy as np

# 假设 x 轴有 8 个epcohs
epochs = np.arange(1, 9)

# 数据
micro_f1_values = {
    'w/o ATM, w/o APP': np.array([0.52, 0.54, 0.56, 0.58, 0.60, 0.61, 0.62, 0.63]),
    'w/ ATM, w/o APP': np.array([0.53, 0.55, 0.57, 0.59, 0.61, 0.62, 0.63, 0.64]),
    'w/o ATM, w/ APP': np.array([0.54, 0.56, 0.58, 0.59, 0.61, 0.64, 0.63, 0.65]),
    'w/ ATM, w/ APP': np.array([0.55, 0.57, 0.58, 0.56, 0.62, 0.63, 0.64, 0.66]),
}

# 设置不同的标记和颜色
markers = ['o', '^', '*', 's'] 
colors = ['black', 'blue', 'orange', 'red'] 

# 使用不同的标记和颜色绘制数据
plt.figure(figsize=(10, 6))
for (label, values), marker, color in zip(micro_f1_values.items(), markers, colors):
    plt.plot(epochs, values, marker=marker, color=color, linestyle='-', label=label)

# 添加标题和标签
plt.title('Micro-F1 Score over Epochs')
plt.xlabel('Train (num of epochs)')
plt.ylabel('Micro-F1')

# 添加网格和图例
plt.grid(True)
plt.legend()

# 显示
plt.show()

在这里插入图片描述

文章来源:https://blog.csdn.net/wuli_xin/article/details/135169420
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。