1. 样本不均衡问题
通常分类机器学习任务期望每种类别的样本是均衡的,即不同目标值样本的总量接近相同。在梯度下降过程中,不同类别的样本量有较大差异时,很难收敛到最优解。
会导致模型泛化能力大大降低,对比例大的样本造成过拟合,预测偏向样本数较多的分类。
1.1 对负样本采样应遵循的原则
1. 对每个用户,要保证正负样本的平衡(数目相似)。
如点击问题,对于经常无行为(不点击)的用户,尽量少采样。
2. 对每个用户采样负样本时,要选取那些很热门,而用户却没有行为的物品。
一般认为,很热门而用户却没有行为更加代表用户对这个物品不感兴趣。因为对于冷门的物品,用户可能压根没在网站中发现这个物品,所以谈不上是否感兴趣。
2. 样本不均衡
2.1 采样算法
2.1.1 欠采样(undersampling)
又叫下采样,减少样本数较多的样本,采用丢弃或选取部分样本的方法。但若随机丢弃负样本,可能丢失一些重要信息(导致模型只学习到总体模式的一部分 )。其代表性算法为EasyEnsemble。
2.1.2 过采样(oversampling)
又叫上采样,增加少数样本,比较常见的方法有:
1. 随机过采样:将现有样本简单复制,这样训练得到的模型泛化能力通常较差,会导致过拟合;可以加入轻微的随机扰动。
2. SMOTE算法
少数类别过采样技术,是一种用于合成少数类样本的过采样技术,通过对训练集中的正例进行插值来产生额外的正例。
对少数类样本进行分析,然后在现有少数类样本之间进行插值,人工合成新样本,并将新样本添加到数据集中进行训练。
2.1.3 数据合成
合成少数类样本,组合已有样本特征(从各个feature中随机选出一个已有值,拼接成一个新样本),产生新样本。代表性方法是SMOTE,在相似样本中进行特征的随机选择并拼接出新样本。
2.1.4 增大少数类样本权重
当少数类样本被误分时,其损失值要乘上相应的权重,从而让分类器更加关注这一类数目较少的样本。
2.2 半监督学习
2.3 代价敏感
通常对少数类样本进行加权处理,使得模型进行均衡训练。代价敏感加权增大了负样本在模型中的贡献,但没有为模型引入新的信息,既没有解决选择偏误的问题,也没有带来负面影响。
类权重计算方法如下:weight = 样本数/(类别数量 X 每个类别样本的数量)
通过参数class_weight = 'balanced' 调整正负样本的权重,可以使得正负样本总权重相同,模型KS有5%左右的提升。
2.4 模型角度
1. EasyEnsemble
利用集成学习机制,将负样本划分成为若干个集合供不同学习器使用。这样对每个学习器来看都进行了欠采样,但在全局来看却不会丢失重要信息。
2. BalanceCascade
利用增量训练的思想Boosting,先通过一次下采样产生训练集,训练一个分类器,对于那些分类正确的大众样本不放回,然后对这个更小的大众类样本下采样产生训练集,训练第二个分类器,以此类推,最终组合所有分类器的结果得到最终结果。
3. NearMiss
利用KNN挑选那些最具代表性的大众样本(计算量很大)。
2.5 阈值移动(threshold-moving)
基于原始训练集进行学习,但在用训练好的分类器进行预测时,将下面公式嵌入到其决策过程中,称为“阈值移动”。
y为阈值,
这个公式也是类别不均衡学习的一个基本策略-------再缩放(rescaling)