机器学习超详细实践攻略(23):三板斧干掉样本不均衡问题之3——通过集成学习方法解决样本不均衡

数据不均衡处理四:集成学习 集成学习方法在处理数据不均衡问题时通常能取得较好的效果,可以提高模型的泛化能力和对少数类样本的识别能力。 阅读详情

在这里插入图片描述

一、原理

本文是处理样本不均衡的第三种方法。思路也很简单:从样本量比较多的类别中随机抽取一定数量的样本,与样本量比较小的类别组合在一块儿训练模型。这样会训练出好几个模型,最后在应用时,使用组合的方法(例如投票、加权投票等)产生分类预测结果。例如,若数据集中的正、负样本的比例为1:10。此时可以将负样本随机分为10份(或者每次随机抽取和正样本相同数量的负样本),然后和所有的正样本组成训练集。这样可以得到10个训练集,分别输入模型之后就可以得到10个训练模型。

这种方式其实借鉴了集成学习中的bagging思想,随机森林就是决策时基于这种思想组合而成的。但是因为这种方法要分别训练多个模型,所以耗时比较长。如果等得起,相对于单一模型绝对可以得到一个更好的提升。

小时候看《西游记》,太上老君的炼丹炉里,炼了九九八十一天的仙丹,绝对会比练了七七四十九天的仙丹有更厉害的功效,果然小说来源于生活。

二、实现

在scikit-learn中,有一个BaggingClassifier类,专门用来实现Bagging思想。只是这个包只能对正负样本等比例采样,也就是采样后的正负类别比例和原来数据集正负样本比例是相同,并没有实现我们使采样后正负样本趋于平衡的目的。可喜可贺的是,imblearn包也基于scikit-learn实现了随机森林算法,而且加了一个sampling_strategy参数,来控制自定义采样后正负样本比例,sampling_strategy参数可选参数如下:

  • 浮点数:该数值 = 采样之后的少数类样本数/多数类样本数。需要注意的是,浮点数只能应用在二分类问题中。
  • ’majority’: 只对数量较多的类别进行重新采样
  • ’not minority’: 对除数量较少的类以外的所有类重新采样
  • ’not majority’: 对除数量较多的类以外的所有类重新采样
  • ’all’: 重采样所有类别,类似于scikit-learn中的
  • ’auto’: 和 'not minority’效果相同,也是这个参数的默认值
  • 字典形式:形式为:{类别1:个数1,类别2:个数2}

特别提醒一句:安装这个包使用以下语句:pip install imbalanced-learn,而导入这个包只需要:import imblearn即可。

我们对比一下不加处理的随机森林算法和采样时注重数据集均衡的情况下模型的表现。

1)导入相关的包和生成数据集

from imblearn.ensemble import BalancedRandomForestClassifier #导入imblearn中随机森林包
from sklearn.ensemble import RandomForestClassifier #导入sklearn中的随机森林包
from sklearn.model_selection import train_test_split
from sklearn.metrics import recall_score
import numpy as np
############################ 生成不均衡的分类数据集###########
from sklearn import datasets
X,Y = datasets.make_classification(n_samples = 10000,
                                   n_features = 4,
                                   n_classes = 2,
                                   weights = [0.95,0.05])

train_x,test_x,train_y,test_y = train_test_split(X,Y,test_size=0.1,random_state=0)

这里,我们生成了数据集大小为10000的数据集。

2)sklearn包中的随机森林算法训练模型

###############随机森林实现##################
from sklearn.ensemble import RandomForestClassifier 
RF = RandomForestClassifier(random_state = 66,
                            n_estimators = 100)

RF.fit(train_x, train_y)
y_pred1 = RF.predict(test_x)

print('召回率: ',recall_score(test_y, y_pred1))

输出:

召回率: 0.625

3)imblearn包中的随机森林算法训练模型

