python_imbalanced-learn非平衡学习包_01_简介

python_imbalanced-learn非平衡学习包_01_简介
python_imbalanced-learn非平衡学习包_02_Over-sampling过采样
后续章节待定_希望各位认可前面已更_您的认可是我的动力

1.样本不平衡及其危害

机器学习中经典假设中往往假定训练样本各类别是同等数量即各类样本数目是均衡的,但是真实场景中遇到的实际问题却常常不符合这个假设。一般来说,不平衡样本会导致训练模型侧重样本数目较多的类别,而“轻视”样本数目较少类别,这样模型在测试数据上的泛化能力就会受到影响。一个例子,训练集中有99个正例样本,1个负例样本。在不考虑样本不平衡的很多情况下,学习算法会使分类器放弃负例预测,因为把所有样本都分为正便可获得高达99%的训练分类准确率。

考虑一个简单的例子,假设我们有一个关于医院患者的数据集,我们把其中患有癌症的病人标记为正例,把健康的患者标记为负例。众所周知,健康的人的数量肯定远远大于癌症患者的数量。在我们的数据集中,有10923个负例(健康的人),但是仅仅有260个正例(患有癌症的人)。理想情况下,我们想要得到一个分类器可以对正例和反例都能提供一个较好的分类准确率。但在实际应用中,对于负例我们可以得到将近100%的准确率,而对于正例,我们仅仅得到10%的准确率。

假设对于正例,分类器只有10%的准确率,会产生234个正例被误分到负例中。也就是说,有234个癌症患者被误诊为没病。在医疗工业中,这样的结果可能让我们付出很大的代价,这样的代价远远高于把没病的人诊断为癌症患者。因此,我们需要得到一个分类器,既能对于正例有很高的准确率,同时又不会影响到负例的准确率。

类似于上面例子中的数据集,在信贷风控,犯罪嫌疑人排查中,正例和负例的数据就是不平衡的。因此,这样的不平衡数据集的产生往往是内在的。同时也有很多其他的因素会造成数据的不平衡,例如时间,存储等。由于这些原因产生不平衡的数据集往往被称为外在的。除了数据集的内在和外在,我们可能还要注意到数据集的相对不平衡以及绝对不平衡。假设上述例子中的数据集有100000条数据,负例和正例的比例为100:1,只包含1000个正例。明显的,我们不能说1000个数据就是绝对小的,只不过相对于负例来说,它的数量相对较少。因此,这样的数据集被认为是相对不平衡的。

样本不平衡解决方法

下面我们介绍下机器学习中如何解决这类样本不平衡问题。包括通过采样、组合/集成方法、特征选择、类别权重/重要性设置等。

2.1 通过采样解决

通过过抽样和欠抽样解决样本不均衡抽样是解决样本分布不均衡相对简单且常用的方法,包括过抽样和欠抽样两种。

过抽样

过抽样(也叫上采样、over-sampling)方法通过增加分类中少数类样本的数量来实现样本均衡,最直接的方法是简单复制少数类样本形成多条记录,这个就是随机采样 under sampling的做法。容易过拟合。这种方法的缺点是如果样本特征少而可能导致过拟合的问题;经过改进的过抽样方法通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本,例如SMOTE算法。

欠抽样

欠抽样(也叫下采样、under-sampling)方法通过减少分类中多数类样本的样本数量来实现样本均衡,最直接的方法是随机地去掉一些多数类样本来减小多数类的规模,缺点是会丢失多数类样本中的一些重要信息。深度学习而言,下采样并不是直接随机丢弃一部分图像,因为那样做会降低训练数据多样性而影响模型泛化能力。正确的下采样方式为,在批处理训练时对每批随机抽取的图像严格控制其样本较多类别的图像数量。以二分为例,原数据的分布情况下每次批处理训练正负样本平均数量比例为5:1,如仅使用下采样,可在每批随机挑选啊训练样本时每5个正例只取1个放入该批训练集的正例,负例选取按照原来的规则,这样可使每批选取的数据中正负比例均等。

总体上, 过抽样和欠抽样更适合大数据分布不均衡的情况,尤其是第一种(过抽样)方法应用更加广泛,更保险有效的方式是上采样和下采样结合使用。

2.2 通过组合/集成方法

