jaccard_score#

sklearn.metrics.jaccard_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')[source]#

Jaccard 相似系数得分。

Jaccard 指数 [1],或 Jaccard 相似系数,定义为两个标签集交集的大小除以它们并集的大小,用于比较样本的预测标签集与 y_true 中相应的标签集。

对超出 term:binary 目标的支持,是通过将多分类多标签数据视为二元问题的集合来实现的,每个标签一个。对于二元情况,设置 average='binary' 将返回 pos_label 的 Jaccard 相似系数。如果 average 不是 'binary',则 pos_label 将被忽略,并计算两个类别的分数,然后进行平均或同时返回(当 average=None 时)。类似地,对于多分类多标签目标,所有 labels 的分数将根据 average 参数返回或进行平均。使用 labels 来指定要计算分数的标签集。

用户指南中阅读更多内容。

参数:
y_true1维类数组,或标签指示器数组/稀疏矩阵

真实(正确)标签。

y_pred1维类数组,或标签指示器数组/稀疏矩阵

预测标签,由分类器返回。

labels形状为 (n_classes,) 的类数组,默认为 None

average != 'binary' 时要包含的标签集,以及当 average is None 时的顺序。数据中存在的标签可以被排除,例如在多分类中排除“负类”。数据中不存在的标签可以被包含,并被“分配”0个样本。对于多标签目标,标签是列索引。默认情况下,y_truey_pred 中的所有标签都按排序顺序使用。

pos_labelint、float、bool 或 str,默认为 1

average='binary' 且数据为二元时要报告的类别,否则此参数将被忽略。对于多分类或多标签目标,设置 labels=[pos_label]average != 'binary' 以仅报告一个标签的指标。

average{'micro', 'macro', 'samples', 'weighted', 'binary'} 或 None,默认为 'binary'

如果为 None,则返回每个类别的分数。否则,这决定了对数据执行的平均类型

'binary':

仅报告由 pos_label 指定的类别的结果。这仅适用于目标(y_{true,pred})是二元的情况。

'micro':

通过计算总真阳性、假阴性和假阳性来全局计算指标。

'macro':

为每个标签计算指标,并找到它们的未加权平均值。这不考虑标签不平衡。

'weighted':

为每个标签计算指标,并找到它们的平均值,按支持度(每个标签的真实实例数)加权。这会改变 ‘macro’ 以考虑标签不平衡。

'samples':

为每个实例计算指标,并找到它们的平均值(仅对多标签分类有意义)。

sample_weight形状为 (n_samples,) 的类数组,默认为 None

样本权重。

zero_division“warn”,{0.0, 1.0},默认为 “warn”

当发生零除时设置返回的值,即预测和标签中没有负值时。如果设置为 “warn”,则其作用类似于 0,但也会引发警告。

0.24 版本新增。

返回:
scorefloat 或 形状为 (n_unique_labels,) 的 ndarray,数据类型为 np.float64

Jaccard 分数。当 average 不为 None 时,返回一个标量值。

另请参阅

accuracy_score

计算准确率分数的函数。

f1_score

计算 F1 分数的函数。

multilabel_confusion_matrix

为每个类别或样本计算混淆矩阵的函数。

注意

jaccard_score 对于某些样本或类别如果没有正例,则可能是一个糟糕的指标。如果不存在真实或预测标签,Jaccard 是未定义的,并且我们的实现将返回 0 分并发出警告。

参考文献

示例

>>> import numpy as np
>>> from sklearn.metrics import jaccard_score
>>> y_true = np.array([[0, 1, 1],
...                    [1, 1, 0]])
>>> y_pred = np.array([[1, 1, 1],
...                    [1, 0, 0]])

在二元情况下

>>> jaccard_score(y_true[0], y_pred[0])
0.6666

在二维比较情况下(例如图像相似度)

>>> jaccard_score(y_true, y_pred, average="micro")
0.6

在多标签情况下

>>> jaccard_score(y_true, y_pred, average='samples')
0.5833
>>> jaccard_score(y_true, y_pred, average='macro')
0.6666
>>> jaccard_score(y_true, y_pred, average=None)
array([0.5, 0.5, 1. ])

在多分类情况下

>>> y_pred = [0, 2, 1, 2]
>>> y_true = [0, 1, 2, 2]
>>> jaccard_score(y_true, y_pred, average=None)
array([1. , 0. , 0.33])