如何单独绘制测试集中A数据集样本的分类混淆矩阵
仅统计A来源测试样本分类效果的实现方法
前置准备
你已经完成以下基础工作:
- 读取A.csv、B1.csv、B2.csv、B3.csv、C1.csv、C2.csv、C3.csv共7个源数据集,为每个数据集添加
Dataset列标记数据来源 - 调用
pd.concat()完成全量数据合并,用于二分类(分类标签为Good/Bad)监督模型的训练测试 - 已实现基于seaborn热力图的混淆矩阵绘制函数,支持传入真实标签、预测标签、类别名称输出可视化结果
实现步骤
核心逻辑是拆分数据集时保留来源标记列,待模型输出全量测试集预测结果后,再筛选A来源样本的对应结果做单独评估,全程不要把来源列作为特征输入模型。
- 拆分训练/测试集
拆分阶段仅剔除标签列,保留Dataset列用于后续样本筛选,建议按标签分层拆分保证样本分布一致:
from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestClassifier # 假设合并后的全量数据存放在变量df中,标签列名为label X = df.drop(columns=['label']) y = df['label'] # 按33%比例拆分测试集,固定random_state保证结果可复现 X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.33, random_state=42, stratify=y )
- 构造特征集并训练模型
训练前再剔除Dataset这个非业务特征列,避免模型学习到数据集来源的无关信息:
# 过滤非特征列 train_features = X_train.drop(columns=['Dataset']) test_features = X_test.drop(columns=['Dataset']) # 训练随机森林分类器 rf_clf = RandomForestClassifier(random_state=42) rf_clf.fit(train_features, y_train) # 输出全量测试集预测结果 test_pred_all = rf_clf.predict(test_features)
- 提取A来源测试样本的评估数据
通过布尔索引筛选出测试集中来源为A的样本,匹配对应的真实标签和预测结果:
# 定位A来源测试样本 a_test_mask = X_test['Dataset'] == 'A' # 提取对应真实标签、预测结果 a_true = y_test[a_test_mask] a_pred = test_pred_all[a_test_mask]
- 生成专属混淆矩阵
将a_true、a_pred和类别列表['Good', 'Bad']传入你预定义的混淆矩阵绘制函数,即可得到仅针对A数据集测试样本的分类表现结果。
注意事项
- 不要在拆分数据集前就丢弃
Dataset列,否则拆分后无法定位测试集中的样本来源归属 - 模型训练、推理阶段必须排除
Dataset列,否则会引入数据泄露,导致评估结果不可信 - 分层拆分可以避免A类样本在训练/测试集中分布偏差,保证评估结果稳定
内容的提问来源于stack exchange,提问作者linuxpanther
相关产品推荐
相关产品推荐

