解决Bootstrap循环中F1/精确率/召回率恒为1的问题

云伟大大_8421

云伟大大_8421

2026-07-21

620人浏览

原创

解决Bootstrap循环中F1/精确率/召回率恒为1的问题

该问题源于训练-测试数据划分未在每次bootstrap迭代中基于重采样数据执行,导致模型始终在原始固定数据上训练和评估,若原始标签分布单一或存在数据泄露,将产生虚假的100%指标。

该问题源于训练-测试数据划分未在每次bootstrap迭代中基于重采样数据执行,导致模型始终在原始固定数据上训练和评估,若原始标签分布单一或存在数据泄露,将产生虚假的100%指标。

在使用Bootstrap评估分类器性能时,一个常见但隐蔽的错误是混淆了重采样目标与实际建模数据。你提供的代码中,核心问题在于:

chosen_rows = np.random.choice(numb_rows, replace=True, size=numb_rows)
bootstrap_sample = data.iloc[chosen_rows]  # ← 此样本未被用于后续建模!
...
X_train, X_test, Y_train, Y_test = train_test_split(x, y, test_size=0.2, random_state=1)  # ← 仍用原始x/y!

✅ 关键错误:bootstrap_sample 被生成却未参与模型训练;train_test_split 始终对原始 x 和 y 划分——这意味着每次循环都在同一份静态数据上重复训练和测试。若原始 y 标签高度不平衡(如全为同一类)、或模型在该固定数据集上过拟合(如决策树未剪枝且样本量小),就极易输出 precision=recall=f1=1.0。

? 正确做法:Bootstrap的核心是「对观测单元(样本行)重采样 → 在重采样子集上完整拟合并评估模型」。因此,x 和 y 必须同步从 bootstrap_sample 中提取,并确保 train_test_split 作用于该重采样数据:

VPS Bootstrap
VPS Bootstrap

从零启动全新 VPS,完成 OpenClaw 完整部署,包括备份/恢复及恢复后验证。用于 OpenClaw 部署。

下载
for k in range(Nboot):
    # 1. 重采样原始数据索引(假设data包含x和y)
    chosen_rows = np.random.choice(len(data), replace=True, size=len(data))
    bootstrap_sample = data.iloc[chosen_rows].copy()

    # 2. 从重采样数据中分离特征与标签(需确保data结构合理)
    X_boot = bootstrap_sample.drop(columns=['target']).values  # 替换'target'为你的标签列名
    y_boot = bootstrap_sample['target'].values

    # 3. 在重采样数据上划分训练/测试集(注意:test_size应适中,避免过小导致评估不稳定)
    X_train, X_test, Y_train, Y_test = train_test_split(
        X_boot, y_boot, test_size=0.2, random_state=42 + k  # 每次random_state不同,避免重复划分
    )

    # 4. 训练、预测、评估(保持average="macro"一致性)
    model = DecisionTreeClassifier(random_state=42 + k).fit(X_train, Y_train)
    y_pred = model.predict(X_test)

    precision.append(metrics.precision_score(Y_test, y_pred, average="macro", zero_division=0))
    recall.append(metrics.recall_score(Y_test, y_pred, average="macro", zero_division=0))
    f1.append(metrics.f1_score(Y_test, y_pred, average="macro", zero_division=0))
    models.append(model)

⚠️ 必须检查的前置条件:

  • y 必须作为函数参数显式传入(原代码缺失),且不能是常量数组(如 np.ones(n));
  • data 需包含完整特征+标签,或确保 x/y 与 bootstrap_sample 行索引严格对齐;
  • 若 y 中某类在某个 Bootstrap 子集中完全缺失,precision_score 等会报 UndefinedMetricWarning;建议添加 zero_division=0 参数避免中断;
  • random_state 在 train_test_split 中不应固定为 1(否则每次划分完全相同),应随循环变化(如 42 + k)或设为 None。

? 总结:Bootstrap评估的有效性依赖于「每次迭代独立重采样→独立建模→独立评估」的闭环。任何跳过重采样数据、复用原始数据的行为,都会使指标失去统计意义。调试时,可打印 np.unique(y_boot) 和 len(Y_train), len(Y_test) 验证每次迭代的数据多样性。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Python 机器学习入门与 Scikit-Learn 实战
Python 机器学习入门与 Scikit-Learn 实战

面向机器学习初学者,以 Scikit-Learn 为核心工具,讲解机器学习基本概念(监督学习/无监督学习/模型评估)、数据预处理(标准化/归一化/缺失值填充/特征编码)、常用分类算法(逻辑回归/决策树/随机森林/SVM/KNN)、回归算法(线性回归/岭回归/Lasso)、无监督聚类(K-Means/DBSCAN)、交叉验证与超参数调优(GridSearch/RandomSearch)、混淆矩阵与 ROC/AUC 模型评估指标,帮助开发者

2026.04.24

335

29

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

2026.09.30

80

10

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

2026.09.30

80

14

LLVM IR中间表示入门指南
LLVM IR中间表示入门指南

本专题整理LLVM IR的核心概念,包括中间表示作用、模块结构、函数、基本块、SSA形式、类型系统和常见语法,帮助新手理解LLVM编译流程中的关键层。

2026.09.30

40

12

PDF转图片方法
PDF转图片方法

需要把 PDF 页面用于上传、预览、分享或图片归档时,PDF 转图片方法专题整理 JPG/PNG 格式选择、逐页导出、清晰度设置、批量下载和结果检查等流程,帮助用户稳定完成 PDF 图片化处理。

2026.09.30

40

26

PixTV AI视频生成与无限画布创作
PixTV AI视频生成与无限画布创作

PixTV专题整理AI视频与视觉内容创作相关功能使用教程,涵盖AI生图、视频生成、无限画布、多模型创作、素材管理、声音音乐及视频剪辑等功能,帮助用户快速掌握PixTV从创意到成片的完整制作方法。

2026.09.29

60

15

Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

280

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

160

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

120

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Bootstrap5 入门教程
Bootstrap5 入门教程

共0课时 | 0人学习

Bootstrap Components 组件文档
Bootstrap Components 组件文档

共0课时 | 0人学习

Bootstrap Grid 栅格系统
Bootstrap Grid 栅格系统

共0课时 | 0人学习