当前位置: 首页 > 后端技术 > Python

使用Python处理不平衡数据集

时间:2023-03-25 23:37:50 Python

1。什么是数据不平衡?所谓数据不平衡,是指数据集中类别数量分布不均;不平衡的数据在现实世界的任务中很常见。比如信用卡欺诈数据:99%是正常数据,1%是欺诈数据。由于数据的产生,贷款逾期数据一般是不平衡数据。类别很少的样本通常很少出现并且需要很多时间。经过长时间的收集。在机器学习任务(如分类问题)中,不平衡的数据会导致训练模型的预测结果偏向样本数量多的类别。这时候,除了选择合适的评价指标外,要想提高模型的性能,就必须对数据和模型做一些预处理。处理数据不平衡的主要方法:·Undersampling·Oversampling·综合采样·模型集成·调整类别权重或样本权重示例均使用不平衡学习库实现。https://github.com/scikit-lea...先看数据2.1欠采样欠采样就是对类别数多的样本进行采样,使得数量等于类别数少的样本数,所以以达到数量上的平衡。**推荐:020持续更新,精品圈每天都有新内容,干货集中度极高。建立联系,讨论技术,你想要的都在这里!成为第一个加入团队并超越同行的人!(入群不收费)点此与Python开发高手交流学习。群号:745895701免费申请:Python软件安装包,免费提供Python实用教程资料,包括Python基础学习、进阶学习、爬虫、人工智能、自动化运维、自动化测试等。**由于欠采样,部分是丢失数据,不可避免的是多类别样本的数量分布发生了变化。一个好的欠采样策略应该尽可能保持原始数据分布。欠采样就是删除大部分样本,那么可以删除哪些样本呢?·一种是重叠数据,即冗余数据。一是干扰数据。干扰少数的分布是基于此。欠采样有两种方式。边界邻接匹配,考虑删除邻接空间的多数样本,TomekLinks、NearMiss等方法下图为6NN(6个最近邻)。在这里,我们将重点关注TomekLinks。这个方法简单地说:对每个少数样本求1NN(最近邻),如果最近邻是多数,形成一个tome-links,这个方法认为这个多数是干扰,将其删除。从上面可以看出删除了1174个tomek-links。看来删除还不够。您可以测试它是否对分类结果有帮助。需要注意的是,因为需要计算最近邻,所以样本属性必须是数值属性,或者可以转化为数值属性。聚类方法通过多个簇将原始样本划分为多个簇,然后用每个簇的中心代替簇的特征来完成抽样的目的。可以看出,本次采样的样本并不是来自于原始样本集,而是通过聚类产生的。im-balance提供的欠采样方法有:NeighborhoodCleaningRuleEditedNearestNeighborsInstanceHardnessThresholdRepeatedEditedNearestNeighborsAllKNN2.2Oversampling过采样就是复制少量类别的样本,使其数量与数量多的类别数量相近。以达到量的平衡。由于复制了多个少数样本,过采样将改变少数方差。一种简单的过采样方法是随机复制少数人的样本;另一种是在现有样本的基础上生成人工样本。这里介绍一下人工样本的经典算法SMOTE(SyntheticMinorityOver-samplingTechnique)。SMOTE基于类似于少数样本的特征空间构造新的人工样本。步骤如下:选择一个少数样本,计算其KNN邻居在K个邻居中,随机选择一个邻居修改一个特征,偏移一定大小:偏移的大小是少数样本与邻居的差值乘以生成新样本的小随机比率(0,1)。对于SMOTE方法,为每个少数群体构建新样本。但也不总是这样,考虑以下三个点A、B、C。从数据分布的角度,C点很可能是异常点(Noise),B点是正态分布的点(SAFE),A点分布在边界位置(DANGER);直觉上,我们不应该去C点构造新样本,对于B点,构造新样本不会丰富少数类别的分布。只有A点,如果新样本的构建可以使A点从(DANGER)变为(SAFE),强化少数类的分类边界。这是Borderline-SMOTEADASYN方法,从维护样本分布的角度来确定生成的数据。生成数据的方法与SMOTE相同。不同的是每个minorsample产生的样本数量不同。·首先确定要生成的样本数量beta为[0,1]·对于每一个minortiy样本,确定其生成样本的比例。先找出K近邻,计算K近邻(即分子)中属于多数的样本所占的比例。Z是归一化因子,保证所有次要比例之和为1,可以认为是所有分子之和。计算为每个minortiy生成的新样本数。根据SMOTE生成样本。im-balance提供的过采样方法如下(包括SMOTE算法的变体):Randomminorityover-samplingwithreplacementSMOTE-SyntheticMinorityOver-samplingTechniqueSMOTENC-SMOTEforNominalContinuousbSMOTE(1&2)-BorderlineSMOTE类型1和2SVMSMOTE-支持向量SMOTEADASYN-用于平衡学习的自适应合成采样方法KMeans-SMOTEROSE-随机过采样示例.3综合采样过采样针对少数样本,欠采样针对多数样本;综合抽样是同时对少数样本和多数样本进行操作的方法。主要有SMOTE+Tomek-links和SMOTE+EditedNearestNeighbors。综合采样的方法是先过采样后欠采样。2.4模型集成这里的模型集成主要体现在数据上,即用多个平衡的数据集训练多个模型(majortilysample欠采样,添加minorsamples),然后进行集成。imblearn.ensemble提供了几种常用的模型集成算法,比如BalancedRandomForestClassifierim-balance提供的模型集成方法如下:EasyEnsembleclassifierBalancedRandomForestBalancedBaggingRUSBoost2.5Adjustcategoryweightorsampleweightformanyusegradientdescent的机器学习的方法通过调整类别权重或样本权重来学习(最小化一定的损失Loss)可以在一定程度上平衡不平衡的数据。比如gbdt模型lightgbm中的class_weight3。总结本文分享了几种常见的处理不平衡数据集的方法,并提供了一个简单的不平衡学习示例。总结如下:·欠采样:减少多数样本·过采样:增加少数样本·综合采样:先过采样,再欠采样·模型集成:创建平衡数据(多数样本欠采样+少数样本),多个不同的欠采样采样,训练不同模型,然后合并。无论是欠采样还是过采样,都在一定程度上改变了原始数据的分布,可能导致模型过拟合。需要尝试哪种方法,要符合实际的数据分布。当然也不一定有效,勇敢的去尝试,去做吧!