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

Python:导出含预测目标的数据集以构建混淆矩阵计算假阳性值

没问题,这其实是模型评估里非常常规的操作,我给你拆成几步讲清楚,不管你用的是scikit-learn、TensorFlow还是PyTorch,核心逻辑都是通的:先拿到模型的预测结果,把它和真实标签合并成完整数据集,再通过混淆矩阵定位假阳性样本。

核心思路
  1. 获取预测结果:从训练好的模型中得到预测类别(必要时也可以保留预测概率,方便后续分析)
  2. 合并数据集:将真实标签、预测标签(及概率)合并成结构化数据集(比如CSV)
  3. 计算混淆矩阵:通过混淆矩阵明确假阳性的数量,甚至定位到具体的假阳性样本
具体代码示例(以scikit-learn+二分类为例)

假设你已经有训练好的模型model,测试集特征X_test,真实标签y_test(可以是pandas Series或numpy数组)。

1. 导入依赖库

import pandas as pd
from sklearn.metrics import confusion_matrix
import numpy as np

2. 获取预测结果

# 得到预测的类别标签(二分类下是0/1,多分类是对应类别编号)
y_pred = model.predict(X_test)

# 可选:获取正类的预测概率(方便分析假阳性的置信度)
y_pred_proba = model.predict_proba(X_test)[:, 1]  # 二分类取第2列(索引1)的概率

3. 合并并导出完整数据集

把真实标签、预测结果整合到DataFrame,然后导出成CSV文件:

# 构建结果数据集
result_df = pd.DataFrame({
    '真实标签': y_test,
    '预测标签': y_pred,
    '正类预测概率': y_pred_proba  # 可选字段,按需保留
})

# 导出到本地CSV(编码用utf-8-sig避免中文乱码)
result_df.to_csv('模型预测结果数据集.csv', index=False, encoding='utf-8-sig')

4. 计算混淆矩阵并定位假阳性

二分类的混淆矩阵结构是:

[[TN(真阴性), FP(假阳性)],
 [FN(假阴性), TP(真阳性)]]

我们可以直接提取假阳性的数量,甚至筛选出具体的假阳性样本:

# 计算混淆矩阵
cm = confusion_matrix(y_test, y_pred)
# 拆解混淆矩阵的四个值
TN, FP, FN, TP = cm.ravel()

print(f"假阳性样本总数: {FP}")

# 筛选出所有假阳性样本(真实标签为0,预测标签为1)
false_positive_samples = result_df[(result_df['真实标签'] == 0) & (result_df['预测标签'] == 1)]

# 导出假阳性样本到单独文件
false_positive_samples.to_csv('假阳性样本明细.csv', index=False, encoding='utf-8-sig')
多分类场景的调整

如果是多分类任务,混淆矩阵是n×n的(n为类别数),假阳性指的是真实标签为A,但被预测为非A的其他类别的样本:

# 筛选所有预测错误的样本(即广义的假阳性,按不同类别区分)
all_incorrect_predictions = result_df[result_df['真实标签'] != result_df['预测标签']]

# 按真实标签和预测标签分组统计假阳性数量
fp_by_class = all_incorrect_predictions.groupby(['真实标签', '预测标签']).size()
print("各类别间的假阳性统计:\n", fp_by_class)

# 导出所有错误预测样本
all_incorrect_predictions.to_csv('多分类错误预测样本.csv', index=False, encoding='utf-8-sig')
其他框架的小差异

如果用的是TensorFlow或PyTorch,获取预测结果的方式略有不同:

  • TensorFlow/Keras:
    # 获取预测概率
    y_pred_proba = model.predict(X_test)
    # 转成类别标签
    y_pred = np.argmax(y_pred_proba, axis=1)
    
  • PyTorch:
    # 注意先把模型设为评估模式
    model.eval()
    # 关闭梯度计算
    with torch.no_grad():
        y_pred_proba = model(X_test_tensor)
        y_pred = torch.argmax(y_pred_proba, dim=1).numpy()  # 转成numpy数组
    

之后的合并数据集、计算混淆矩阵步骤和上面一致。

注意事项
  • 导出CSV时,若数据中有中文,务必用encoding='utf-8-sig'编码,避免打开时乱码;
  • scikit-learn的confusion_matrix默认按y_test中出现的类别顺序排列,若要指定顺序可以用labels参数,比如confusion_matrix(y_test, y_pred, labels=[0,1,2]);
  • 保留预测概率可以帮助你分析假阳性样本的置信度,比如哪些假阳性是模型“很确定”预测错的,哪些是“犹豫”的,这对优化模型很有用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:46:49