写一个python脚本实现模型多分类中,计算某一类的精确率召回率以及F1
时间: 2024-05-02 17:23:24 浏览: 146
假设我们有一个多分类的模型,输出结果为每个类别的概率值,真实标签为每个样本的实际类别。
首先,我们需要将输出的概率值转换为预测类别。可以通过取概率值最大的那个类别作为预测类别。
接着,我们可以计算每个类别的 TP、FP、FN 值:
- TP (True Positive):预测为该类别且实际为该类别的样本数。
- FP (False Positive):预测为该类别但实际不是该类别的样本数。
- FN (False Negative):实际为该类别但预测不是该类别的样本数。
有了这些值,我们可以计算某一类的精确率、召回率和 F1 值:
- 精确率 (precision): TP / (TP + FP)
- 召回率 (recall): TP / (TP + FN)
- F1 值 (F1-score): 2 * precision * recall / (precision + recall)
下面是一个示例代码:
```python
import numpy as np
def calc_metrics(y_true, y_pred, class_id):
"""
计算某一类别的精确率、召回率和 F1 值
:param y_true: 真实标签,形状为 (n_samples,)
:param y_pred: 预测标签,形状为 (n_samples, n_classes)
:param class_id: 要计算的类别 ID
:return: (precision, recall, f1_score)
"""
y_pred = np.argmax(y_pred, axis=1) # 转换为预测类别
tp = np.sum((y_true == class_id) & (y_pred == class_id))
fp = np.sum((y_true != class_id) & (y_pred == class_id))
fn = np.sum((y_true == class_id) & (y_pred != class_id))
precision = tp / (tp + fp)
recall = tp / (tp + fn)
f1_score = 2 * precision * recall / (precision + recall)
return precision, recall, f1_score
```
其中,y_true 和 y_pred 的形状分别为 (n_samples,) 和 (n_samples, n_classes),class_id 为要计算的类别 ID。函数返回结果为该类别的精确率、召回率和 F1 值。
阅读全文