1、过采样
对于某个比较少的label,可以复制样本达到增大样本量的效果,一般这种方法不太合理,过分强调已有的样本,放大噪声样本,过拟合。
也可以结合SMOTE方法,这种方法不是单纯的重复样本,而是通过某种方式对已有的样本进行加工变换,产生与已有样本相近的样本,对噪声样本的抵抗性更强,降低了过拟合的风险,但还是存在一定的缺点。
适用于样本量较少的情况。
2、欠采样
如果样本量级较大,可以对样本量比较大的label进行欠采样,量级不够多的情况下可能会损失部分样本信息,具体看数据情况与分布。
3、样本加权
以多分类为例,如果某个label较多,可以给该样本较低的权重,比如weight=0.7,其他label给1.0,这样的话,该label的精确会增加,召回降低。
举个例子:label 2的召回由于label 3样本量较大,结果较低,如果给label 3进行加权,赋值为0.7,以LightGBM模型为例,train_data = lgb.Dataset(data_path, weight = weight_para),这里的weight_para是一个list,包含了每一个样本的权重[1,0.7,0.7,1....]
加权前:
加权后:
acc有一定的降低,label2、4的精确降低,但是召回提升,label 3相反,其他label 波动不大。通过这样的方式可以让大盘预测的分布更加合理。相比较欠采样,这种方式可以保留更多的样本信息。
4、调整阈值
对于2分类来说,当模型预测结果分布不合理时,可以直接调整阈值,一般默认是0.5,可以根据实际正负类的分布占比,来调整阈值,此时的模型效果需要重新评估。但对于多分类这种方式不太方便,且调整阈值影响的是比当前label预测概率的类别,整体的label分布不会根据情况做相应的动态调整。