当前位置: 首页 > article >正文

机器学习不平衡分类问题:重采样技术详解与实践

1. 不平衡分类问题概述在机器学习实践中我们经常会遇到类别分布严重不均衡的数据集。比如在信用卡欺诈检测中正常交易可能占99.9%而欺诈交易仅占0.1%。这种极端不平衡的数据分布会给模型训练带来显著挑战。传统分类算法在这种场景下往往表现不佳因为它们默认假设类别分布大致平衡并且以整体准确率为优化目标。在不平衡数据上一个简单的总是预测多数类的策略就能获得很高的准确率但这显然不是我们想要的结果。关键问题当少数类样本不足时模型难以学习到有效的分类边界导致对少数类的识别率召回率极低。2. 重采样技术基础原理2.1 过采样技术过采样通过增加少数类样本来平衡数据集主要有两种方式随机过采样简单复制少数类样本优点实现简单不引入新信息缺点容易导致过拟合因为完全相同的样本被多次使用SMOTE合成少数类过采样技术工作原理对每个少数类样本x从其k近邻中随机选择一个样本x然后在x和x的连线上随机生成新样本数学表达x_new x λ(x - x)其中λ∈[0,1]是随机数优势增加了样本多样性缓解了过拟合问题2.2 欠采样技术欠采样通过减少多数类样本来平衡数据集常见方法包括随机欠采样随机删除多数类样本优点简单高效缺点可能丢失重要信息Tomek Links定义如果两个不同类样本互为最近邻则构成一个Tomek Link作用移除这些边界样本可以使分类边界更清晰ENN编辑最近邻方法移除那些被其k近邻多数误分类的样本效果能有效清理噪声数据和边界模糊样本3. 组合采样技术详解3.1 为什么需要组合采样单独使用过采样或欠采样各有局限单纯过采样可能导致模型对少数类过拟合单纯欠采样可能丢失多数类的重要信息组合两者可以发挥各自优势先过采样少数类确保有足够样本学习决策边界再欠采样多数类去除噪声和冗余样本3.2 手动组合实现使用imbalanced-learn库的Pipeline可以灵活组合各种采样方法from imblearn.pipeline import Pipeline from imblearn.over_sampling import SMOTE from imblearn.under_sampling import RandomUnderSampler # 定义模型和采样策略 model DecisionTreeClassifier() over SMOTE(sampling_strategy0.1) # 少数类增加到多数类的10% under RandomUnderSampler(sampling_strategy0.5) # 多数类减少到少数类的2倍 # 构建管道先过采样→再欠采样→最后建模 pipeline Pipeline(steps[ (over, over), (under, under), (model, model) ])3.3 参数调优经验采样比例选择过采样比例通常设为0.1-0.5相对多数类的比例欠采样后多数类样本数建议是少数类的1.5-2倍可通过网格搜索寻找最优比例SMOTE的k近邻参数默认k5对于高维数据可适当增大使用k折交叉验证避免过拟合与模型参数的协同决策树的max_depth需要与采样比例配合调整逻辑回归需要适当增加正则化强度4. 预定义组合方法实践4.1 SMOTETomek 实现from imblearn.combine import SMOTETomek # 默认配置SMOTE平衡后移除所有类的Tomek links resampler SMOTETomek(tomekTomekLinks(sampling_strategyall)) # 替代配置只移除多数类的Tomek links更保守 resampler SMOTETomek(tomekTomekLinks(sampling_strategymajority))4.2 SMOTEENN 实现from imblearn.combine import SMOTEENN from imblearn.under_sampling import EditedNearestNeighbours # 默认配置SMOTE平衡后ENN清理所有类 resampler SMOTEENN() # 替代配置ENN只清理多数类 resampler SMOTEENN(ennEditedNearestNeighbours(sampling_strategymajority))4.3 性能对比实验我们在一个1:100的极端不平衡数据集上测试不同方法10折交叉验证重复3次方法平均ROC AUC训练时间(s)基准模型0.7621.2随机过欠采样0.8143.5SMOTE随机欠采样0.8335.1SMOTETomek0.8156.8SMOTEENN0.8297.2从结果可以看出所有重采样方法都提升了模型性能SMOTE随机欠采样取得了最好效果SMOTEENN虽然计算成本较高但性能稳定5. 实际应用中的注意事项5.1 数据泄露问题在交叉验证中必须确保采样只在训练折叠中进行from sklearn.model_selection import cross_val_score # 错误做法先全局采样再交叉验证 X_resampled, y_resampled resampler.fit_resample(X, y) # 会导致数据泄露 scores cross_val_score(model, X_resampled, y_resampled, cvcv) # 正确做法将采样器放入Pipeline pipeline Pipeline([(resampler, resampler), (model, model)]) scores cross_val_score(pipeline, X, y, cvcv)5.2 类别权重替代方案对于计算资源有限的情况可以考虑使用类别权重代替采样# 决策树中的类别加权 model DecisionTreeClassifier(class_weightbalanced) # 逻辑回归中的类别加权 model LogisticRegression(class_weight{0:1, 1:10})5.3 高维数据特殊处理当特征维度很高时如文本数据需要调整SMOTE策略先使用PCA/T-SNE降维后再应用SMOTE增大SMOTE的k近邻参数如k10使用SMOTE变体如Borderline-SMOTE6. 进阶技巧与优化方向6.1 动态采样策略根据模型训练过程中的表现动态调整采样比例from imblearn.pipeline import Pipeline from sklearn.model_selection import GridSearchCV param_grid { resampler__sampling_strategy: [0.1, 0.2, 0.3], model__max_depth: [3, 5, 7] } pipeline Pipeline([ (resampler, SMOTE()), (model, DecisionTreeClassifier()) ]) grid GridSearchCV(pipeline, param_grid, scoringroc_auc) grid.fit(X, y)6.2 集成学习方法结合采样技术与集成学习from imblearn.ensemble import BalancedRandomForestClassifier model BalancedRandomForestClassifier( n_estimators100, sampling_strategyauto, replacementTrue )6.3 自定义采样策略实现自定义的采样逻辑from imblearn.base import BaseSampler class MySampler(BaseSampler): def _fit_resample(self, X, y): # 自定义采样逻辑 return X_resampled, y_resampled7. 不同场景下的方案选择根据数据特点和业务需求选择合适策略计算资源充足使用SMOTEENN组合配合网格搜索优化参数考虑集成方法实时性要求高简单随机过采样欠采样使用类别权重替代采样选择线性模型极端不平衡1%分层采样确保少数类代表使用ADASYN替代SMOTE考虑异常检测算法在实际项目中我通常会先尝试SMOTE随机欠采样的组合因为它通常在效果和效率之间取得了不错的平衡。对于特别关键的应用则会进行更全面的方法比较和参数调优。

