f1-score PYTORCH
时间: 2025-04-29 11:56:07 AIGC 浏览: 46
### 如何在 PyTorch 中计算 F1 分数
F1 分数是一种衡量分类模型性能的指标,尤其适用于类别不平衡的情况。它通过精确率(Precision)和召回率(Recall)的调和平均来定义:
\[
F1 = 2 \cdot \frac{\text{Precision} \cdot \text{Recall}}{\text{Precision} + \text{Recall}}
\]
其中,
- **Precision** 表示预测为正类样本中有多少比例实际上是正类[^1]。
- **Recall** 表示实际为正类的样本中有多少被正确预测。
#### 实现方式
以下是基于 PyTorch 的一种实现方法,用于计算二分类或多分类场景下的 F1 分数。
```python
import torch
from sklearn.metrics import f1_score
def calculate_f1_score(y_true, y_pred, average='binary'):
"""
计算 F1 分数
参数:
y_true (Tensor): 真实标签 Tensor
y_pred (Tensor): 预测概率或标签 Tensor
average (str): 平均策略 ('binary', 'micro', 'macro' 等)
返回:
float: F1 分数值
"""
# 将张量转换为 NumPy 数组
y_true_np = y_true.cpu().numpy()
y_pred_np = y_pred.argmax(dim=1).cpu().numpy() if len(y_pred.shape) > 1 else y_pred.round().cpu().numpy()
# 使用 scikit-learn 进行计算
return f1_score(y_true_np, y_pred_np, average=average)
# 示例用法
y_true = torch.tensor([0, 1, 1, 0])
y_pred = torch.tensor([[0.9, 0.1], [0.4, 0.6], [0.3, 0.7], [0.8, 0.2]])
f1_value = calculate_f1_score(y_true, y_pred)
print(f"F1 Score: {f1_value}")
```
上述代码中,`calculate_f1_score` 函数接受真实标签 `y_true` 和预测值 `y_pred`,并返回对应的 F1 值。对于多分类情况,可以通过设置参数 `average='micro'` 或 `'macro'` 来调整平均策略[^2]。
#### 多分类中的微平均与宏平均
- 微平均(Micro-average):全局统计真正例、假正例和假负例的数量后再计算 Precision 和 Recall。
- 宏平均(Macro-average):分别针对每个类别计算 Precision 和 Recall 后再取平均。
两种方法的选择取决于具体应用场景以及数据分布特性[^3]。
---
阅读全文
相关推荐



















