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

如何针对非平衡数据集计算分层K折交叉验证的假阳性率(FPR)

要实现在分层K折交叉验证中计算假阳性率(FPR),你只需要自定义FPR的评分函数,添加到现有scoring字典即可,具体实现如下:

实现步骤

  • 首先自定义FPR计算函数:FPR的计算公式为 假阳性样本数 / (假阳性样本数 + 真阴性样本数),我们可以借助sklearn的混淆矩阵接口计算
  • 用make_scorer包装自定义的FPR函数,加入到现有的评分字典中
  • 运行交叉验证即可同时返回FPR的每折结果

完整修改后代码

# 新增导入混淆矩阵接口和决策树分类器(原代码漏了决策树的导入)
from sklearn.metrics import make_scorer, accuracy_score, precision_score, recall_score, f1_score, confusion_matrix
from sklearn.model_selection import StratifiedKFold
from sklearn.model_selection import cross_validate
from sklearn.tree import DecisionTreeClassifier

# 自定义FPR评分函数,增加除零保护避免特殊样本分布报错
def false_positive_rate(y_true, y_pred):
    tn, fp, fn, tp = confusion_matrix(y_true, y_pred).ravel()
    denominator = fp + tn
    if denominator == 0:
        return 0.0
    return fp / denominator

scoring = {'accuracy' : make_scorer(accuracy_score), 
           'precision' : make_scorer(precision_score),
           'recall' : make_scorer(recall_score), 
           'f1_score' : make_scorer(f1_score),
           # 新增FPR评分项
           'fpr': make_scorer(false_positive_rate)}

skfold = StratifiedKFold(n_splits=10)
dt_clf = DecisionTreeClassifier()

results = cross_validate(estimator=dt_clf,
                      X=data_train_X,
                      y=target_train_Y,
                      cv=skfold,
                      scoring=scoring)
print("Results", results)
# 可单独调取每折FPR结果
print("每折FPR结果:", results['test_fpr'])
# 查看10折平均FPR
print("平均FPR:", results['test_fpr'].mean())

多分类场景适配说明

如果是多分类任务,只需要修改自定义FPR函数的计算逻辑,根据需求指定平均方式(宏平均、微平均、加权平均)、对应类别标签即可。

内容的提问来源于stack exchange,提问作者Arun Kumar Dey

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:24:07