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

news2024/9/24 11:31:05

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

一、不平衡数据的概念

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

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

二、不平衡数据的处理

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

再看看小Bing怎么说:

总结一下:

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

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

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

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

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

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

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

(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)

看看结果:

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

辣眼睛!

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

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

(b)scale_pos_weight参数:

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

 scale_pos_weight:在样本十分不平衡时,把这个参数设定为一个正值,可以使算法更快收敛。通常可以将其设置为负样本的数目与正样本数目的比值。

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

如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)

看看结果:

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

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

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

看起来测试集的灵敏度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)

提升不多:

 测试集灵敏度涨了大概0.2左右,估计在调调能到56%,不过应该不会超过60%了,可能数据就这样了吧。不过相较于最初的37%,提升了不少了,足以说明这个数据不平衡对性能的影响有多大哦。

(2)Catboost调参法

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

 同样,问一下用法:

所以跟Xgboost的参数用法大同小异的,这里就不演示了。

(3)LightGBM调参法

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

看起来有点不靠谱。

(4)RF调参法

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

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

四、总结

可以看到,通过调整某些模型的特定参数,是可以提升不平衡数据的预测性能,但是这是指算法层面的调整了,肯定是有其上限的。要想继续突破上限,只能从数据入手,下一步我会介绍如何用PSM进行筛选数据。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/611101.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解CenterFusion损失函数初始化及前向传播过程

CenterFusion损失函数Loss初始化_get_losses函数以及计算过程forward函数 1. 损失函数初始化前序运行逻辑2. 损失函数初始化2.1 loss函数初始化——Trainer类中的_get_losses()函数2.2 model_with_loss的初始化 3. loss计算过程前序运行逻辑4. loss计算过程4.1 loss计算函数调用…

chatgpt赋能python:Python圆柱体积计算器:简单、高效、快速解决计算难题

Python圆柱体积计算器:简单、高效、快速解决计算难题 圆柱体积是一个在日常生活、工程学、数学等领域都十分普遍的概念,可以用来计算许多实际问题中的体积,比如容器的容量、建筑材料的用量等等。在本文中,我们将介绍如何使用Pyth…

部署和配置DHCP服务器实验:自动分配IP地址和网络配置

部署和配置DHCP服务器实验:自动分配IP地址和网络配置 【实验目的】 部署DHCP服务器。熟悉DHCP服务器的配置方法。验证拓扑。 【实验拓扑】 实验拓扑如图所示。 设备参数如下表所示。 设备 接口 IP地址 子网掩码 默认网关 DHCPSERVE F0/0 172.16.10.1 25…

大学生必知必会技能系列02--虚拟机安装

学习linux的时候,在自己的pc笔记本上安装Linux不太方便,解决方法是,在笔记本上安装 vmware虚拟机,然后再把计划要学习的Linux版本安装到虚拟机中,此时外部电脑能办公,虚拟机上的 代码也能正常运用。 一、VMware 17 虚拟…

2023年6月杭州/广州/东莞/深圳软考(中/高级)认证招生简章

软考是全国计算机技术与软件专业技术资格(水平)考试(简称软考)项目,是由国家人力资源和社会保障部、工业和信息化部共同组织的国家级考试,既属于国家职业资格考试,又是职称资格考试。 系统集成…

09 【CLI 初始化脚手架 Vue零碎的一些知识】

09 【CLI 初始化脚手架 Vue零碎的一些知识】 1.Vue CLI 初始化脚手架 1.1具体步骤 1如果下载缓慢请配置npm淘宝镜像npm config set registry http://registry.npm.taobao.org 2全局安装 vue/cli npm install -g vue/cli 3切换到创建项目的目录,使用命令创建项目v…

递增子序列

1题目 给你一个整数数组 nums ,找出并返回所有该数组中不同的递增子序列,递增子序列中 至少有两个元素 。你可以按 任意顺序 返回答案。 数组中可能含有重复元素,如出现两个整数相等,也可以视作递增序列的一种特殊情况。 示例 1…

苹果MacOS系统傻瓜式本地部署AI绘画Stable Diffusion教程

Stable Diffusion的部署对小白来说非常麻烦,特别是又不懂技术的人。今天分享两个一键傻瓜式安装包,对小白来说非常有用。下面两个任选一个安装就可以。 一、DiffusionBee 简单介绍 DiffusionBee是基于stable diffusion的一个安装包,有图形…

BIO NIO AIO之间的区别与联系

目录 前言五种I/O模型1.同步阻塞I/O, BIO2.同步非阻塞I/O, NIO3.多路复用IO4.信号驱动I/O5.异步I/O,AIO 同步阻塞?异步非阻塞?1.阻塞I/O 与 非阻塞I/O2.同步I/O 与 异步I/O Netty采用了哪种I/O模型? 前言 Unix系统下的五种基本I/O模型 blo…

