多标签分类性能评估方法

多标签分类是指每个样本可以被分配到多个类别中,即:可以拥有多个标签。比如:某条新闻既可以是军事类新闻、也可以是政治类新闻。

在评估多标签分类模型时,我们使用的是样本平均精确率、样本平均召回率和样本平均 F1 分数。

y_true = [['好评', '中评'], ['好评', '中评', '差评'], ['好评', '差评'], ['中评', '差评'], ['中评', '好评']]
y_pred = [['中评', ], ['好评', '差评'], ['中评', ], ['好评', '差评'], ['中评', '好评']]
  • \(N\) 表示样本数量
  • \(Y_{i}\) 表示第 i 个样本真实标签集合
  • \(f(x_{i})\) 表示第 i 个样本预测的标签集合
  • \(Precision_{i}\) 表示第 i 个样本的精确度
  • \(Recall_{i}\) 表示第 i 个样本的召回率

接下来,计算每个样本的精确度、召回率、f1-score 值如下:

样本1:
精确度:1.0 
召回率:0.5 
F1-score:0.6666666666666666

样本2:
精确度:1.0 
召回率:0.6666666666666666 
F1-score:0.8

样本3:
精确度:0.0 
召回率:0.0 
F1-score:0.0

样本4:
精确度:0.5 
召回率:0.5 
F1-score:0.5

样本5:
精确度:1.0 
召回率:1.0 
F1-score:1.0

计算每个指标的样本平均值:

精确度:0.7
召回率:0.5333333333333333
F1-score:0.5933333333333334

使用示例:

from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
from sklearn.preprocessing import MultiLabelBinarizer
import pandas as pd


if __name__ == '__main__':

    # 真实和预测标签
    y_true = [['好评', '中评'],  ['好评', '中评', '差评'], ['好评', '差评'], ['中评', '差评'], ['中评', '好评']]
    y_pred = [['中评', ], ['好评', '差评'], ['中评', ], ['好评', '差评'], ['中评', '好评']]

    # 注意:必须对标签进行重新编码
    mlb = MultiLabelBinarizer()
    y_true = mlb.fit_transform(y_true)
    y_pred = mlb.transform(y_pred)
    print(mlb.classes_)
    print(y_true)
    print(y_pred)

    result = precision_score(y_true, y_pred, average='samples')
    print('精确率:\t\t', result)

    result = recall_score(y_true, y_pred, average='samples')
    print('召回率:\t\t', result)

    result = f1_score(y_true, y_pred, average='samples')
    print('f1-score:\t', result)
['中评' '好评' '差评']
[[1 1 0]
 [1 1 1]
 [0 1 1]
 [1 0 1]
 [1 1 0]]
[[1 0 0]
 [0 1 1]
 [1 0 0]
 [0 1 1]
 [1 1 0]]
精确率:		 0.7
召回率:		 0.5333333333333333
f1-score:	 0.5933333333333334
未经允许不得转载:一亩三分地 » 多标签分类性能评估方法