eec = EasyEnsembleClassifier(random_state = 66,sampling_strategy = 'not minority',n_estimators = 100)
eec.fit(train_x, train_y) # 

y_pred = eec.predict(test_x)
print('召回率: ',recall_score(test_y, y_pred))

输出:

召回率: 0.9166666666666666

在两个算法中,我们控制其生成了相同的树的棵数,只是第二个随机森林算法中,每次使用所有的少数类样本,然后抽取等量的多数类样本组成训练集进行训练。

可以看到,虽然第二种算法可能因为采样过程更为复杂,所以耗时更长,但是获得了更好的召回率。

如果想训练多个SVM等算法进行集成学习,可以使用imblearn中的ensemble.BalancedBaggingClassifier这个包,可以自己定义子算法。

【注:在0.2版本中,还可以使用imblearn.ensemble.EasyEnsemble这个函数来随机划分数据集,但是这个 函数在0.6版本之后这个函数就已经移除了。】

三、样本极度不平衡的一个新奇的解决思路

对于二分类问题,如果正负样本分布比例极度不平衡,我们可以换一个角度来看待问题:把它看做一分类(One Class Learning)或异常检测(Novelty Detection)问题。

仔细想想,银行业务中的洗钱交易、信用卡中的不良贷款都算是在大多数正常行为中的一些异常行为。这也启示我们,有时候换个角度想想,问题就会有新的解决方案。

而这类异常检测方法的重点不在于捕捉类间的差别,而是找到其中我们关注的一类的特征,不符合这类特征的,都可以算作是另外一类。主要用到的方法是一类SVM(One-class SVM)算法。

One Class SVM 是指你的训练数据只有一类正(或者负)样本的数据, 而没有另外的一类。在这时,你需要学习的实际上你训练数据的边界。而这时不能使用最大化软边缘了,因为你没有两类的数据。模型的训练目标就是找一个离这一类的聚集点比较远的边界。

在scikit-learn中也有One-class SVM的实现,可以参考以下链接:sklearn.svm.OneClassSVM

imblearn官方文档:imblearn官方文档

本系列相关文章

20、解决类别不平衡问题的集成学习方法 本文系统介绍了用于解决类别不平衡问题的多种集成学习方法,涵盖基于提升(Boosting)、装袋(Bagging)以及混合集成方法。详细分析了如EUSBoost、BalancedBoost、SMOTEBagging、RB-Bagging、EasyEnsemble等算法的原理与特点,并通过对比表格和流程图展示了各类方法的适用场景与性能特征。文章还提出了选择合适方法的实际步骤,并探讨了未来在融合技术、自适应机制、可解释性与多目标优化方面的发展趋势,为处理不平衡数据提供了全面的集成学习解决方案。 阅读详情

相关推荐

如何从机器学习大量数据中选择样本

如何从机器学习大量数据中选择样本,How to correctly select a sample from a huge dataset in machine learning。

样本不均衡及其解决办法

1 什么是类别不均衡 类别不平衡(class-imbalance),也叫数据倾斜,数据不平衡,是指分类任务中不同类别的训练样例数目差别很大的情况。 在现实的分类学习任务中,我们经常会遇到类别不平衡,例如广告点击率预测、故障分析、异常检测等;或者在通过拆分法解决多分类问题时,即使原始问题中不同类别的训练样例数目相当,在使用OvR(One vs. Rest)、MvM(Many vs. Many)策略后产生的二分类任务仍然可能出现类别不平衡现象。而标准机器学习算法通常假设不同类别的样本数量大致相似,所以类别不平衡

十三 5532

【CubeMX】STM32G474 HRTIM 互补PWM与死区时间配置实战

本文详细介绍了如何使用STM32CubeMX配置STM32G474的高分辨率定时器HRTIM生成互补PWM波形并精确设置死区时间。通过实战步骤讲解时钟配置、死区计算与高级功能,帮助工程师在电机驱动和电源应用中实现精准控制,避免上下桥臂直通风险。

