机器学习中如何解决样本不均衡的问题?

很多机器学习算法都有一个基本假设,就是数据分布是均匀的。当我们把这些算法直接应用在实际数据中时,大多数情况下都无法取得理想的结果,因为实际数据往往分布的很不均衡,都存在长尾效应。举个例子,大部分(假如是97%以上)的微博的总互动数(包括被转发,评论和点赞数量)都在0~5之间,交互数多的微博(多于100)非常的少,如果我们去预测一条微博交互数所在档位,预测器只需要把所有微博预测为第一档(0-5)就能解决非常高的准确率,而这样的预测器没有任何价值,对于这种样本分布不均匀的情况,应该怎样解决?

1. 上采样和下采样
上采样:通过增加分类中少数类样本的数量来实现样本均衡,最直接的方法是简单复制少数类样本形成多条记录,这种方法的缺点是如果样本特征少而可能导致过拟合的问题;经过改进的过抽样方法通过在少数类中加入随机噪声、干扰数据或通过一定规则产生新的合成样本。

下采样:通过减少分类中多数类样本的样本数量来实现样本均衡,最直接的方法是随机地去掉一些多数类样本来减小多数类的规模,缺点是会丢失多数类样本中的一些重要信息。

上采样和下采样更适合大数据分布不均衡的情况,尤其是第一种(上采样)方法应用更加广泛。

2. 正负样本的惩罚权重
在算法实现过程中,对于分类中不同样本数量的类别分别赋予不同的权重(一般思路分类中的小样本量类别权重高,大样本量类别权重低),然后进行计算和建模。

如果算法本身支持基于类别参数的调整设置,这种思路是更加简单且高效的方法。

3. 组合/集成
组合/集成方法指的是在每次生成训练集时使用所有分类中的小样本量,同时从分类中的大样本量中随机抽取数据来与小样本量合并构成训练集,这样反复多次会得到很多训练集和训练模型。最后在应用时,使用组合方法(例如投票、加权投票等)产生分类预测结果。

例如,在数据集中的正、负例的样本分别为100和10000条,比例为1:100。此时可以将负例样本(类别中的大量样本集)随机分为100份(当然也可以分更多),每份100条数据;然后每次形成训练集时使用所有的正样本(100条)和随机抽取的负样本(100条)形成新的数据集。如此反复可以得到100个训练集和对应的训练模型。

这种解决问题的思路类似于随机森林。如果计算资源充足,并且对于模型的时效性要求不高的话,这种方法比较合适。

4. 一分类
对于正负样本极不平衡的场景,我们可以换一个完全不同的角度来看待问题:把它看做一分类(one class learning) 或异常检测问题,这类方法的重点不在于捕捉类间的差别,而是为其中一类进行建模,比较有代表性的是 one-class-SVM。

单分类实际中有很多应用,比如人脸识别,我们不可能给所有的图片让机器去分类,事实上我们只能给出很多人脸的图像,让机器去学习识别。之后再来图像时,符合这些图像特征的就属于人脸,反之则不是。对比二分类,显著的区别就是,二分类不但能的出来这个图片不是人脸,他还能告诉你这个图片是猪脸。

本篇博文参考资料:
[1] 如何解决机器学习中样本不均衡问题?
[2] 机器学习:不均衡样本情况下的抽样
[3] 单分类 one-class-SVM
————————————————
版权声明:本文为CSDN博主「HF飞哥」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/huangfei711/article/details/79940485

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值