第34步 机器学习实战DLC:不平衡数据处理(上)

这篇具有很好参考价值的文章主要介绍了第34步 机器学习实战DLC:不平衡数据处理(上)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

失踪人口回归的第一期,来说一说不平衡数据。

一、不平衡数据的概念

什么是不平衡数据?我们先来看看小Chat怎么说的:

第34步 机器学习实战DLC:不平衡数据处理(上) 顾名思义,就是你的因变量1和0的样本数差距有点大,大到影响了模型性能。举个栗子,一个盒子里有100个红球,10个黄球,我们随机盲抽一个球,然后猜颜色,你会怎么猜?是不是无脑猜红球就得了。这么训练的话,模型永远达不到我们的要求。

二、不平衡数据的处理

处理的其实方法挺多的,首先看看小Chat怎么说:

第34步 机器学习实战DLC:不平衡数据处理(上)

再看看小Bing怎么说:

第34步 机器学习实战DLC:不平衡数据处理(上)

总结一下:

(1)把少数类的变多:就是用各种算法生成新数据填充进去,个人觉得有点失真,我一般不用这种方法,有兴趣的可以自己试试。

(2)把多数类的变少:缺点很明显,就是样本量少了。不过个人常用这个方法,具体来说就是倾向性评分匹配,俗称PSM法。

(3)用集成学习法:也就是使用Xgboost、Catboost等boost字辈的模型,其实他们是有参数来处理不平衡数据的,后面细说。

所以,我介绍的是第二第三种方法。

先从最简单的第三种方法开始吧:

三、不平衡数据的处理实战

我就随便拿一个数据来演示了,比如说这个数据,类别0是1671例,类别1是158例,两者相差10倍多一丢丢。

第34步 机器学习实战DLC:不平衡数据处理(上)

(1)Xgboost调参法

(a)基础模型

首先,用Xgboost的随便一个参数来跑一下:

from sklearn.model_selection import train_test_split

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.30, random_state = 6588)   

#模型构建

boost = xgb.XGBClassifier(

                          n_estimators=200,

                          max_depth=9,

                          min_child_weight=3,

                          subsample=0.9,

                          colsample_bytree=0.9,

                          gamma=0.1,

                          reg_alpha=7,

                          )

boost.fit(X_train, y_train)

看看结果:

测试集和测试集的灵敏度和特异度:

第34步 机器学习实战DLC:不平衡数据处理(上)

辣眼睛!

此时ROC曲线和AUC值是很好看的:

第34步 机器学习实战DLC:不平衡数据处理(上)

第34步 机器学习实战DLC:不平衡数据处理(上)

但是,敢说这个模型很好么?这个就是无脑猜红球的模型,是没有什么使用价值的。所以,要处理!

(b)scale_pos_weight参数:

之前我们在介绍Xgboost的时候(传送门),其实列出过这个参数:

第34步 机器学习实战DLC:不平衡数据处理(上) scale_pos_weight:在样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。通常可以将其设置为负样本的数目与正样本数目的比值。

我们可以试试调整它,那么设置为多少合适呢,遇事不决就问小Chat:

第34步 机器学习实战DLC:不平衡数据处理(上)

如TA所说:“例如,如果负样本数目为1000,正样本数目为100,那么可以将scale_pos_weight设置为10。”那么,我们的负样本(0)数目是正样本(1)数目的10倍,所以设置为10?好像有点猛,保守点,​先用6试一试:

#模型构建

boost = xgb.XGBClassifier(

                          n_estimators=200,

                          max_depth=9,

                          min_child_weight=3,

                          subsample=0.9,

                          colsample_bytree=0.9,

                          scale_pos_weight=6,

                          gamma=0.1,

                          reg_alpha=7,

                          )

boost.fit(X_train, y_train)

看看结果:

测试集和测试集的灵敏度和特异度:

第34步 机器学习实战DLC:不平衡数据处理(上)

似乎比基础模型好些了吧,就是看起来过拟合了。

要不就大胆点,试一试scale_pos_weight=10:

第34步 机器学习实战DLC:不平衡数据处理(上)

看起来测试集的灵敏度52%可能到极限了,但是存在过拟合,而且特异度还是很高的,似乎有在操作的空间。

一顿操作,主要调整过拟合的参数,min_child_weight=2subsample=0.1reg_alpha=8

#模型构建

boost = xgb.XGBClassifier(

                          n_estimators=800,

                          max_depth=6,

                          min_child_weight=2,

                          subsample=0.1,

                          colsample_bytree=0.5,

                          scale_pos_weight=10,

                          gamma=0.1,

                          reg_alpha=8,



                          )

boost.fit(X_train, y_train)

提升不多:

第34步 机器学习实战DLC:不平衡数据处理(上) 测试集灵敏度涨了大概0.2左右,估计在调调能到56%,不过应该不会超过60%了,可能数据就这样了吧。不过相较于最初的37%,提升了不少了,足以说明这个数据不平衡对性能的影响有多大哦。

(2)Catboost调参法

同样的,Catboost模型也会提供一些参数来处理不平衡数据(传送门):

第34步 机器学习实战DLC:不平衡数据处理(上)

 同样,问一下用法:

第34步 机器学习实战DLC:不平衡数据处理(上)所以跟Xgboost的参数用法大同小异的,这里就不演示了。

