对于样本分布不平衡的分类,如果按照0.5阈值分类,容易造成虚假的指标。因为模型一直都在学习大样本类,这样最后预测的结果,倾向于大样本类。因此可以考虑下面两个方法:
- 调整阈值,使得对小样本类更敏感,更公平。
- 选择合适的评价指标,而不accuracy(准确率)。 比如f1-score
采样方法是另一种改变样本不平衡分布的方法
采样方法
过采样
- 随机采样
重复复制正例,这样就会使模型重视对正例的分类,否则就会受到惩罚。但是问题也随之而来,如果正例中有坏样本,其缺陷也会无限放大,容易过拟合。 -
SMOTE
在少数类样本之间进行插值来产生额外的样本。
简单来说,就是对于一个少数类样本xi,使用K临近方法,算出距离xi最近的K个样本。距离可以用欧式距离来衡量。然后从K个样本中随机选择一个x^ ,按照下面公式生成新样本:
δ∈[0,1] 是一个随机数。
缺点:
(1) 如果选取的少数类样本周围也都是少数类样本,则新合成的样本不会提供太多有用信息。这就像支持向量机中远离margin的点对决策边界影响不大。
(2)如果选取的少数类样本周围都是多数类样本,这类的样本可能是噪音,则新合成的样本会与周围的多数类样本产生大部分重叠,致使分类困难。
欠采样
随机欠采样
随机干掉一些负例,使得正负样本平衡。
这样可能会对负样本学习产生偏差,比如删除的样本包含一些重要信息,到时学出来的模型不充分。丢弃数据也很可耻。集成学习采样
EasyEnsemble
(1) 将多数类样本随机划分成n个子集,每个子集的数量等于少数类样本的数量,这相当于欠采样。
(2) 接着将每个子集与少数类样本结合起来分别训练一个模型
(3) 最后将n个模型集成
虽然说每个子集的样本少于总体样本,集成后总信息量并不减少,但是否等价还存疑。
BalanceCascade
假设当前处在第n轮训练中:
(1)将当前大样本类和小样本类数据结合训练一个学习器H
(2)利用该学习器H将正确分类的大类样本会被剔除。
(3)进行下一轮n+1轮的训练,反复执行1和2
最后将不同的基学习器集成起来。
特点:
(1) 有监督的筛选。每一轮训练器都会在选择样本上起作用。
(2)每一轮丢弃分正确的样本,这样后面的学习器更注重那些分错的样本。
特点
优点
采样方法主要通过调整样本比例,来达到每个类的平衡。本质上也改变了模型的训练过程,会对梯度,收敛,参数等等都产生影响。
缺点
采样方法会改变原始的数据的分布,多带来一定偏差。
建议
- 不能用单指标来评估各方法:如 precision,recall ,这种受不同阈值影响很大。建议用F1分数最好,在类别不平衡问题中用ROC和PR曲线来评估非常流行,因为它们不受特定阈值变化的影响,反映的是模型的整体预测能力。
- 如果本身数据偏斜不是很厉害,那么采样方法的提升效果很细微。如果本身数据偏斜很厉害,采样方法纵使比base model好很多。 但是还要确保少数数据质量和数量,质量差就容易过拟合。数量少,则模型拟合能力不足,提升一点,但提高不了多少。