什么是PR查询,掌握PR查询方法
1. PR查询简介
PR(Precision-Recall)是一种用于评估分类模型性能的指标,主要用于衡量模型在召回率(Recall)和精确度(Precision)之间的平衡,PR查询是指通过计算不同阈值下的PR值,来确定最佳阈值的方法,这种方法可以帮助我们找到一个既能满足精确度要求,又能达到较高召回率的阈值。
2. PR查询方法
PR查询主要包括以下几个步骤:
2.1 准备数据
我们需要准备一个包含真实标签和预测标签的数据集,数据集通常是一个二维数组,其中每一行表示一个样本,第一列是真实标签,第二列是预测标签。
import numpy as np data = np.array([ ['A', 'B'], ['B', 'A'], ['A', 'A'], ['B', 'B'] ])
2.2 计算混淆矩阵
接下来,我们需要计算混淆矩阵,混淆矩阵是一个二维数组,其中行表示实际类别,列表示预测类别,对于每个样本,我们可以将其真实标签和预测标签填入混淆矩阵中。
def confusion_matrix(data): y_true = [row[0] for row in data] y_pred = [row[1] for row in data] return np.histogram2d(y_true, y_pred, bins=[2, 2])[0] / len(data) cm = confusion_matrix(data) print("Confusion Matrix:") print(cm)
2.3 计算PR值
有了混淆矩阵后,我们可以计算PR值,PR值是一个二维数组,其中每个元素表示对应阈值下的PR值,我们可以通过遍历所有可能的阈值来计算这些值。
def pr_values(cm): n = cm.shape[0] * cm.shape[1] precision = np.zeros((n, n)) recall = np.zeros((n, n)) tp = np.diag(cm) fp = np.sum(cm, axis=0) tp fn = np.sum(cm, axis=1) tp for i in range(n): for j in range(n): if i == j: precision[i][j] = (tp[i] + tp[j]) / (tp[i] + fp[i] + fn[j]) if (tp[i] + tp[j]) > 0 else 0.5 recall[i][j] = tp[i] / (tp[i] + fn[j]) if (tp[i] + fn[j]) > 0 else 0.5 elif i < j: precision[i][j] = precision[j][i] = (tp[j] + tp[i]) / (tp[j] + fp[j] + fn[i]) if (tp[j] + tp[i]) > 0 else 0.5 recall[i][j] = recall[j][i] = (tp[j] + tp[i]) / (tp[j] + fn[i]) if (tp[j] + fn[i]) > 0 else 0.5 else: continue idxs = np.argsort(recall[:, ::-1], axis=1)[:, ::-1].flatten() max_idx = np.argmax(precision) if precision.any() else None max_recall = recall[idxs, max_idx] if max_idx is not None else None max_precision = precision[idxs, max_idx] if max_idx is not None else None max_fscore = max_precision * max_recall if max_precision and max_recall else None max_idxes = [np.unravel_index(idxs == i, recall.shape) for i in range(len(idxs)) if i != max_idx] if max_idx is not None else [] max_pr = [(precision[r], recall[r], fscore) for r in max_idxes] if max_idxes else [] return max_pr, max_recall, max_precision, max_fscore, max_idxes, cm[:, ::-1].T @ cm[:, ::-1].T == np.eye(2) * n
本文来自投稿,不代表重蔚自留地立场,如若转载,请注明出处https://www.cwhello.com/471226.html
如有侵犯您的合法权益请发邮件951076433@qq.com联系删除