Python中识别并剔除测试集错误样本报错问题求助
问题原因
你用np.flatnonzero拿到的是样本在y_test中的位置索引(从0开始的连续序号),但y_test.drop()默认是按DataFrame的标签索引(也就是你看到的101409、27117这类原始索引值)来删除的,两者不匹配,所以触发KeyError。
解决方案
这里有几种可行的解决方法:
方法1:用布尔索引直接筛选正确样本
跳过获取位置索引的步骤,直接用预测正确的布尔条件筛选,最简洁高效:
# 生成预测正确的布尔掩码 correct_mask = y_predicted_l == y_test # 筛选出预测正确的样本 new_y_test = y_test[correct_mask]
方法2:获取错误样本的标签索引再删除
先通过位置索引拿到对应的原始标签索引,再传给drop方法:
# 从y_test的索引中取出错误样本对应的标签索引 incorrect_labels = y_test.index[f_incorrects] # 根据标签索引删除错误样本 new_y_test = y_test.drop(incorrect_labels, axis=0)
方法3:重置y_test的索引后再删除
如果后续不需要保留原始索引,可以先把y_test的索引重置为连续序号,再按位置删除:
# 重置索引,drop=True会丢弃原来的索引列 y_test_reset = y_test.reset_index(drop=True) # 现在可以直接用f_incorrects删除错误样本 new_y_test = y_test_reset.drop(f_incorrects, axis=0)
内容的提问来源于stack exchange,提问作者SLA
相关产品推荐
相关产品推荐

