You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多分类文本分类:无循环高效获取Top3预测概率及对应类别

获取多类别文本分类中概率最高的前3个预测结果(无循环高效实现)

嘿,我来帮你搞定这个需求!你现在已经能拿到单条样本的最高概率类别了,要获取前3个概率最高的结果及其对应类别,完全不需要用循环,借助NumPy的向量操作就能高效完成,这里有两种实用方法供你选:

方法1:用argsort(简单直观)

你之前已经用到了argsort,其实只需要调整索引,取每个样本排序后的最后3个位置就行——因为argsort默认是升序排列,末尾的就是概率最大的:

import numpy as np
from sklearn.metrics import accuracy_score

# 先获取所有类别的概率矩阵
probabilities = classifier.predict_proba(X_test)

# 对每个样本的概率进行升序排序,得到索引矩阵
order = np.argsort(probabilities, axis=1)

# 取每个样本最后3个索引(对应概率最高的3个类别),倒序后让概率从高到低排列
top3_indices = order[:, -3:][:, ::-1]

# 获取对应的类别
top3_classes = classifier.classes_[top3_indices]

# 获取对应的概率值,同样倒序保证从高到低
top3_probs = probabilities[np.arange(probabilities.shape[0])[:, None], top3_indices]

# 验证最高概率类别的准确率(和你原来的逻辑一致)
top1_classes = classifier.classes_[order[:, -1]]
print(accuracy_score(top1_classes, y_test))

方法2:用argpartition(更高效,适合类别数多的场景)

如果你的分类任务类别数量很大,argsort会对所有类别概率全排序,有点浪费算力。argpartition只需要把前k个最大的元素放到对应位置,不需要全排序,效率会更高:

import numpy as np
from sklearn.metrics import accuracy_score

probabilities = classifier.predict_proba(X_test)
k = 3

# 找到每个样本中概率最大的k个元素的索引
top3_indices_part = np.argpartition(-probabilities, k, axis=1)[:, :k]

# argpartition不会给这k个元素排序,所以对每个样本的这k个概率再排序,保证从高到低
top3_sorted_indices = np.argsort(-probabilities[np.arange(probabilities.shape[0])[:, None], top3_indices_part], axis=1)

# 得到最终按概率从高到低排列的索引
top3_indices = top3_indices_part[np.arange(probabilities.shape[0])[:, None], top3_sorted_indices]

# 获取对应的类别和概率
top3_classes = classifier.classes_[top3_indices]
top3_probs = probabilities[np.arange(probabilities.shape[0])[:, None], top3_indices]

# 验证top1准确率
top1_classes = classifier.classes_[top3_indices[:, 0]]
print(accuracy_score(top1_classes, y_test))

小提示

  • 两种方法都是纯向量操作,没有循环,效率拉满
  • 如果类别数不多(比如10个以内),argsort和argpartition性能差不多,选哪个都行;如果类别数很多(比如上百个),优先选argpartition
  • 直接打印top3_classes和top3_probs就能看到结果,每个样本对应一个长度为3的数组,分别是概率从高到低的类别和对应概率值

内容的提问来源于stack exchange,提问作者Poornesh V

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:18:57