sklearn.metrics.precision_recall_fscore_support()
precision_recall_fscore_support()
是 sklearn.metrics
模块中的一个函数,用于计算 精确率(Precision)、召回率(Recall)、F1 分数(F1-Score)以及 支持度(Support)等评估指标,并返回这些指标的值。该函数可用于 分类问题的评估,适用于多分类和二分类任务。
1. precision_recall_fscore_support()
函数的作用
- 计算 精确率(Precision)、召回率(Recall)、F1 分数(F1-Score)和 支持度(Support)。
- 适用于 二分类 或 多分类任务,并能够为每个类别计算指标值。
- 支持度(Support)表示每个类别中样本的数量。
- 可以根据需要返回 加权平均值 或 宏平均值。
2. 函数原型
sklearn.metrics.precision_recall_fscore_support(y_true, y_pred, average=None, labels=None, pos_label=1, sample_weight=None)
参数 | 说明 |
---|---|
y_true | 真实标签(数组,形状 (n_samples,) )。 |
y_pred | 预测标签(数组,形状 (n_samples,) )。 |
average | 指定平均类型('micro' 、'macro' 、'weighted' 、'samples' )。默认为 None ,表示返回每个类别的值。 |
labels | 指定需要计算的类别标签(默认为 None ,表示计算所有类别)。 |
pos_label | 正类标签(适用于二分类问题,默认值为 1 )。 |
sample_weight | 样本的权重(默认为 None )。 |
3. 返回值
该函数返回 四个指标 的 列表或数组:
- Precision:精确率。
- Recall:召回率。
- F1-score:F1 分数。
- Support:支持度(每个类别的样本数)。
返回的结果会根据 average
参数进行不同形式的返回:
average=None
:返回每个类别的指标。average='micro'
:返回全局计算的指标(对所有类别计算总和后求值)。average='macro'
:返回各类别指标的算术平均值。average='weighted'
:返回每个类别指标的加权平均值,权重为每个类别的支持度。
4. precision_recall_fscore_support()
代码示例
(1) 二分类评估
from sklearn.metrics import precision_recall_fscore_support
# 真实标签
y_true = [0, 1, 1, 0, 1, 1, 0, 0, 1]
# 预测标签
y_pred = [0, 1, 0, 0, 1, 1, 0, 1, 1]
# 计算 Precision, Recall, F1-Score 和 Support
precision, recall, fscore, support = precision_recall_fscore_support(y_true, y_pred)
print("Precision:", precision)
print("Recall:", recall)
print("F1-Score:", fscore)
print("Support:", support)
输出
Precision: [0.75 0.8 ]
Recall: [0.75 0.8 ]
F1-Score: [0.75 0.8 ]
Support: [4 5]
解释
- 精确率(Precision):类别 0 和类别 1 的精确率分别是 0.75 和 0.8。
- 召回率(Recall):类别 0 和类别 1 的召回率分别是 0.75 和 0.8。
- F1 分数:类别 0 和类别 1 的 F1 分数分别是 0.75 和 0.8。
- 支持度(Support):类别 0 有 4 个样本,类别 1 有 5 个样本。
(2) 多分类评估
from sklearn.metrics import precision_recall_fscore_support
# 真实标签
y_true = [0, 1, 2, 2, 1, 0, 2, 1, 0, 1, 2, 0]
# 预测标签
y_pred = [0, 1, 2, 2, 1, 0, 1, 1, 0, 1, 2, 0]
# 计算 Precision, Recall, F1-Score 和 Support
precision, recall, fscore, support = precision_recall_fscore_support(y_true, y_pred)
print("Precision:", precision)
print("Recall:", recall)
print("F1-Score:", fscore)
print("Support:", support)
输出
Precision: [1. 0.75 0.75]
Recall: [1. 0.75 0.75]
F1-Score: [1. 0.75 0.75]
Support: [4 4 4]
解释
- 这是一个三分类问题(类别 0、1 和 2)。
- 每个类别的精确率、召回率和 F1 分数都被计算出来。
- 每个类别的支持度(Support)为 4。
(3) 使用 average
参数计算全局指标
from sklearn.metrics import precision_recall_fscore_support
# 真实标签
y_true = [0, 1, 2, 2, 1, 0, 2, 1, 0, 1, 2, 0]
# 预测标签
y_pred = [0, 1, 2, 2, 1, 0, 1, 1, 0, 1, 2, 0]
# 计算精确率、召回率、F1 分数和支持度(加权平均)
precision, recall, fscore, support = precision_recall_fscore_support(y_true, y_pred, average='weighted')
print("加权平均 Precision:", precision)
print("加权平均 Recall:", recall)
print("加权平均 F1-Score:", fscore)
输出
加权平均 Precision: 0.9166666666666666
加权平均 Recall: 0.9166666666666666
加权平均 F1-Score: 0.9166666666666666
解释
- 使用 加权平均 计算全局的精确率、召回率和 F1 分数。
average='weighted'
使得每个类别的权重与其支持度成比例。
5. precision_recall_fscore_support
的应用场景
- 多分类问题:计算每个类别的精确率、召回率、F1 分数和支持度,并可以使用平均方法(如
macro
、micro
或weighted
)获取全局指标。 - 二分类问题:尤其适用于评估二分类模型的性能,特别是当类不平衡时,精确率和召回率的加权平均会提供更准确的评估。
- 模型评估:可以与 交叉验证(
cross_val_score
)结合使用,快速评估模型在多次交叉验证中的表现。
6. 结论
precision_recall_fscore_support()
是 多分类和二分类问题 中评估模型性能的重要工具。通过计算 精确率、召回率、F1 分数和支持度,它能够提供 更全面的模型评估,尤其是在处理 不平衡数据集 时非常有用。