相关文章:

机器学习不平衡分类问题:重采样技术详解与实践

1. 不平衡分类问题概述在机器学习实践中,我们经常会遇到类别分布严重不均衡的数据集。比如在信用卡欺诈检测中,正常交易可能占99.9%,而欺诈交易仅占0.1%。这种极端不平衡的数据分布会给模型训练带来显著挑战。传统分类算法在这种场景下往往表…...

汉字拆字终极指南:如何用Python库hanzi_chaizi轻松掌握汉字结构

汉字拆字终极指南:如何用Python库hanzi_chaizi轻松掌握汉字结构 【免费下载链接】hanzi_chaizi 汉字拆字库,可以将汉字拆解成偏旁部首,在机器学习中作为汉字的字形特征 | Hanzi Decomposition Library allows Chinese characters to be broke…...

告别Kaggle依赖:手把手教你将Gemma-PyTorch项目与本地模型权重成功‘联姻’

告别Kaggle依赖:手把手教你将Gemma-PyTorch项目与本地模型权重成功‘联姻’ 在开源大模型生态中,Google的Gemma系列因其优秀的性能和开放的权重许可备受开发者关注。然而,许多尝试本地部署Gemma的开发者都会遇到一个典型困境:官方…...

从地震速度谱到层速度剖面:手把手教你用Dix公式搞定储层预测

从地震速度谱到层速度剖面:手把手教你用Dix公式搞定储层预测 地震勘探的核心在于揭示地下结构,而速度参数则是连接时间域与深度域的桥梁。想象一下,当你面对一片未知的地下区域,如何通过地震数据解读出岩性分布?层速度…...

sklearn的PolynomialFeatures参数全解析:interaction_only和include_bias到底该怎么用?附真实数据集案例

PolynomialFeatures参数深度实战:如何用interaction_only和include_bias优化模型表现 在房价预测项目中,当我们试图用房屋面积和卧室数量来预测价格时,发现简单的线性关系无法捕捉真实数据中的复杂模式。这时多项式特征扩展成为救命稻草——但…...

Display Driver Uninstaller:彻底解决显卡驱动问题的终极方案

Display Driver Uninstaller:彻底解决显卡驱动问题的终极方案 【免费下载链接】display-drivers-uninstaller Display Driver Uninstaller (DDU) a driver removal utility / cleaner utility 项目地址: https://gitcode.com/gh_mirrors/di/display-drivers-unins…...

Snap.Hutao原神工具箱终极指南:从新手到高手的完整进阶路线

