返回
手把手教你用Python中的numpy包实现PR曲线和ROC曲线的计算
人工智能
2023-12-06 14:15:41
PR曲线和ROC曲线是评估机器学习模型性能的两个常用指标。PR曲线显示了模型在不同召回率下的准确率,而ROC曲线则显示了模型在不同阈值下的真正例率和假正例率。这两种曲线都可以帮助我们了解模型的性能,并确定模型在实际应用中的适用性。
PR曲线
PR曲线是衡量二分类模型性能的常用指标之一。PR曲线显示了模型在不同召回率下的准确率。召回率是指模型正确识别正例的比例,而准确率是指模型正确识别所有样本的比例。
PR曲线的计算方法如下:
- 计算模型在不同阈值下的真正例率和假正例率。
- 将真正例率和假正例率绘制在坐标系中,横坐标为假正例率,纵坐标为真正例率。
- 连接各个点,即得到PR曲线。
ROC曲线
ROC曲线是衡量二分类模型性能的另一个常用指标。ROC曲线显示了模型在不同阈值下的真正例率和假正例率。真正例率是指模型正确识别正例的比例,而假正例率是指模型错误识别负例为正例的比例。
ROC曲线的计算方法如下:
- 计算模型在不同阈值下的真正例率和假正例率。
- 将真正例率和假正例率绘制在坐标系中,横坐标为假正例率,纵坐标为真正例率。
- 连接各个点,即得到ROC曲线。
使用numpy包计算PR曲线和ROC曲线
我们可以使用numpy包来计算PR曲线和ROC曲线。下面是具体的代码示例:
import numpy as np
def calculate_pr_curve(y_true, y_score):
"""计算PR曲线。
参数:
y_true: 真实标签。
y_score: 模型预测得分。
返回:
召回率, 准确率
"""
# 计算不同阈值下的真正例率和假正例率
thresholds = np.unique(y_score)
tprs = []
fprs = []
for threshold in thresholds:
y_pred = np.where(y_score >= threshold, 1, 0)
tp = np.sum(y_pred * y_true)
fp = np.sum(y_pred * (1 - y_true))
fn = np.sum((1 - y_pred) * y_true)
tn = np.sum((1 - y_pred) * (1 - y_true))
tpr = tp / (tp + fn)
fpr = fp / (fp + tn)
tprs.append(tpr)
fprs.append(fpr)
# 返回PR曲线坐标点
return tprs, fprs
def calculate_roc_curve(y_true, y_score):
"""计算ROC曲线。
参数:
y_true: 真实标签。
y_score: 模型预测得分。
返回:
真正例率, 假正例率
"""
# 计算不同阈值下的真正例率和假正例率
thresholds = np.unique(y_score)
tprs = []
fprs = []
for threshold in thresholds:
y_pred = np.where(y_score >= threshold, 1, 0)
tp = np.sum(y_pred * y_true)
fp = np.sum(y_pred * (1 - y_true))
fn = np.sum((1 - y_pred) * y_true)
tn = np.sum((1 - y_pred) * (1 - y_true))
tpr = tp / (tp + fn)
fpr = fp / (fp + tn)
tprs.append(tpr)
fprs.append(fpr)
# 返回ROC曲线坐标点
return tprs, fprs
结语
PR曲线和ROC曲线都是评估机器学习模型性能的常用指标。PR曲线显示了模型在不同召回率下的准确率,而ROC曲线则显示了模型在不同阈值下的真正例率和假正例率。我们可以使用numpy包来计算PR曲线和ROC曲线。这两种曲线对于评估模型的性能非常有用,可以帮助我们了解模型的优缺点,并确定模型在实际应用中的适用性。