Python实现Top-K准确率算法详解

星野
星野
发布时间:2026-10-13 | 4人浏览过
原创

本文介绍如何在Python中计算多分类任务的Top-K准确率。通过自定义算法实现,利用NumPy对预测概率进行排序,提取前K个最高得分的标签,并与真实标签进行匹配判断。文章提供了完整的代码示例,适用于无法直接使用sklearn解决的Top-K指标计算场景,帮助开发者理解并应用该评估指标。

Python Top-K准确率算法实现

为了节省篇幅,这里直接展示核心代码实现。

基础快速排序索引算法


#! conding:utf-8

def quick_index(array, start, end):
 left, right = start, end
 key = array[left]
 while left < right:
  while left < right and array[right] > key:
   right -= 1
  array[left] = array[right]
  while left < right and array[left] < key:
   left += 1
  array[right] = array[left]

 array[left] = key
 return left


def min_num(array, m):
 start, end = 0, len(array) - 1
 index = quick_index(array, start, end)
 while index != m:
  if index < m:
   index = quick_index(array, index+1, end)
  else:
   index = quick_index(array, start, index)

 print(array[:m])

if __name__ == '__main__':
 alist = [15,54, 26, 93, 17, 77, 31, 44, 55, 20]

 min_num(alist, 5)

补充知识:Python中使用NumPy计算Top-K准确率指标

Top-K准确率(Top-K Accuracy)是指在多分类任务中,模型预测得分最高的前K个类别标签里,只要包含真实标签(Ground Truth),该样本的预测结果即视为正确(True)。

以一个包含5个类别的多分类任务为例进行说明。

Top-K匹配逻辑示例


a_real = 1
a_pred = [0.02, 0.23, 0.35, 0.38, 0.02]

#top-1 
a_pred_label = 3 match = False
#top-3
a_pred_label_list = [1, 2, 3] match = True

当K=1时,即为Top-1准确率。

虽然sklearn.metrics提供了标准的accuracy_score计算方法,但它不支持直接计算Top-K准确率,因此需要手动实现相关逻辑。

基于NumPy的Top-K准确率计算代码


#5类:0,1,2,3,4
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)

k = 3 #top-3
#以下是计算方法
max_k_preds = a_pred_score.argsort(axis=1)[:, -k:][:, ::-1] #得到top-k label
match_array = np.logical_or.reduce(max_k_preds==a_real, axis=1) #得到匹配结果
topk_acc_score = match_array.sum() / match_array.shape[0]

以上关于Python Top-K算法的实例分享完毕,希望能为读者提供参考,欢迎大家继续支持本站。

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表