我不了解如何在scikit learn中计算coverage_error,可在sklearn.metrics模块中找到。文档中的说明如下:
coverage_error函数计算必须包含在最终预测中的标签的平均数量,以便预测所有真实标签。
例如:
import numpy as np
from sklearn.metrics import coverage_error
y_true = np.array([[1, 0, 0], [0, 1, 1]])
y_score = np.array([[1, 0, 0], [0, 1, 1]])
print coverage_error(y_true, y_score)
1.5
根据我的理解,我们需要在预测中包含3个标签,以获取y_true中的所有标签。所以覆盖误差= 3/2,即1.5。但我无法理解以下情况会发生什么:
>>> y_score = np.array([[1, 0, 0], [0, 0, 1]])
>>> print coverage_error(y_true, y_score)
2.0
>>> y_score = np.array([[1, 0, 1], [0, 1, 1]])
>>> print coverage_error(y_true, y_score)
2.0
为什么两种情况下的错误都相同?
答案 0 :(得分:4)
您可以查看User Guide 3.3.3. Multilabel ranking metrics
您需要注意的一件事是如何计算排名并打破排名y_score
中的关系。
具体而言,第一种情况:
In [4]: y_true
Out[4]:
array([[1, 0, 0],
[0, 1, 1]])
In [5]: y_score
Out[5]:
array([[1, 0, 0],
[0, 0, 1]])
第二种情况:
In [7]: y_score
Out[7]:
array([[1, 0, 1],
[0, 1, 1]])
修改强>
排名在y_score
的一个样本中。公式表示标签的等级是分数大于或等于其分数的标签(包括其自身)的数量。
就像按y_score
排序标签一样,得分最高的标签排名第1,第二大排名第2,第三大排名第3,等等。但如果排名第二和第三大标签具有相同的分数,它们都排在第3位。
请注意y_score
是
目标分数,可以是正类的概率估计,置信度值或二元决策。
目标是预测所有真实标签,因此我们需要包含分数高于或等于真实标签的所有标签。