获得scikit-learn中多标签预测的准确性

时间:2015-08-27 02:10:44

标签: python scikit-learn classification

multilabel classification设置中,sklearn.metrics.accuracy_score仅计算子集精度(3):即为样本预测的标签集必须与相应的标签集完全匹配在y_true。

这种计算准确性的方式有时被命名,可能不那么模糊,完全匹配率(1):

enter image description here

有没有办法让其他典型的方法来计算scikit-learn的准确度,即

enter image description here

(如(1)和(2)中所定义,并且不那么含糊地称为汉明分数(4)(因为它与汉明损失密切相关),或基于标签 精度的) ?

(1)Sorower,Mohammad S.“A literature survey on algorithms for multi-label learning.”俄勒冈州立大学,Corvallis(2010)。

(2)Tsoumakas,Grigorios和Ioannis Katakis。 “Multi-label classification: An overview.”信息学系,希腊塞萨洛尼基亚里士多德大学(2006年)。

(3)Ghamrawi,Nadia和Andrew McCallum。 “Collective multi-label classification.”第14届ACM信息和知识管理国际会议论文集。 ACM,2005。

(4)Godbole,Shantanu和Sunita Sarawagi。 “Discriminative methods for multi-labeled classification.”知识发现和数据挖掘的进展。 Springer Berlin Heidelberg,2004。22-30。

2 个答案:

答案 0 :(得分:1)

对于2019年读书的人,现在您可以使用sklearn.metrics.hamming_loss

>>> import numpy as np
>>> hamming_loss(np.array([[0, 1], [1, 1]]), np.zeros((2, 2)))
0.75

在Numpy中也很容易计算:

# Exact Match ratio:
np.all(y_pred == y_true, axis=1).mean()

# Hamming Score:
(y_pred == y_true).mean()

答案 1 :(得分:0)

一个简单的汇总函数:

import numpy as np

def hamming_score(y_true, y_pred):
    return (
        (y_true & y_pred).sum(axis=1) / (y_true | y_pred).sum(axis=1)
    ).mean()


hamming_score(y_true, y_pred)
# 0.375