python 欠采样_欠采样(undersampling)和过采样(oversampling)会对模型带来怎样的影响?...

类别不平衡会导致模型偏向多数类,影响模型性能。采样法,如欠采样、过采样和SMOTE,是常见的应对策略。过采样可能导致过拟合,欠采样可能丢失信息,SMOTE通过合成新样本在一定程度上降低过拟合风险。实验表明,SMOTE通常优于简单过采样和欠采样,但选择最佳方法应考虑数据特性和模型过拟合控制。
摘要由CSDN通过智能技术生成

1. 为什么类别不平衡会影响模型输出?

大部分模型的默认阈值为输出值的中位数。比如逻辑回归的输出范围为[0,1],当某个样本的输出大于0.5就会被划分为正例,反之为反例。在数据的类别不平衡时,采用默认的分类阈值可能会导致输出全部为反例,产生虚假的高准确度,导致分类失败。因此很多答主提到了几点:1. 可以选择调整阈值,使得模型对于较少的类别更为敏感 2. 选择合适的评估标准,比如ROC或者F1,而不是准确度(accuracy)。举个简单的例子,Sklearn的决策树有一个参数是class_weight,就是用来调整分类阈值的,文档中的公式:

# 权重与样本数中每个类别的数量为负相关,越少见的类别权重越大

n_samples / (n_classes * np.bincount(y))

所以遇到不平衡数据,用集成学习+阈值调整可以作为第一步尝试。

2. 采样法和类别不平衡有什么关系?

而通过采样(sampling)来调整数据的不平衡,是另一种解决途径,并且可以和阈值调整同时使用。但采样法不是单纯的从数据角度改变了模型阈值,还改变了模型优化收敛等一系列过程,在此不赘述。

而采样法最受人诟病的就是可能会改变原始数据的分布,从而带来偏差。这个说法是否正确呢?让我们带着疑问来分析一下不同的采样方法有什么区别,该怎么使用。有鉴于总被人批评答题公式太多,今天就以可视化和实验为主。

3. 如何直观理解采样法?

我们使用的第一个实验数据是Cardio(Cardiotocogrpahy dataset),原始数据大小为

equation?tex=%5CRe%5E%7B1831%5Ctimes21%7D :也就是1831条数据,每条数据有21个特征。其中正例176个(9.6122%),反例1655个(90.3878%),属于典型的类别不平衡问题。

先来看一张可视化图,因为原始数据是21维不易展示,所以我们使用T-SNE把数据嵌入到2维空间。图中红色代表正例,蓝色代表反例(建议在电脑端阅读)。数据重叠会加深颜色,甚至造成颜色混合。左上、左下、右上和右下依次是:原始数据(Original):未经过任何采样处理(

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值