【Jenkins】什么?前端还能用Jenkins一键部署?

前置要求: Jenkins安装nodejs插件(本篇文章会教) Linux安装Node.js(图文解说详细版) 如果你是一名前端工程师,那么你可能会对Jenkins这个自动化构建工具并不陌生。但是,你有没有想过在前端项目中…

Python+Django图书商城网站前后端

程序示例精选 PythonDjango图书商城网站前后端 如需安装运行环境或远程调试&#xff0c;见文章底部个人QQ名片&#xff0c;由专业技术人员远程协助&#xff01; 前言 这篇博客针对<<PythonDjango图书商城网站前后端 >>编写代码&#xff0c;代码整洁&#xff0c;规…

飞行器姿态计算

在飞行器的控制中&#xff0c;姿态计算是至关重要的一步。姿态计算的目标是确定飞行器相对于参考坐标系的姿态&#xff0c;通常以欧拉角&#xff08;滚转、俯仰和偏航&#xff09;或四元数的形式表示。 以下是姿态计算的原理和常用方法的简要介绍&#xff1a; 原理&#xff1a…

数据库系列:数据库高可用及无损扩容

1 背景 在大型互联网场景中&#xff0c;数据库的高可用性显得尤为重要&#xff0c;为了保证稳定性&#xff0c;一般需要采用强化的架构模式&#xff0c;以保证数据层能够提供持续有效的稳定支撑。 2 高可用架构的基本演进过程 2.1 基本的数据库架构 每个服务对应一个存储服…

FinancesOnline 2022/2023 10大IT趋势预测

在过去几十年的时间里&#xff0c;全世界的计算能力达到了万亿倍的增长。太空、军事和工业研究促成了范式的转变。与此同时&#xff0c;新冠肺炎大流行等不可预见的事件迫使人们去迎接新的技术&#xff0c;采用与以往不同的技术路径&#xff0c;这导致了IT趋势越来越难以跟上。…

阿里云轻量服务器--Docker--Rabbitmq安装

1 Rabbitmq 介绍&#xff1a; RabbitMQ 是一个开源的消息代理软件&#xff0c;通常用于构建分布式系统&#xff0c;支持多种消息传递协议&#xff0c;并支持多种编程语言。RabbitMQ 基于 AMQP (Advanced Message Queuing Protocol) 协议开发&#xff0c;是一个高可用、高可靠、…

3.完成ODS层数据采集操作

将原始数据导入mysql 1 选中mysql 运行脚本 2 验证结果 数据存储格式和压缩方案 存储格式 分类 1.行式存储(textFile) 缺点:可读性较好 执行 select * 效率比较高 缺点:耗费磁盘资源 执行 select 字段 效率比较低 2.列式存储(orc) 优点:节省磁盘空间. 执行 select 字段…

配电网可靠性评估(4)—(顶刊复现)基于线性规划的配电网可靠性评估

之前的博客中介绍了配电网可靠性评估的三种方法、分别是解析法中的最小路法&#xff0c;以及序贯蒙特卡罗模拟法及非序贯蒙特卡洛模拟法&#xff0c;顺带提到了含有分布式电源的配电网可靠性评估方法。 配电网可靠性评估&#xff08;一&#xff09;最小路法和非序贯蒙特卡洛模…

Elai.io:AI视频生成平台

【产品介绍】 Elai.io是一个基于人工智能的AI视频生成平台&#xff0c;可以让你只用文本就能制作出有真人主持的专业视频。无论你是想做教育、营销、企业沟通或者其他类型的视频内容&#xff0c;Elai.io都可以帮你节省时间和成本&#xff0c;提高效率和质量。Elai.io的技术结合…

618数码产品攻略,列举几款2023年618必入的数码产品

​一年一度大型促销的618节日转眼间第一波就已经过去了&#xff0c;在这种各类优惠活动接踵而至的日子里&#xff0c;很多人都是准备着更换新东西的时刻&#xff0c;不过也会存在着一部分人&#xff0c;想要入手数码好物&#xff0c;但又不知道该如何去挑选&#xff0c;毕竟现在…

2.2 事件驱动的reactor网络设计模型

在网络io、io多路复用select/poll/epoll、基于事件驱动的reactor中介绍了多种网络I/O方式&#xff0c;特别是事件驱动的reactor。其开发效率比直接使用IO多路复用要高&#xff0c;它一般是单线程的&#xff0c;设计目标是希望一个线程使用CPU的全部资源。 并且&#xff0c;相对…