Snap.Hutao原神工具箱终极指南:从新手到高手的完整进阶路线 【免费下载链接】Snap.Hutao 实用的开源多功能原神工具箱 🧰 / Multifunctional Open-Source Genshin Impact Toolkit 🧰 项目地址: https://gitcode.com/GitHub_Trending/sn/Sna…...

2026年4月26日:强降雨、金融新规、A股监管升级与DeepSeek V4发布

🔥 个人主页: 杨利杰YJlio ❄️ 个人专栏: 《Sysinternals实战教程》 《Windows PowerShell 实战》 《WINDOWS教程》 《IOS教程》 《微信助手》 《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》 🌟 让…...

Applera1n 终极指南:iOS 15-16 iCloud 解锁完整教程

Applera1n 终极指南:iOS 15-16 iCloud 解锁完整教程 【免费下载链接】applera1n icloud bypass for ios 15-16 项目地址: https://gitcode.com/gh_mirrors/ap/applera1n 你是否有一台 iPhone 或 iPad 因为忘记 Apple ID 密码而被锁定?或者购买了一…...

别再重装系统了!双系统丢失Ubuntu启动项的终极修复指南:从Grub命令到BIOS设置

双系统启动修复全攻略:从Grub救援到BIOS调优的完整方案 当Windows与Ubuntu双系统遭遇启动项丢失,多数用户的第一反应往往是重装系统。但每次重装都意味着数小时的配置还原和数据风险。本文将揭示引导修复的底层逻辑,并提供一套从Grub命令行操…...

保姆级教程:在AutoSar CP架构下为CAN报文配置SecOC(基于Davinci Configurator)

实战指南:基于Davinci Configurator的AutoSar CP架构SecOC配置全解析 在汽车电子领域,信息安全已成为功能安全之外的另一大核心诉求。随着车载网络攻击面不断扩大,传统CAN总线"裸奔"式的通信方式正面临严峻挑战。作为AutoSar标准中…...

从零开始:如何用开源工具为小米穿戴设备设计个性化表盘?

从零开始:如何用开源工具为小米穿戴设备设计个性化表盘? 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 你是否曾想过为自己的小米手表…...

Ollama GUI深度解析:构建现代本地大语言模型交互界面的架构实践指南

Ollama GUI深度解析:构建现代本地大语言模型交互界面的架构实践指南 【免费下载链接】ollama-gui A Web Interface for chatting with your local LLMs via the ollama API 项目地址: https://gitcode.com/gh_mirrors/ol/ollama-gui Ollama GUI是一款基于Vue…...

如何在macOS上解锁Xbox手柄的完整游戏体验:360Controller驱动终极指南

如何在macOS上解锁Xbox手柄的完整游戏体验:360Controller驱动终极指南 【免费下载链接】360Controller TattieBogle Xbox 360 Driver (with improvements) 项目地址: https://gitcode.com/gh_mirrors/36/360Controller 还在为macOS上Xbox手柄连接不稳定、按键…...

3分钟掌握截图文字识别:Umi-OCR新手快速上手指南

3分钟掌握截图文字识别:Umi-OCR新手快速上手指南 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。…...

CefFlashBrowser:Windows平台Flash内容兼容性解决方案技术指南

CefFlashBrowser:Windows平台Flash内容兼容性解决方案技术指南 【免费下载链接】CefFlashBrowser Flash浏览器 / Flash Browser 项目地址: https://gitcode.com/gh_mirrors/ce/CefFlashBrowser 随着Adobe停止对Flash Player的技术支持,大量基于Fl…...

96%→100% 精度!YOLO-LSTM 新框架,刷新视频人体行为识别天花板

点击蓝字关注我们关注并星标从此不迷路计算机视觉研究院公众号ID|计算机视觉研究院学习群|扫码在主页获取加入方式https://pmc.ncbi.nlm.nih.gov/articles/PMC12084357/pdf/41598_2025_Article_1898.pdf计算机视觉研究院专栏Column of Computer Vision I…...

多智能体协作框架AgentVerse:从原理到实战的范式跃迁

1. 项目概述:从“单兵作战”到“多智能体协同”的范式跃迁在人工智能领域,尤其是大语言模型驱动的智能体开发中,我们正经历一个有趣的转变。过去,我们习惯于构建一个“全能”的智能体,试图让它理解所有指令、掌握所有工…...

终极护眼指南:如何为全网网站一键开启深色模式

终极护眼指南:如何为全网网站一键开启深色模式 【免费下载链接】darkreader Dark Reader Chrome and Firefox extension 项目地址: https://gitcode.com/gh_mirrors/da/darkreader 深夜刷网页眼睛酸痛?白天看屏幕强光刺眼?今天我要为你…...