grpc6streamer的博客 727

sklearn实现随机森林(分类算法)

阿喽哈~小伙伴们,今天我们来唠一唠随机森林 ♣ ♣ ♣随机森林应该是很多小伙伴们在学机器学习算法时最先接触到的集成算法,我们先简单介绍一下集成学习的大家族吧: 在Bagging集成中,需要并行建立多个弱评估器(非线性算法),然后综合多个弱评估器的结果进行输出: 随机森林是bagging家族的代表算法,它的算法思想体现在它的名字上:“随机”和“森林”。首先“森林”是指随机森林的所有基学习器都是决策树,“随机”是指随机从原样本集中抽取样本和特征来训练,并不会使用所有的样本和特征,每棵树独立地有放回抽样,这就保

HRMEMEDA的博客 1万+

利用makehumancommunity导入人体模型到COMSOL里(需要solidwork)

#makehumancommunity #solidwork #COMSOL

qq_41227634的博客 2158

LaTeX双栏浮动结构实战:用dblfloatfix解决跨栏图表排版难题

本文深入探讨了LaTeX双栏浮动结构在学术论文排版中的常见问题,特别是IEEE会议论文中的跨栏图表定位难题。通过介绍dblfloatfix包的整合解决方案,帮助用户实现精准的底部定位和浮动顺序保持,提升排版效率与质量。

weixin_30872499的博客 442

用 Python 处理不平衡数据集

1. 什么是数据不平衡所谓的数据不平衡(imbalanced data)是指数据集中各个类别的数量分布不均衡;不平衡数据在现实任务中十分的常见。如信用卡欺诈数据:99%都是正常的数据, ...

Python中文社区 5174

保姆级教程:在Linux上用IGH EtherCAT主站搞定从站时钟同步(附sync_datagram报文详解)

本文详细介绍了在Linux系统上使用IGH EtherCAT主站实现从站时钟同步的保姆级教程,重点解析了sync_datagram报文的结构和工作原理。通过实战案例和代码示例,帮助开发者掌握微秒级同步精度的实现方法,适用于工业自动化领域的高精度设备协同控制。

weixin_30733003的博客 260

机器学习样本不平衡处理方法

数据样本不平衡处理

hblg_bobo的博客 2051

GAMES101学习-第8课进行shader的初步了解

详细理解课上展示的像素着色器GLSL,以及了解了API、OpenGL、DirectX到底是什么,还有shadertoy这个网站的初步探索。

qq_41835314的博客 1917

【蓝凌表单】JSP组件常用语法整理

【代码】【蓝凌表单】JSP组件常用语法整理。

烧硬盘 708

机器学习超详细实践攻略(22):三板斧干掉样本不均衡问题之2——对正负样本设置不同权重

二、通过正负样本的惩罚权重解决样本不均衡 1、简单粗暴法: 在算法实现过程中,给样本量比较少的类别得到的损失值赋予更高得权重,给样本量较多的类别得到的损失值赋予更低得权重,然后进行说白了就是简单粗暴地为小样本标签增加损失函数的权值,原理很简单。 对于交叉损失函数来说,具体公式在:https://blog.youkuaiyun.com/weixin_42462804/article/details/998210...

u013044310的博客 5152

【OpenClaw从入门到精通】第10篇:OpenClaw生产环境部署全攻略:性能优化+安全加固+监控运维(2026实测版)

本文聚焦OpenClaw从测试环境走向生产环境的核心痛点,围绕“性能优化、安全加固、监控运维”三大维度展开实操讲解。先明确生产环境硬件/系统选型标准,再通过硬件层资源管控、模型调度策略、缓存优化等手段提升响应速度(实测响应效率提升50%+);接着从网络、权限、数据三层构建安全防护体系,集成火山引擎安全方案拦截高危操作;最后落地TenacitOS可视化监控与Prometheus告警体系,配套完整故障排查清单和虚拟实战案例。全文所有配置、代码均经实测验证,兼顾新手入门实操性和进阶读者的生产级部署需求。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 3405

