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

提取二分类对应预测概率时触发IndexError索引越界问题求助

问题根源

你混淆了原数据集的全局索引和筛选后子集的局部索引:

  • idx_1是原数据集中标签为1的样本的全局索引列表(比如你的案例里有191个正样本,idx_1就包含这191个样本在原数据中的位置)
  • probs[idx_1, 1]会生成一个长度为191的数组,这个数组的索引是0~190,对应idx_1里的每个样本
  • 但你用原数据的全局索引i(比如194)去访问这个长度仅191的数组,必然触发越界——因为194远大于该数组的最大索引190

举个简单例子:假设idx_1 = [5,10,15],那么probs[idx_1,1]是[probs[5,1], probs[10,1], probs[15,1]],它的索引只有0、1、2。如果i=10(属于idx_1),你写probs[idx_1,1][10],相当于要取这个数组的第10个元素,显然不存在。

正确实现方式

不需要分两类筛选索引,直接利用真实标签和样本的一一对应关系,一行向量化代码就能解决:

probs_per_class = probs[np.arange(len(y_test)), y_test]

如果偏好循环写法,也应该直接基于当前样本的真实标签取值:

probs_per_class = [probs[i, label] for i, label in enumerate(y_test)]

这两种方式都能精准获取每个样本对应真实标签的预测概率,完全避免索引混淆问题,而且适配交叉验证中probs形状变化的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:15:08