【SCI一区】Matlab实现天鹰优化算法AO-CNN-LSTM-Attention的风电功率预测算法研究

🔥 内容介绍风电功率预测是风电场安全稳定运行的关键环节之一。本文提出了一种基于天鹰优化算法 (AO) 优化的卷积神经网络 (CNN)-长短期记忆网络 (LSTM)-注意力机制 (Attention) 的风电功率预测模型 (AO-CNN-LSTM-Attention)。该模型利用 CNN 提取风电功率时间序列的…...

探索Refined Now Playing:重新定义网易云音乐的美学播放体验

探索Refined Now Playing:重新定义网易云音乐的美学播放体验 【免费下载链接】refined-now-playing-netease 🎵 网易云音乐沉浸式播放界面、歌词动画 - BetterNCM 插件 项目地址: https://gitcode.com/gh_mirrors/re/refined-now-playing-netease …...

解放双手!E7Helper第七史诗自动化助手完全指南

解放双手!E7Helper第七史诗自动化助手完全指南 【免费下载链接】e7Helper 【Epic Seven Auto Bot】第七史诗多功能覆盖脚本(刷书签🍃,挂讨伐、后记、祭坛✌️,挂JJC等📛,多服务器支持📺&#xf…...

Windows下PHP 8.0开启PDO连接MySQL 8.0保姆级教程(含Docker环境避坑)

Windows下PHP 8.0与MySQL 8.0深度集成实战指南 在Windows开发环境中搭建PHP与MySQL的高效协作平台,是每个全栈开发者必须掌握的技能。随着PHP 8.0的性能飞跃和MySQL 8.0的安全升级,这对黄金组合在本地开发、测试环境中展现出前所未有的潜力。本文将带你…...

从‘KeyError’到成功加载:手把手教你调试ViT权重加载的完整流程(含PyTorch/TensorFlow对比)

从‘KeyError’到成功加载:手把手教你调试ViT权重加载的完整流程(含PyTorch/TensorFlow对比) 当你第一次尝试加载预训练的Vision Transformer(ViT)模型权重时,看到控制台抛出KeyError: Transformer/encoder…...

从‘要我做’到‘我要做’:如何用MAS在团队里打造自驱文化?(避坑指南)

从‘要我做’到‘我要做’:如何用MAS在团队里打造自驱文化?(避坑指南) 当团队陷入"等指令"的被动状态时,创新活力会以可见速度衰减。某互联网产品团队在引入MAS体系半年后,自主提案量增长300%&am…...

终极指南:深度解析MS-DOS 1.25源代码中的操作系统设计密码

终极指南:深度解析MS-DOS 1.25源代码中的操作系统设计密码 【免费下载链接】MS-DOS The original sources of MS-DOS 1.25, 2.0, and 4.0 for reference purposes 项目地址: https://gitcode.com/GitHub_Trending/ms/MS-DOS MS-DOS 1.25源代码为我们揭示了早…...

5个核心技巧:用sd-webui-animatediff打造专业级AI动画视频

5个核心技巧:用sd-webui-animatediff打造专业级AI动画视频 【免费下载链接】sd-webui-animatediff AnimateDiff for AUTOMATIC1111 Stable Diffusion WebUI 项目地址: https://gitcode.com/gh_mirrors/sd/sd-webui-animatediff sd-webui-animatediff 是一款革…...

Nessus插件离线更新保姆级教程(Ubuntu 20.04 + Nessus Pro 10.5.0)

Nessus插件离线更新全流程实战指南(Ubuntu 20.04环境) 当企业内网的安全扫描需求遇上无法直连互联网的服务器环境,Nessus插件的离线更新就成了安全工程师的必修课。去年为某金融机构部署漏洞扫描系统时,我曾在离线更新环节连续遭遇…...

[具身智能-463]:无论语音识别,还是语音合成,为什么不直接在时域波形与文字之间映射,而必须通过中间的频域进行转换?

这是一个非常深刻且直击本质的问题!这触及到了信号处理和深度学习在语音领域的核心逻辑。简单来说,时域波形(Waveform) 就像是“原材料”,杂乱无章且冗余;而频域(Frequency Domain) …...

如何在Windows系统上完美体验苹果触控板:免费开源驱动完整指南

如何在Windows系统上完美体验苹果触控板:免费开源驱动完整指南 【免费下载链接】mac-precision-touchpad Windows Precision Touchpad Driver Implementation for Apple MacBook / Magic Trackpad 项目地址: https://gitcode.com/gh_mirrors/ma/mac-precision-tou…...