采样

对于样本分布不平衡的分类,如果按照0.5阈值分类,容易造成虚假的指标。因为模型一直都在学习大样本类,这样最后预测的结果,倾向于大样本类。因此可以考虑下面两个方法:

  1. 调整阈值,使得对小样本类更敏感,更公平。
  2. 选择合适的评价指标,而不accuracy(准确率)。 比如f1-score

采样方法是另一种改变样本不平衡分布的方法

采样方法

过采样

  1. 随机采样
    重复复制正例,这样就会使模型重视对正例的分类,否则就会受到惩罚。但是问题也随之而来,如果正例中有坏样本,其缺陷也会无限放大,容易过拟合。
  2. SMOTE
    在少数类样本之间进行插值来产生额外的样本。
    简单来说,就是对于一个少数类样本xi,使用K临近方法,算出距离xi最近的K个样本。距离可以用欧式距离来衡量。然后从K个样本中随机选择一个x^ ,按照下面公式生成新样本:


    image.png

    δ∈[0,1] 是一个随机数。
    缺点:
    (1) 如果选取的少数类样本周围也都是少数类样本,则新合成的样本不会提供太多有用信息。这就像支持向量机中远离margin的点对决策边界影响不大。
    (2)如果选取的少数类样本周围都是多数类样本,这类的样本可能是噪音,则新合成的样本会与周围的多数类样本产生大部分重叠,致使分类困难。

欠采样

  1. 随机欠采样
    随机干掉一些负例,使得正负样本平衡。
    这样可能会对负样本学习产生偏差,比如删除的样本包含一些重要信息,到时学出来的模型不充分。丢弃数据也很可耻

  2. 集成学习采样
    EasyEnsemble
    (1) 将多数类样本随机划分成n个子集,每个子集的数量等于少数类样本的数量,这相当于欠采样。
    (2) 接着将每个子集与少数类样本结合起来分别训练一个模型
    (3) 最后将n个模型集成
    虽然说每个子集的样本少于总体样本,集成后总信息量并不减少,但是否等价还存疑。

BalanceCascade
假设当前处在第n轮训练中:
(1)将当前大样本类和小样本类数据结合训练一个学习器H
(2)利用该学习器H将正确分类的大类样本会被剔除。
(3)进行下一轮n+1轮的训练,反复执行1和2
最后将不同的基学习器集成起来。
特点:
(1) 有监督的筛选。每一轮训练器都会在选择样本上起作用。
(2)每一轮丢弃分正确的样本,这样后面的学习器更注重那些分错的样本。

特点

优点

采样方法主要通过调整样本比例,来达到每个类的平衡。本质上也改变了模型的训练过程,会对梯度,收敛,参数等等都产生影响。

缺点

采样方法会改变原始的数据的分布,多带来一定偏差。

建议

  1. 不能用单指标来评估各方法:如 precision,recall ,这种受不同阈值影响很大。建议用F1分数最好,在类别不平衡问题中用ROC和PR曲线来评估非常流行,因为它们不受特定阈值变化的影响,反映的是模型的整体预测能力。
  2. 如果本身数据偏斜不是很厉害,那么采样方法的提升效果很细微。如果本身数据偏斜很厉害,采样方法纵使比base model好很多。 但是还要确保少数数据质量和数量,质量差就容易过拟合。数量少,则模型拟合能力不足,提升一点,但提高不了多少。

你可能感兴趣的:(采样)