机器学习超详细实践攻略(21):三板斧干掉样本不均衡问题之1——过(欠)采样

想象一下,假如今天是你作为数据分析师入职的第一天,老板交给你一个数据分析任务:通过公司已经有的信用卡用户和交易信息,预测用户未来是否会逾期还款。 这个问题看似简单,实则隐藏了一个非常大的坑:据粗略估计,全国的信用卡平均不良率只有不到1%,也就是说,银行贷出100万,可能只有1万没有办法正常收回,这样,如果你拿到一个信用卡还款数据集,很大可能是这个数据集里有99%的正样本,1%的负样本,在预测的时...

u013044310的博客 3081

Mediatek NeuroPilot Yolov8量化

【代码】Mediatek NeuroPilot Yolov8模型转化。

sdrgtywretyeruet的专栏 345

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

机器学习笔记总结

线性回归模型详解 方差分析 聚类分析 PCA——主成分分析 机器学习笔记一——感知机 机器学习笔记二——k近邻 机器学习笔记三——决策树 机器学习笔记四——SVM 机器学习笔记五——EM算法与高斯混合模型 模型融合之Boosting XGBoost面试题 因果推断学习笔记一 因果推断学习笔记二 因果推断学习笔记三——Uplift模型 ...

TSzero的博客 1759

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

【机器学习】处理样本不均衡问题的方法,样本权重的处理方法及代码

今天学习了关于样本类别分布不均衡的处理的一些知识,在此和大家一起分享一下。 什么是样本类别分布不均衡? 举例说明,在一组样本中不同类别的样本量差异非常大,比如拥有1000条数据样本的数据集中,有一类样本的分类只占有10条,此时属于严重的数据样本分布不均衡。 样本不均衡指的是给定数据集中有的类别数据多,有的数据类别少,且数据占比较多的数据类别样本与占比较小的数据类别样本两者之间达到较大的比例。 样本...

机器学习初学者必看,关注我,一起了解机器学习 3万+

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

类不平衡学习的集成学习方法

来自: 姚新的报告总结(南方科技大学教授) 一、动机     给定一个分类问题,大多数的机器学习方法都会做出如下的假设:          >每一个类具有相同的误分类代价;          > 不同类的数据分布式平衡的;         > 算法的目标是最大化分类的准确率(Accuracy)。      然而,许多实际应用场景的数据每个类别都是不平衡分布的。Accuracy的结果会更

小糖块的博客 2772

不平衡学习(Imbalanced learning)

数据不平衡 在很多真实场景下,数据集往往是不平衡的。也就是说,在数据集中,有一类含有的数据要远远多于其他类的数据(类别分布不平衡)。在这里,我们主要介绍二分类中的类别不平衡问题,对于多类别的不平衡只做简单的介绍。 考虑一个简单的例子,假设我们有一个关于医院患者的数据集(里面包含很多患者的图片),我们把其中患有癌症的病人标记为正例,把健康的患者标记为负例。众所周知,健康的人的数量肯定远远大于癌症...

hren_ron的博客 2万+

机器学习 | 样本不平衡问题处理方法

如何解决样本不平衡问题?2 样本不平衡问题的处理方式2.1 场景2.2 对训练集还是测试集用?还是全量用?2.3 处理方法有哪些? 待补充! 2 样本不平衡问题的处理方式 2.1 场景 最近刚好做的项目是一个二分类问题,全量数据中正负样本比超过了5:1,一般认为超过4:1则是样本不平衡,因此需要进行处理。 2.2 对训练集还是测试集用?还是全量用? 仅针对训练集进行样本不平衡问题的处理,测试集不用...

RUC_Lee的博客 4623

【python实战】使用第三方库imblearn实现不平衡样本的样本均衡问题

