作者pipidog (如果狗狗飞上天)
看板DataScience
标题Re: [问题] 类别不平衡
时间Tue Mar 27 06:21:25 2018
※ 引述《DennismithJR (DSJ)》之铭言:
: 想请问大家在处理分类问题时遇到标签分布很不平衡时会怎麽处理呢
: 翻过Kaggle上一些相关问题,几乎没看到有人因此做特别的抽样或其他处理
: 好像只要评估指标是logloss或ROC的AUC就当没事了...
: 不知道是不是因为样本少的类别仍有一定数量就能如此?
: 若好比说我有一组样本
: 标签有五个类别,数量分别如下面所示,其比例与母体相符
: A: 10000
: B: 5000
: C: 200
: D: 15
: E: 8
: 显然这样本在D、E甚至C的分类上可能会出现些问题
: 想请问遇到这样的分布,有什麽建议的抽样方式呢?
这样的数据你拿来训练,其结果就是C,D,E会被完全淹没在汪洋大海之中,模型
的参数几乎没有机会针对它们做优化.其结果就是CDE通通会被判读成A跟B.所
以你要做的是data augmentation.让弱势类可以有更多机会被模型读到.
常见的方法(至少我知道的):
1.暴力的把弱势类的资料直接重复多次,放大它们的效力,让模型无法忽视它们.
一般的情况下这样做效果就还不错.
2.但是上面的方法也有个问题,就是这会导致弱势类的数据缺少变化,模型容易
过拟合,过度迎合那些特定的数字.所以你可以适度的在那些被人工重复的CDE
上加些噪音,让它们其他的feature产生一些微小变化.以避免模型过度拟合特定
的数字.
3.但是上面的作法还是有点问题,因为不同的特徵之间可能是有关连的,你在
这个特徵上加了一些噪音,理论上另一个特徵应该也要有些相应的变化,但是
随意的加噪音的方法就没办法考虑到这点了.你很可能会弄出不合理的噪音.(例
如读越多书,考试越低分?)所以一个可行的作法是先作PCA,但是不要降维,维持
原来的维度即可.我们的目的只要求出一个可以把covar matrix对角化的线性
空间的基底就好. 然後把所有的特徵重新用这组基底表示,接着在这上面添加
噪音.这样做有个好处是,在PCA的基底下,所有的特徵在线性空间中都变成了正
交关系,这时候个别的特徵上加点噪音,至少在线性程度上完全不会与另一个特
徵有连动.这样的噪音显然比2要更合理一些.
4.根据上面的思路,还有一个相对简单的作法,就是做降维例如PCA,t-SNE,甚至
auto encoder,如果是图片资料,直接用CNN+flatten layer也可以.假如降维之
後,各类别之间都区分的还算开,那我们就可以人工的在每个类别的cluster附近
随意的添加一些人造的数据点,这显然又比上面两个方法更合理,但前提是降维
之後,数据仍可以大致分开,而且你有能力确认这件事.怎麽确认? 如果不是2,3
维,你当然就无法靠视觉化来判断这件事情了,所以你唯一能做的,是计算弱势样
本间的距离是否靠近,强势样本距离弱势样本是否很远.然後用这些低维度的人
造数据来做训练,这相当於一种简单的数据造假方法.
5.而更高阶的数据造假方法,则是建立一个生成模型(generative model)! 这
在神经网路中,最常见的方法就是VAE(Variational Autoencoder)或是GAN
(Generative adversial network). 它们可以提取你的样本中的特徵,学习如
何造假,最後造出不尽相同又几可乱真的数据.但要用这招,你的弱势类别也不
能少到只有几百这种数量级,这是无法训练神经网路的.所以比如说你有两个类
别,其中一个类别有500K,另一个类别只有20K,20K的数据量练一个不太大的神
经网路已经够了,这时候你就可以考虑针对那个20K的进行造假.让两个类别数
量级相当.
随意介绍了几种方法,网路上还有更多高手的密招,你也可以多看看. 不过不管
密招多厉害,每一种方法都要付出不同程度的代价.端看你的时间跟资源了.
--
★人生中最温暖的夏天是在纽约的冬天★
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 169.237.42.114
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/DataScience/M.1522102889.A.C5D.html
※ 编辑: pipidog (169.237.42.114), 03/27/2018 07:06:14
1F:推 yougigun: 推 03/27 07:54
2F:推 HYDE1986: 推 03/27 08:31
3F:推 kokolotl: 推 03/27 09:42
4F:推 bruce32118: 推 03/27 10:04
5F:推 lucien0410: 方法1 术语上叫做oversampling 对吧? 03/27 10:22
6F:推 jojojen: 把少的那类变多就是oversampling 反之就是undersampling 03/27 12:37
8F:→ jojojen: 另外,借标题问一下,这几种方法可以同时使用吗? 03/27 12:38
9F:→ fallcolor: 做降维的过程也是在fit统计模型 一样会遇到类别不平均 03/27 19:34
10F:→ fallcolor: 的问题吧 03/27 19:34