1. 调整阈值
2.采样
3.样本权重
4.修改损失函数
5.增加特征
6.使用复杂模型
1.调整阈值
调整阈值的方法在五种调整方法中是最简单粗暴的。调整方法,可以将阈值划分为多个格子选择指标表现最好的阈值。调整阈值的弊端也很明显,这种改动影响面非常广,杀伤力也非常大,可能对一个数据集拟合对较好,对另一个数据集就会出现指标下降的情况。目前很少使用。
2.采样
采样有下采样(欠采样)和上采样(过采样)两种。下采样减少类别多的样本数量,上采样增加样本较少类别的样本数量。本身都是修改正负样本的比例,使其达到可以接受的相对均衡的比例。在具体的采样过程中,上采样和下采样可以结合使用。在上采样算法中仅仅复制样本较少的样本往往会造成过拟合。建议使用smote算法生成一些新的样本。这个思路类似于样本增强。效果比负采样稍好。负采样要尽量采集的均匀,不能只采样某一类的负样本,不然会造成数据分布的变化,就会出现模型训练集效果很好,测试集效果变差的情况。
采样的本质和调整阈值区别不大,基本都是将分类超平面向样本较少的类移动,使模型对较少对类别敏感。本质上调整阈值,采样,样本权重法,修改损失函数均没有提供额外的信息,在不添加特征,不修改模型的情况下,前四种处理方法本质上没有什么不同。而调整阈值的方式过于简单粗暴现在一般很少使用。而采样,样本权重,修改损失函数均是从样本,损失的角度逐步迭代学习分类或者拟合的能力,逻辑性更强,自由度更大。当前的机器学习中使用较多。
3.样本权重,4.修改损失函数
修改样本权重的方式有很多,比如在adaboost中权重大的样本被抽中的概率更大,也可以直接在loss函数中让当前梯度等于样本权重乘以当前梯度。或者修改学习率,在多类别上减小学习率,在少类别上增加学习率。从这个角度来看修改样本权重和修改损失函数是一样的。不过最好要了解清楚模型里的样本权重如何起作用,这样更容易对症下药,设计出好的样本权重函数。在实际情况中修改损失函数用的更多一点,因为这是比较显式,比较透明的。而修改样本权重如何起作用很少有资料提及。这一块相对空白,有时间我扒扒资料把这块补上,比如xgb中的样本权重如何起作用。
5.增加特征
对于特征处理要求不多的业务和场景可以忽略这段。增加特征就是增加信息,原则上是对模型有益的。如果新增特征没有作用,是原来的特征的信息已经表达了新加特征的信息。如果挖掘出一个跟label强相关的特征,往往不要高兴的太早,很有可能这个特征有问题。
6.使用复杂模型
复杂模型比如树模型深度模型能挖掘到线性模型挖掘不到的特征组合和高阶特征表达。大胆做尝试即可。