精确度计算方法

精确度是评估分类器性能的一个重要指标,它衡量的是分类器正确识别正样本的能力。在二分类问题中,精确度定义为真正例(tp)与真正例和假正例(fp)之和的比值。精确度的最佳值为1,最差值为0。

在处理多分类和多标签数据时,可以通过将每个标签视为一个二分类问题来计算精确度。对于二分类情况,如果设置average='binary',则会返回指定正样本标签的精确度。如果average不是'binary',则会忽略pos_label参数,并计算两个类别的精确度,然后进行平均或同时返回(当average=None时)。同样,对于多分类和多标签目标,根据average参数的设置,可以返回所有标签的精确度或进行平均。

可以使用labels参数指定计算精确度的标签集合。在多分类问题中,可以通过排除某些标签(例如,排除“负类”)来使用这个参数。此外,即使某些标签在数据中不存在,也可以将其包含在内,这些标签将被分配0个样本。对于多标签目标,标签是列索引。默认情况下,会使用y_truey_pred中的所有标签,并按排序顺序使用。

在多分类或多标签目标中,average参数是必需的。如果设置为None,则会返回每个类别的分数。否则,这个参数决定了对数据执行的类型平均:

'binary': 仅报告由pos_label指定的类别的结果。这只在目标(y_true, pred)是二分类时适用。 'micro': 通过计算总的真正例、假负例和假正例来全局计算指标。 'macro': 为每个标签计算指标,并找到它们的未加权平均值。这不考虑到标签不平衡。 'weighted': 为每个标签计算指标,并找到它们的平均值,按支持度(每个标签的真实实例数)加权。这改变了‘macro’以考虑到标签不平衡;它可能导致F分数不在精确度和召回率之间。 'samples': 为每个实例计算指标,并找到它们的平均值(这只在多标签分类中有意义,此时与accuracy_score不同)。

还可以通过sample_weight参数设置样本权重,以及通过zero_division参数设置当出现零除错误时返回的值。

当真正例加上假正例等于0时,精确度返回0并引发UndefinedMetricWarning。可以通过zero_division参数修改这种行为。

以下是一些使用精确度计算的示例:

import numpy as np from sklearn.metrics import precision_score y_true = [0, 1, 2, 0, 1, 2] y_pred = [0, 2, 1, 0, 0, 1] print(precision_score(y_true, y_pred, average='macro')) # 输出: np.float64(0.22...) print(precision_score(y_true, y_pred, average='micro')) # 输出: np.float64(0.33...) print(precision_score(y_true, y_pred, average='weighted')) # 输出: np.float64(0.22...) print(precision_score(y_true, y_pred, average=None)) # 输出: array([0.66..., 0. , 0. ])

在多标签分类中,精确度的计算方法如下:

y_true = [[0, 0, 0], [1, 1, 1], [0, 1, 1]] y_pred = [[0, 0, 0], [1, 1, 1], [1, 1, 0]] print(precision_score(y_true, y_pred, average=None)) # 输出: array([0.5, 1. , 1. ])
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485