网站推广.NET

网站推广.NET

什么是pr查询

来源:互联网

什么是PR查询,掌握PR查询方法

1. PR查询简介

PR(Precision-Recall)是一种用于评估分类模型性能的指标,主要用于衡量模型在召回率(Recall)和精确度(Precision)之间的平衡,PR查询是指通过计算不同阈值下的PR值,来确定最佳阈值的方法,这种方法可以帮助我们找到一个既能满足精确度要求,又能达到较高召回率的阈值。

2. PR查询方法

PR查询主要包括以下几个步骤:

2.1 准备数据

我们需要准备一个包含真实标签和预测标签的数据集,数据集通常是一个二维数组,其中每一行表示一个样本,第一列是真实标签,第二列是预测标签。

import numpy as npdata = 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
pr查询