Jaccard 相似系数 #

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 中对应的标签集。

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

用户指南中了解更多信息。

参数:
y_true一维数组或标签指示符数组/稀疏矩阵

真实(正确)标签。

y_pred一维数组或标签指示符数组/稀疏矩阵

分类器返回的预测标签。

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

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

pos_label整数、浮点数、布尔值或字符串,默认值为 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 版本中添加。

返回:
score浮点数或形状为 (n_unique_labels,) 的 ndarray,dtype=np.float64

Jaccard 分数。当average不是None时,返回单个标量。

另请参见

accuracy_score

用于计算准确率得分的函数。

F1 分数 (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])
np.float64(0.6666...)

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

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

在多标签情况下

>>> jaccard_score(y_true, y_pred, average='samples')
np.float64(0.5833...)
>>> jaccard_score(y_true, y_pred, average='macro')
np.float64(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...])