组合/集成方法指的是在每次生成训练集时使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集和训练模型。最后在应用时,使用组合方法(例如投票、加权投票等)产生分类预测结果。例如,在数据集中的正、负例的样本分别为100和10000条,比例为1:100。此时可以将负例样本(类别中的大量样本集)随机分为100份(当然也可以分更多),每份100条数据;然后每次形成训练集时使用所有的正样本(100条)和随机抽取的负样本(100条)形成新的数据集。如此反复可以得到100个训练集和对应的训练模型。这种解决问题的思路类似于随机森林。在随机森林中,虽然每个小决策树的分类能力很弱,但是通过大量的“小树”组合形成的“森林”具有良好的模型预测能力。如果计算资源充足,并且对于模型的时效性要求不高的话,这种方法比较合适。

2.3 通过特征选择解决

以上基于数据行的操作,通过多种途径来使得不同类别的样本数据行记录均衡。除此以外,还可以考虑使用或辅助于基于列的特征选择方法。一般情况下,样本不均衡也会导致特征分布不均衡,但如果小类别样本量具有一定的规模,那么意味着其特征值的分布较为均匀,可通过选择具有显著型的特征配合参与解决样本不均衡问题,也能在一定程度上提高模型效果。

2.4 设置类别权重/重要性:

代价敏感学习是使随机森林更适合从非常不平衡的数据中学习的方法之一。随机森林有倾向于偏向大多数类别。因此,对少数群体错误分类施加昂贵的惩罚可能是有作用的。由于这种技术可以改善模型性能,所以我给少数群体分配了很高的权重(即更高的错误分类成本)。然后将类别权重合并到随机森林算法中。我根据类别1中数据集的数量与其它数据集的数量之间的比率来确定类别权重。例如,类别1和类别3数据集的数目之间的比率约为110,而类别1和类别2的比例约为26。现在我稍微对数量进行修改以改善模型的性能,以下代码片段显示了不同类权重的实现:

from sklearn.ensemble import RandomForestClassifier
class_weight = dict({1:1.9, 2:35, 3:180})

rdf = RandomForestClassifier(bootstrap=True,
            class_weight=class_weight, 
            criterion='gini',
            max_depth=8, max_features='auto', max_leaf_nodes=None,
            min_impurity_decrease=0.0, min_impurity_split=None,
            min_samples_leaf=4, min_samples_split=10,
            min_weight_fraction_leaf=0.0, n_estimators=300,
            oob_score=False,
            random_state=random_state,
            verbose=0, warm_start=False)

以上class_weight为权重参数

3.采用方法

3.1 简单过采样问题

过采样增加了原始数据集的数量,因此在训练学习器时需要花费更多的训练时间。并且由于处理之后的数据集中存在很多重复的样本,可能会导致学习的规则比较具体,因此可能会导致过拟合。除了随机抽样替换外,还有两种常用的方法对少数群体进行过采样,方式(i)合成少数过采样技术(SMOTE)和(ii)自适应合成(ADASYN)采样方法。SMOTE和ADASYN二者均通过插值生成新样本。

3.1 SMOTE

SMOTE是一种合成采样的一种解决不平衡学习的方法,它已经被证明在很多领域都比较有效。它主要是基于现存的少数类样本,计算样本特征空间之间的相似度,然后创建人工合成样本。SMOTE可能会连接内联点和离群点,而ADASYN可能只关注离群点,这两种情况下都可能导致次优决策函数。在这方面,SMOTE提供了三个额外的选项来生成样本。 这些方法侧重于最优决策函数边界附近的样本,并将在最近邻类的相反方向生成样本。这些变体如下图所示。

在这里插入图片描述
在这里插入图片描述
![在这里插入图片描述]在这里插入图片描述
(https://img-blog.csdnimg.cn/0708105458854593ba0e9fbef18ff043.png)

3.2 欠采样问题

欠采样也存在一些问题,当我们移除一些数据的时候,可能会失去一些重要的信息。为了避免这种信息损失带来的影响,在欠采样中,主要有两个方法:EasyEnsemble 与 BalanceCascade

参考引用:

不平衡样本的处理 https://zhuanlan.zhihu.com/p/70701530
机器学习----正负样本不均衡
三招提升数据不平衡模型的性能
不平衡学习(Imbalanced learning

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪龙无敌

你的鼓励是我们一起前进的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值