Python实现Top-K准确率算法详解
本文介绍如何在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算法的实例分享完毕,希望能为读者提供参考,欢迎大家继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













