刚才实验室来了一个大四的学弟讨论毕设定题,我旁听。感觉自己和别人的差距还很大,首先就是对于自己的能力还缺乏清晰的认识。别人知道一个东西的时候说:我搭过什么,跑过什么,但是没有修改过具体函数;而我知道一个东西皮毛的时候就已经觉得自己能做出来了。有感于此,决定把最近弄不明白的问题(如题)拿出来梳理一下思路。
非常欢迎各位高人指点。
-------------------------------------------------------------------------------------------------------------
- 数据预处理层面
目前在做关于图像分类的研究,之前拿小样本跑了resnet50的demo,基本确定了一些参数,最近才开始拿全数据集跑。遇到的问题也很明显,数据集的分布不均衡/非对称。我的数据集分5类,具体如下表:
可以看出最多的和最少的之间差了几百倍,这会导致即使我把所有的数据都判定为0类,预测结果也不会很差,但是明显我的神经网络可以说没有学到东西。
网上查了对于不平衡数据集的处理方法,一般说的就是过采样、欠采样等,看完还是不知道怎么做,经人提点,针对不平衡数据集的分类不是一个技术上的trick,而是“有专门的论文和方法”。主要是具体问题还需要具体分析,这些方法还需要结合自己的应用场景做实验才能判断效果好坏。
baseline1:
因为之前在小样本上测试的时候发现用数据增广的方法训练集准确率提升的很快,但是测试集的准确率却提不上去,考虑存在过拟合,因此神仙师兄暂时建议我用增广的方法先试试看,按他的说法我将数据集增广了八倍,类间直接按照原有的比例投入训练,训练集:测试集 = 8:1。这样的做的理由是“保证测试集和验证集有着同样的分布”。道理也很简单,就是因为欠采样和过采样都有着各自的缺陷。直觉上讲,欠采样不可避免会造成大类某些有效信息的丢失,而过采样(对图像一般就是做简单平移旋转等增广)可能增加过拟合的可能性,还有就是“尽管在样本数量上实现了相对均衡化,但未考虑数据的整体分布信息”。
模型训练大概需要一周时间,在这期间制定下一步的方案。
baseline2:
准备将数据集初步划分为两个大类,也是在另一篇论文中得到的启发,数据集采用的医学上的划分方式不一定适合于目前的实验。先将数据集分成0:(1+2+3+4) = 25810:9316,分两类,效果好再往后细分。
baseline3:
欠采样(..)
baseline4:
过采样(..)
baseline1在增广后的数据集上跑,先观察能够提升多少;baseline2,3,4在未增广的数据上跑,尽快得出结论。
------------------------------------------------------------------------------------------------------------
- 特征层面
其实baseline2也可以算作是特征层面的操作。
- 算法层面
典型的方法有代价敏感法,单类学习法和集成学习法。
--------------------------------------------------------------------------------------------------------------
参考文献:
不平衡数据分类方法综述