如何使用Numpy从y_true与y_pred生成假阳性的独热编码掩码?
生成假阳性类别的独热编码数组
问题背景
给定真实标签数组和预测标签数组:
y_true = np.array([5,6,7,5]) y_pred = np.array([5,7,7,5])
需要针对类别5、6、7生成对应假阳性的独热编码数组,最终输出维度为(3,4),其中每一行对应一个类别的假阳性标记(1表示该位置是对应类别的假阳性,0表示不是)。
实现代码
import numpy as np y_true = np.array([5,6,7,5]) y_pred = np.array([5,7,7,5]) # 定义目标类别集合 classes = np.array([5,6,7]) # 初始化结果数组,形状为(类别数, 样本数) false_positive_arr = np.zeros((len(classes), len(y_true)), dtype=int) # 遍历每个类别,生成对应假阳性标记 for idx, cls in enumerate(classes): # 假阳性判定:预测为当前类别,但真实标签不是当前类别 fp_mask = (y_pred == cls) & (y_true != cls) # 将布尔掩码转为整数数组,存入结果对应行 false_positive_arr[idx] = fp_mask.astype(int) # 按要求格式输出每个类别的结果 for cls_name, fp_list in zip([f"y_falsep_class{c}" for c in classes], false_positive_arr): print(f"{cls_name}: {fp_list.tolist()}") # 验证结果维度 print(f"\n结果数组维度: {false_positive_arr.shape}")
输出结果
运行代码后会得到:
y_falsep_class5: [0, 0, 0, 0] y_falsep_class6: [0, 0, 0, 0] y_falsep_class7: [0, 1, 0, 0] 结果数组维度: (3, 4)
逻辑说明
- 假阳性的判定逻辑:对于某一类别,当预测值等于该类别,但真实值不等于该类别时,该位置标记为1,否则为0
- 通过遍历每个类别生成对应掩码,再将掩码转为整数数组,最终组合成要求的形状
内容的提问来源于stack exchange,提问作者Muhammad Ikhwan Perwira
相关产品推荐
相关产品推荐

