计算Top K准确率和召回率的Python实现

266 篇文章 ¥59.90 ¥99.00
本文介绍了如何使用Python计算信息检索和推荐系统中的Top K准确率和召回率。通过定义一个函数,根据用户的真实评分和推荐结果,计算两者交集并求平均值,得出平均Top K准确率和召回率。示例代码展示了在前3个推荐结果中,平均准确率为95.83%,召回率为93.33%。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

计算Top K准确率和召回率的Python实现

在信息检索和推荐系统中,评估模型的性能是非常重要的。其中,Top K准确率和召回率是常用的评估指标之一。本文将介绍如何使用Python计算Top K准确率和召回率,并提供相应的源代码。

首先,我们需要明确Top K准确率和召回率的定义。Top K准确率是指在前K个推荐结果中,有多少比例是正确的;而召回率是指在所有正确的结果中,有多少比例被推荐出来了。

接下来,我们将给出计算Top K准确率和召回率的Python实现。假设我们有一个用户对物品的真实评分和推荐模型给出的前K个推荐物品。我们可以通过以下步骤来计算Top K准确率和召回率:

首先,我们需要导入必要的库:

import numpy as np

接下来,我们定义一个函数来计算Top K准确率和召回率:

def calculate_topk_precision_recall
### Top-K Accuracy 的定义 Top-K 准确率是一种衡量模型性能的指标,尤其适用于多类别分类任务。它表示预测结果中前 K 个最高概率的类别是否包含真实标签的概率。具体来说,在一个样本集中,如果某个样本的真实标签位于模型预测的前 K 个高概率类别之中,则认为该样本被正确分类。 其公式可描述如下: \[ \text{Accuracy}_{\text{top-k}} = \frac{\text{Number of samples where true label is in top } k}{\text{Total number of samples}} \] 其中 \(k\) 是指定的数量,通常取值为 1 或更大的整数值。 --- ### PyTorch 中实现 Top-K Accuracy 的方法 在 PyTorch 中可以通过 `torch.topk` 方法高效地提取每行的最大值及其索引位置,并进一步判断这些最大值对应的索引是否匹配目标标签。以下是基于 PyTorch 的实现方式[^1]: ```python import torch def accuracy(output, target, topk=(1,)): """ Computes the accuracy over the k top predictions for the specified values of k. Args: output: Tensor of shape (batch_size, num_classes). target: Tensor of shape (batch_size, ). topk: Tuple of integers specifying which top-k accuracies to compute. Returns: List of tensors containing computed top-k accuracies. """ with torch.no_grad(): maxk = max(topk) batch_size = target.size(0) # 获取每一行最大的maxk个值及其索引 _, pred = output.topk(maxk, dim=1, largest=True, sorted=True) # 转置pred矩阵以便后续操作 pred = pred.t() # 扩展target形状以匹配pred维度并比较两者是否相等 correct = pred.eq(target.view(1, -1).expand_as(pred)) res = [] for k in topk: # 对于当前k值统计有多少样本满足条件 correct_k = correct[:k].reshape(-1).float().sum(dim=0, keepdim=True) # 将准确率转换成百分比形式存储至res列表 res.append(correct_k.mul_(100.0 / batch_size)) return res ``` 此函数接受两个张量作为输入参数:一个是网络输出 logits (`output`);另一个是实际的目标标签(`target`)。通过调用 `.topk()` 提取出每个样例最可能属于哪几个类别之后再逐一验证是否存在真实的类别标记即可完成整个过程。 #### 使用 NumPy 实现 Top-K Accuracy 除了利用深度学习框架外还可以单纯依靠 Numpy 来达成相同目的。下面展示了一个简单的例子来说明如何仅依赖基础库构建类似的评估机制[^3]: ```python import numpy as np a_real = np.array([[1], [2], [1], [3]]) random_score = np.random.rand(4, 5) a_pred_score = random_score / random_score.sum(axis=1).reshape(random_score.shape[0], 1) def top_k_accuracy(real_labels, predicted_scores, k): ''' Calculate top-k classification accuracy using raw scores and real labels Parameters: -real_labels(ndarray): Ground truth integer-encoded class indices per instance -predicted_scores(ndarray): Predicted probability distribution across all classes per instance -k(int): Number indicating how many highest scoring classes should be considered Return(float): Percentage representing proportion correctly classified instances within top-k guesses out total tested ones ''' n_samples = len(real_labels) idx_top_k_preds_per_sample = (-predicted_scores).argsort()[:, :k] matches = [(label.item() in preds.tolist()) for label,preds in zip(real_labels,idx_top_k_preds_per_sample)] acc = sum(matches)/n_samples *100 return round(acc ,2) print(f'Top-1 Acc:{top_k_accuracy(a_real,a_pred_score,k=1)} %') print(f'Top-2 Acc:{top_k_accuracy(a_real,a_pred_score,k=2)} %') ``` 在这里我们先生成了一些模拟数据用于测试我们的自定义度量标准——即给定一组假想出来的评分数组以及它们对应的实际类别编号向量后就可以很方便地得到任意范围内的精确程度了! --- ### 结合 Precision@K Recall@K 进一步分析 尽管单独查看 Top-K Accuracy 可以为用户提供关于整体表现的信息,但在某些情况下还需要更细致地考察不同阈值下的精准性召回情况。此时可以引入 Precision@K Recall@K 概念来进行补充评价[^2]。Precision 表示的是所有被认为是正类别的实例中有多少比例确实是真正的正类别成员;Recall 则反映了全部实际存在的正类别里头有多大份额被成功检测出来了。F1-Score 综合考虑这两方面因素给出平衡后的单一数值代表综合效果的好坏程度。 --- ### 总结 无论是采用高级机器学习工具包还是基本线性代数运算都可以轻松求解出所需的 Top-K Accuracy 值。这对于理解复杂系统内部运作原理或者优化现有解决方案都具有重要意义。同时当面对更加复杂的场景需求时也可以扩展相应的算法逻辑加入更多元化的考量角度从而获得更为全面的认识视角。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值