详解 Scikit-learn 的 metrics.precision_score函数:计算分类器精确率

  • Post category:Python

sklearn.metrics.precision_score 是 Scikit-learn 中计算分类准确率(Precision)的函数,用于计算分类器对正样本的Precision得分。

以下是 precision_score(y_true, y_pred, labels=None, pos_label=1, average='binary', sample_weight=None) 函数的参数说明:

  • y_true:实际数据的目标变量,即真实值,类型为二维数组或类数组型数据,形状为(n_samples,)。n_samples 表示数据样本数
  • y_pred:预测目标变量,即分类器预测出来的样本标签值,类型为二维数组或类数组型数据,形状为(n_samples,)。n_samples 表示数据样本数
  • labels:算法预测的分类种类,类型为一个数组
  • pos_label:算法预测的正类别,type(int) 或 str,正类别必须是元素唯一的列表或数组,对于二进制分类pos_label默认为1
  • average:用于计算返回的得分值的类型,type(str),默认值为’binary’,可选参数有’binary’、’micro’、’macro’、’weighted’和None
  • sample_weight:示例权重,类型为一维数组或 None,可为每个样本设置不同的权重值,样本权重值 1 表示正常,比 1 大或小的权重更重或轻

这个函数返回的是精确度得分。理论上,精确度得分越高,说明分类器对于正样本的判断越高效。

下面我们以实例进行说明:

# 示例 1
from sklearn.metrics import precision_score

y_true = [1, 1, 0, 1, 0, 0, 1, 0]
y_pred = [1, 0, 0, 1, 0, 1, 1, 1]

precision_score(y_true, y_pred, average='binary')

输出结果为0.5

这里的结果说明该分类器对于正样本的判断并不高。同时,我们还可以不采用默认的average=’binary’参数选项,而选择’macro‘模式:

# 示例 2
from sklearn.metrics import precision_score

y_true = [1, 1, 0, 1, 0, 0, 1, 0]
y_pred = [1, 0, 0, 1, 0, 1, 1, 1]

precision_score(y_true, y_pred, average='macro')

输出结果为0.4166666666666667

这个结果告诉我们,在所有分类样本中,分类准确率的平均值只有0.4,这可能表明分类器需要改进或则需要改变。

在实际使用过程中,precision_score函数的正确应用传递正确的标签很重要。同时,根据样本分布的不同,以不同形式应用这个函数也很重要。