在机器学习中,如何处理数据不平衡的问题?

流浪的小孩18

数据不平衡问题在机器学习中是一种很常见的数据预处理的问题。

指的是数据在分布上的不均匀,比如对淘宝评论进行好评和差评的分类的问题,往往好评的数据特别多,而差评的数据则相对较少。在医学上对癌症的预测,同时是没发生病变的数据远远多于发生病变的数据量。

这种数据不平衡的问题会对机器学习结果造成很大影响,比如对于癌症的二分类问题来说,由于正例(没有病变)特别多如有990个,反例(发生病变)特别少如只有10个。因此就算不加选择的都预测为正例,那么准确率也会特别高,达到99%。因此算法就无法真正的学习到二者之间的区别。

解决的方式可以从两方面来处理:一种是对数据进行处理;二是使用针对不平衡数据的算法。

对数据进行处理

1. 通过二次采样来改变数据的分布

包括两种方式为过采样和欠采样:

一是随机复制少数类样本。但是这种方法的缺陷是,容易让模型对少数类样本产生过拟合,无法真正学到二者之间的差别。改进的方法可以向少数类样本中加入随机的噪声。

二是通过减少多数类样本来提高对少数类的预测效果。随机的丢掉一些多数类样本,来使得数据更加平衡。缺点是同时也丢失了多数类样本的一些信息,会降低模型学习的性能。

2. 数据合成

利用已知样本来生成更多的数据。常用的算法是SMOTE(Synthetic Minority Oversampling Technique),即合成少数类过采样技术。具体方式如下图所示:左边是数据不平衡的数据集;中间值利用SMOTE算法进行数据合成;右边则是合成后的结果。


改进算法

上面的方法都是从数据的分布的方面来改进学习效果;而在算法方面上改进的方法主要是基于代价敏感学习算法(Cost-Sensitive Learning),即提高少数类样本错误分类的权重,降低多数类样本错误分类的权重。从而使得模型更加关注少数类样本的分布状况。



分享到:


相關文章: