模型分类偏向性
第一次接触到这个问题是在vx的一篇文章,该文章介绍了许多训练深度学习的小trick。我现在依稀还记得的就是这个模型分类偏向性的问题,因为我本身也是在从事分类方向。当时文章中是这么介绍,”假如二分类问题的训练集中包含了0类样本9个,而1类样本1个。当使用该训练集训练二分类器的时候,由于受到类样本不均衡的影响,模型会倾向于将样本判别为0类。为了避免上述这种影响,我们可以对数据集进行过采样或者是欠采样。同时我也可以将阈值调低,假如分类概率大于0.1,则可以将其判别为1类类别“。所以在训练孪生网络模型的时候,我顺便试验了样本类别不均衡是否会导致模型的分类偏向。因此当时采用了朴素的样本对构造方法,即将每个样本都和其余样本组成样本对。这种方法天生必然会导致负类样本对远多余正类样本对。在这,我使用交叉熵损失函数来训练孪生网络而不是对比损失函数等。
我率先随机采样数据集来训练孪生网络,模型当真出现了分类偏向。但是当在使用已划分好的数据集来正式训练模型时,模型的分类偏向并不会表现的那么明显。所以我在想模型在样本类别数量不均衡的数据集下训练出现分类偏差的现象是否具有一定的偶然性。
因此,我使用了鸢尾花数据集进行一个小实验来验证我的想法。鸢尾花数据集总共包含了150个样本,这150个样本被划分为3个类别。在这,我分别以class0,class1和class2称呼这三个类别。其中,每个类别分别有50个样本。样本分布如下所示:
此时,我设置了三组实验并通过计算测试结果的混淆矩阵来查看在这三次实验中模型的分类结果随着训练样本量变化的情况。
第一组实验
训练数据集的构成情况(类别名,样本量):
Class0 :25
Class1 :1
Class2 :1
实验结果分别如下所示:
实验1混淆矩阵结果:
0 | 1 | 2 | |
---|---|---|---|
0 | 25 | 0 | 0 |
1 | 36 | 5 | 8 |
2 | 0 | 1 | 48 |
第二组实验
训练数据集的构成情况(类别名,样本量):
Class0:25
Class1:2
Class2:1
实验2混淆矩阵结果:
0 | 1 | 2 | |
---|---|---|---|
0 | 25 | 0 | 0 |
1 | 4 | 44 | 0 |
2 | 0 | 49 | 0 |
第三组实验
训练数据集的构成情况(类别名,样本量):
Class0:25
Class1:1
Class2:2
实验3混淆矩阵结果:
0 | 1 | 2 | |
---|---|---|---|
0 | 25 | 0 | 0 |
1 | 20 | 0 | 29 |
2 | 0 | 0 | 48 |
在实验1中,模型在类别2的召回率并没有受到样本不均衡的影响,而类别1则明显受到样本不均衡的影响,模型将大量属于类别1的样本分为第0类。在第二个实验中,当类别1的训练样本量增加1的时候,模型在类别1上的召回率得到了明显的提高,只有4个样本被判为0类。但是第二类的样本却全部判别为第一类。根据训练样本的分布发现,新增加的第1类样本和第二类样本比较接近,即两者之间的特征较相似,所以才会导致了在该数据集上训练的模型将第2类的样本全部判别为第1类。在第三个实验中,模型在第1个类别上的召回率为0,而在第2类上的召回率则为100%。
综合以上三个实验,我们可以初步得到一个结论,即样本类别数量的不均衡不一定会导致训练模型的分类偏向。即模型的分类偏向与训练样本的分布以及样本所能提供的信息量有关。所以当样本中类别的数量出现不平衡状况时,或许我们不一定要很担心模型在小数量类别样本上的泛化能力。但是如果可以,我们也可以尽可能地避免训练数据集中出现样本类别数量不均衡的状况。因为深度模型的可解释较差,我们很难去判别在什么样的情况样本类别数量不均就会导致模型的分类偏向,也很难判定在什么样的情况下这种情况就不会发生。所以,我们能做的就是尽量避免导致模型出现分类偏向的因素。