本文转自 图不灵的博客,仅个人学习使用,若有侵权可随时删除 链接:https://blog.youkuaiyun.com/qj8380078/article/details/81675442 摘自数据常青藤 样本分布不均衡将导致样本量少的分类所包含的特征过少,并很难从中提取规律;即使得到分类模型,也容易产生过度依赖于有限的数据样本而导致过拟合的问题,当模型应用到新的数据上时,模型的准确性和鲁棒性将很差。 样本...

qq_43614355的博客 1991

机器学习中如何解决样本不均衡的问题?

很多机器学习算法都有一个基本假设,就是数据分布是均匀的。当我们把这些算法直接应用在实际数据中时,大多数情况下都无法取得理想的结果,因为实际数据往往分布的很不均衡,都存在长尾效应。举个例子,大部分(假如是97%以上)的微博的总互动数(包括被转发,评论和点赞数量)都在0~5之间,交互数多的微博(多于100)非常的少,如果我们去预测一条微博交互数所在档位,预测器只需要把所有微博预测为第一档(0-5)就能...

yeelor的专栏 451

样本不平衡的解决方案(很详细)

文章目录1. 样本不平衡的影响2. 可尝试的改进方案2.1 采样2.2 数据增强2.3 loss2.4 模型层面2.5 评估指标 1. 样本不平衡的影响 ​ 举个例子,在广告CTR预估场景中,正负样本的占比可以达到1:500,点击的正样本是少数类,没点击的负样本为多数类。如果直接拿这个比例去训练模型的话,很容易学出一个把所有样本都预测为负的模型,因为喂进去学习的样本大多都是负样本。这种情况下,损失会很低,准确率一般都会很高,比如0.98,但是F1会很低,比如0.01。你可以理解为,模型最终学习的并不是如何

WGS. 1万+

【机器学习】一文解决样本不均衡(全)

一、样本不均衡的介绍 1.1 样本不均衡现象样本(类别)样本不平衡(class-imbalance)指的是分类任务中不同类别的训练样例数目差别很大的情况,一般地,样本类别比例(Imbala...

fengdu78的博客 3826

样本不平衡及处理方法

文章目录1 什么是数据不平衡?2 数据不平衡的解决方法2.1 采样2.2采用k折交叉验证法2.3 采用SVM,决策树算法2.4 使用集成学习   在机器学习和数据挖掘领域,数据不平衡问题是我们拿到数据之后优先需要考虑的问题,如果直接对不平衡的数据进行建模,得到的模型往往也是不具备良好的泛化性的。 1 什么是数据不平衡?   数据不平衡就是指:初始数据的各类别分布不均匀,比如正类负类的比例是99:1。那么对于模型而言,只要它只判定为正,也有99%的正确率。由此就出现了数据不平衡带来的问题。 所以在算法选择之前

weiyaner的博客 1694

基于集成学习的不平衡数据集分类问题研究--文献阅读

参考文献 基于集成学习的不平衡数据集分类问题研究 - 中国知网 https://kns.cnki.net/kcms/detail/detail.aspx?dbcode=CMFD&dbname=CMFD202201&filename=1021697818.nh&uniplatform=NZKPT&v=K9J_5NETTyZXPhDr5D6KwISCv2zm0skRm7rEZ0KmYS0Yv_zs562Re8oiwR5h_ylK 文章总体思路 基础算法: 随机森林与...

Z_W_H_的博客 3272
上一篇: 机器学习超详细实践攻略(22):三板斧干掉样本不均衡问题之2——对正负样本设置不同权重
下一篇: 谷歌强势出手,人工智能学习者有福了,从此数据资产跨入搜索时代!
东写西读李老湿
东写西读李老湿 领域专家: 数据科学与机器学习技术领域 领域专家: 数据科学与机器学习技术领域
博客等级 码龄13年 481粉丝 73原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值