(3)LightGBM调参法

LightGBM模型也会提供一些参数来处理不平衡数据(传送门):

第34步 机器学习实战DLC:不平衡数据处理(上)

看起来有点不靠谱。

(4)RF调参法

既然集成模型都有,那么RF应该也有类似功能(传送门):

第34步 机器学习实战DLC:不平衡数据处理(上)

看着名字,肯定是和Xgboost的参数用法大同小异的,这里就不演示了。

四、总结

可以看到,通过调整某些模型的特定参数,是可以提升不平衡数据的预测性能,但是这是指算法层面的调整了,肯定是有其上限的。要想继续突破上限,只能从数据入手,下一步我会介绍如何用PSM进行筛选数据。文章来源地址https://www.toymoban.com/news/detail-477475.html

到了这里,关于第34步 机器学习实战DLC:不平衡数据处理(上)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 大数据分析的Python实战指南:数据处理、可视化与机器学习【上进小菜猪大数据】

    上进小菜猪,沈工大软件工程专业,爱好敲代码,持续输出干货。 引言: 大数据分析是当今互联网时代的核心技术之一。通过有效地处理和分析大量的数据,企业可以从中获得有价值的洞察,以做出更明智的决策。本文将介绍使用Python进行大数据分析的实战技术,包括数据

    2024年02月08日
    浏览(50)
  • 【机器学习6】数据预处理(三)——处理类别数据(有序数据和标称数据)

    在【机器学习4】构建良好的训练数据集——数据预处理(一)处理缺失值及异常值这一篇文章中,主要说明热数据预处理的重要性以及如何处理缺失值及异常值这些数值特征。然而,在现实生活中遇到的数据集往往不仅仅只会包含 数值型特征 ,还会包含一个或者多个 类别特征

    2024年02月12日
    浏览(29)
  • 【机器学习】项目数据处理部分

    本文参考《阿里云天池大赛赛题解析》,拿到一个项目或者赛题,使用机器学习来进行预测分类,需要以下七个步骤: 项目(赛题)理解 数据探索 特征工程 模型训练 模型验证 特征优化 模型融合 本本是数据处理,即前3个步骤:项目理解、数据探索,特征工程。 简单的了解

    2024年02月07日
    浏览(39)
  • 【机器学习5】数据处理(二)Pandas:表格处理

    Pandas提供了三种数据类型,分别是 Series 、 DataFrame 和 Panel 。Series用于保存一维数据,DataFrame用于保存二维数据,Panel用于保存三维数据或者可变维数据。平时的表格处理数据分析最常用的数据类型是 Series 和 DataFrame ,Panel较少用到。 Series本质上是一个含有索引的 一维数组

    2024年02月13日
    浏览(31)
  • 机器学习:数据处理与特征工程

    机器学习中的数据处理和特征工程是非常关键的步骤,它们直接影响模型的性能和泛化能力。以下是一些常见的数据处理和特征工程技术: 数据处理: 缺失值处理: 处理数据中的缺失值,可以选择删除缺失值、填充均值/中位数/众数,或使用插值方法。 异常值处理: 检测和

    2024年01月16日
    浏览(30)
  • 机器学习(8)---数据预处理

     1. 在机器学习算法实践中,我们往往有着将不同规格的数据转换到同一规格,或不同分布的数据转换到某个特定分布的需求,这种需求统称为将数据“无量纲化”。 譬如梯度和矩阵为核心的算法中,譬如逻辑回归,支持向量机,神经网络,无量纲化可以加快求解速度. 而在

    2024年02月09日
    浏览(31)
  • 【机器学习】数据清洗之处理缺失点

    🎈个人主页:甜美的江 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:机器学习 🤝希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 引言: 在机器学习领域,数据被广泛认为是驱动模型性能的关键。然而,在真实世界的数据中,缺

    2024年02月20日
    浏览(31)
  • 《人工智能-机器学习》数据预处理和机器学习算法(以企鹅penguins数据集为例)

    本项目使用到的数据集链接: https://tianchi-media.oss-cn-beijing.aliyuncs.com/DSW/6tree/penguins_raw.csv 加载给定或者自行选定的数据集,对数据进行查看和理解,例如样本数量,各特征数据类型、分布、特征和标签所表达的含义等,然后对其进行数据预处理工作,包括但不限于对敏感数据

    2024年02月10日
    浏览(43)
  • 大数据处理中的数据处理与算法优化:机器学习在Hadoop处理中的应用

    作者:禅与计算机程序设计艺术 大数据处理中的数据处理与算法优化:机器学习在Hadoop处理中的应用 引言 随着大数据时代的到来,大量的数据处理需求不断增加,数据处理质量和效率成为企业、政府、科研机构等用户关注的焦点。机器学习作为一种新兴的数据处理技术,在

    2024年02月13日
    浏览(39)
  • 数据处理 | Matlab实现Lichtenberg算法的机器学习数据选择

    效果一览 基本介绍 Matlab实现Lichtenberg算法的机器学习数据选择 Lichtenberg算法适用于回归和分类数据集,并根据数量和最大覆盖范围选择最佳算法。Lichtenberg算法(Lichtenberg algorithm,LA)是由Pereira等人于2021年提出的一种新型智能优化算法,它是受闪电传播这一物理现象启发而产

    2024年02月16日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包