sklearn.metrics.precision_score¶
sklearn.metrics.precision_score(y_true, y_pred, *, labels=None, pos_label=1, average='binary', sample_weight=None, zero_division='warn')
计算精度
精度是比率tp /(tp + fp),其中tp是真正例的数目,fp是假正例的数目。从直觉上讲,精度是分类器不将负例样本标记为正例的能力。
最佳值为1,最差值为0。
在用户指南中阅读更多内容。
参数 | 说明 |
---|---|
y_true | 1d array-like, or label indicator array / sparse matrix 真实目标值。 |
y_pred | 1d array-like, or label indicator array / sparse matrix 分类器返回的估计目标。 |
labels | list, optional 当average!='binary'时要包括的一组标签,如果average是None,则为标签的顺序。可以排除数据中存在的标签,例如,以忽略多数否定类的方式计算多类平均值,而数据中不存在的标签将导致宏平均值中的0成分。对于多标签目标,标签是列索引。 默认情况下,y_true和y_pred中的所有标签均按排序顺序使用。 在版本0.17中进行了更改:针对多类问题改进了参数标签。 |
pos_label | str or int, 1 by default average ='binary'且数据为二进制的报告类。如果数据是多类或多标签的,则将被忽略; 设置labels= [pos_label]和average!='binary'将仅报告该标签的分数。 |
average | string, [None|‘binary’ (default)| ‘micro’| ‘macro’| ‘samples’|‘weighted’] 对于多类/多标签目标,此参数是必需的。如果为None,则返回每个班级的分数。否则,将根据数据的平均表现确定类型: - 'binary' :仅报告由pos_label指定的类的结果。仅当目标(y_ {true,pred})为二进制时才适用。 - 'micro' :通过计算真正例、假负例和假正例的总数来全局计算指标。 - 'macro' :计算每个标签的指标,并找到其未加权平均值。 没有考虑标签不平衡。 - 'weighted' :计算每个标签的指标,并找到它们受支持的平均权重(每个标签的真实实例数)。这会更改‘macro’以解决标签不平衡的问题;这可能导致F-score不在精确度和召回率之间。 - 'samples' :计算每个实例的指标,并找到它们的平均值(仅对不同于 accuracy_score 的多标签分类有意义)。 |
sample_weight | array-like of shape (n_samples,), default=None 样本权重。 |
zero_division | “warn”, 0 or 1, default=”warn” 设置零分频时返回的值。如果设置为“ warn”,则该值为0,但也会发出警告。 |
返回值 | 说明 |
---|---|
precision | float (if average is not None) or array of float, shape = [n_unique_labels] 二进制分类中正类的精度,或者多类任务的每个类的精度的加权平均值。 |
注
当真正例+假正例==0时,精度返回0并引发UndefinedMetricWarning。可以使用zero_division修改此行为。
示例
>>> from sklearn.metrics import precision_score
>>> y_true = [0, 1, 2, 0, 1, 2]
>>> y_pred = [0, 2, 1, 0, 0, 1]
>>> precision_score(y_true, y_pred, average='macro')
0.22...
>>> precision_score(y_true, y_pred, average='micro')
0.33...
>>> precision_score(y_true, y_pred, average='weighted')
0.22...
>>> precision_score(y_true, y_pred, average=None)
array([0.66..., 0. , 0. ])
>>> y_pred = [0, 0, 0, 0, 0, 0]
>>> precision_score(y_true, y_pred, average=None)
array([0.33..., 0. , 0. ])
>>> precision_score(y_true, y_pred, average=None, zero_division=1)
array([0.33..., 1. , 1. ])