在二分类任务中,精确度(precision)和召回率(recall)是衡量分类器性能的两个重要指标。精确度反映了分类器将正样本正确识别的能力,而召回率则反映了分类器识别所有正样本的能力。精确度和召回率的计算依赖于概率阈值,即分类器输出的概率分数。通过改变概率阈值,可以计算出不同阈值下的精确度和召回率,从而绘制出精确度-召回率曲线。
精确度的计算公式为:
精确度= tp / (tp + fp)
其中,tp表示真正例(true positives)的数量,fp表示假正例(false positives)的数量。精确度直观上反映了分类器不将负样本错误标记为正样本的能力。
召回率的计算公式为:
召回率= tp / (tp + fn)
其中,tp同样表示真正例的数量,fn表示假负例(false negatives)的数量。召回率直观上反映了分类器找到所有正样本的能力。
在绘制精确度-召回率曲线时,最后一个精确度和召回率值分别为1.0和0.0,它们没有对应的阈值。这样做是为了确保曲线从y轴开始。第一个精确度和召回率值分别为精确度等于类别平衡和召回率等于1.0,这对应于一个总是预测正类的分类器。
在实际应用中,可以通过以下参数来计算精确度和召回率:
y_true: array-like of shape (n_samples,)
True binary labels. If labels are not either {-1, 1} or {0, 1}, then
pos_label should be explicitly given.
y_score: array-like of shape (n_samples,)
Target scores, can either be probability estimates of the positive
class, or non-thresholded measure of decisions (as returned by
decision_function on some classifiers).
pos_label: int, float, bool or str, default=None
The label of the positive class.
When pos_label=None, if y_true is in {-1, 1} or {0, 1}, pos_label
is set to 1, otherwise an error will be raised.
sample_weight: array-like of shape (n_samples,), default=None
Sample weights.
drop_intermediate: bool, default=False
Whether to drop some suboptimal thresholds which would not appear
on a plotted precision-recall curve. This is useful in order to create
lighter precision-recall curves.
通过这些参数,可以计算出不同阈值下的精确度和召回率,并绘制出精确度-召回率曲线。这有助于评估分类器的性能,并选择最佳的阈值来平衡精确度和召回率。
在实际编程中,可以使用以下代码来计算精确度和召回率:
import numpy as np
from sklearn.metrics import precision_recall_curve
y_true = np.array([0, 0, 1, 1])
y_scores = np.array([0.1, 0.4, 0.35, 0.8])
precision, recall, thresholds = precision_recall_curve(y_true, y_scores)
print(precision)
print(recall)
print(thresholds)
这段代码首先导入了必要的库,然后定义了真实的标签和预测分数。接着,使用precision_recall_curve函数计算了精确度、召回率和阈值。最后,打印出了计算结果。