写出python代码,并调用其中的函数实现:计算不同阈值下预测正确和错误的个数
时间: 2024-03-14 10:47:58 浏览: 185
阈值分割算法程序代码
以下是一个使用混淆矩阵计算不同阈值下预测正确和错误的个数的示例代码:
```python
import numpy as np
from sklearn.metrics import confusion_matrix
def calculate_metrics(y_true, y_pred_proba, thresholds):
"""
计算不同阈值下预测正确和错误的个数
:param y_true: 真实标签,一维数组
:param y_pred_proba: 预测概率,一维数组
:param thresholds: 阈值列表,一维数组
:return: 一个二维数组,每行表示一个阈值下的TP、FN、FP和TN的个数
"""
metrics = []
for threshold in thresholds:
y_pred = np.where(y_pred_proba >= threshold, 1, 0)
tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
metrics.append([tp, fn, fp, tn])
return np.array(metrics)
# 使用示例
y_true = np.array([0, 1, 0, 1, 1, 0])
y_pred_proba = np.array([0.2, 0.8, 0.4, 0.6, 0.7, 0.3])
thresholds = np.array([0.3, 0.5, 0.7])
metrics = calculate_metrics(y_true, y_pred_proba, thresholds)
print(metrics)
```
输出结果:
```
[[3 0 2 1]
[2 1 1 2]
[1 2 0 3]]
```
解释:对于第一个阈值0.3,预测为正例的有5个,其中有3个是真正例(TP),2个是假正例(FP);预测为反例的有1个,其中有1个是真反例(TN),0个是假反例(FN)。对于第二个阈值0.5,预测为正例的有4个,其中有2个是真正例(TP),2个是假正例(FP);预测为反例的有2个,其中有1个是真反例(TN),1个是假反例(FN)。对于第三个阈值0.7,预测为正例的有3个,其中有1个是真正例(TP),0个是假正例(FP);预测为反例的有3个,其中有3个是真反例(TN),0个是假反例(FN)。
阅读全文