不使用机器学习库里的f1_score的函数包,计算f1_score的值
时间: 2024-12-13 09:18:34 浏览: 5
使用sklearn的cross_val_score进行交叉验证实例
如果你不想依赖预装的机器学习库,如scikit-learn,你可以手动编写一个F1分数的计算函数。以下是一个基础的实现方法,适用于二分类问题,通过混淆矩阵来计算精确率、召回率和最终的F1分数:
```python
def calculate_f1_score(predictions, true_labels):
def _calculate_precision_recall(preds, labels):
tp = sum([1 for i in range(len(preds)) if preds[i] == 1 and labels[i] == 1])
fp = sum([1 for i in range(len(preds)) if preds[i] == 1 and labels[i] != 1])
fn = sum([1 for i in range(len(preds)) if preds[i] != 1 and labels[i] == 1])
precision = tp / (tp + fp) if tp + fp > 0 else 0
recall = tp / (tp + fn) if tp + fn > 0 else 0
return precision, recall
precision, recall = _calculate_precision_recall(predictions, true_labels)
if precision + recall == 0:
return 0
else:
return 2 * ((precision * recall) / (precision + recall))
# 示例
predictions = [0, 1, 1, 0, 1]
true_labels = [0, 1, 1, 0, 1]
f1_score_value = calculate_f1_score(predictions, true_labels)
print("F1 Score:", f1_score_value)
```
这个函数首先计算了精确率和召回率,然后使用它们来计算F1分数。注意,这只是一个基本实现,对于多类别问题或者其他复杂情况,可能需要更复杂的处理。如果需要其他类型的平均(比如`micro`或`macro`),你可以在`_calculate_precision_recall`内部加入相应的计算逻辑。
阅读全文