一、什么是类别不平衡

举例子:二分类数据集,总样本 1000 条

  • 类别 1(少数类,阳性):100
  • 类别 0(多数类,阴性):900

直接训练逻辑回归:模型很倾向预测 0,哪怕全部预测 0,准确率也有 90%,但是几乎识别不出少数类。准确率不再是有效评价指标,要看召回率、精确率、F1‑score。

二、下采样

2.1  原理

减少多数类样本数量,从多数类中随机去掉一部分样本,让正负样本数量接近。

示例:上面数据集,多数类 900,少数类 100。 对多数类随机抽样 100 条,和全部少数类 100 条组成新数据集,新数据集正负 1:1,共 200 样本。再送给逻辑回归训练。

2.2 随机下采样

流程:

  1. 把数据集拆成少数类样本集、多数类样本集
  2. 多数类里面随机采样,样本数量等于少数类样本数目
  3. 合并采样后的多数类 + 全部少数类,得到平衡数据集
  4. 在平衡数据集训练逻辑回归;测试集绝对不能采样,保持原始真实分布!

优点:简单、速度快,训练集规模变小,训练更快

缺点:丢失大量多数类信息,很多有用样本直接删掉,容易欠拟合,丢失多数类模式。

注意:采样只作用训练集!测试集一定保持原始分布,千万不要对测试集做采样,否则评估结果虚假,没有现实意义。

2.3 代码案例

三、过采样

3.1 随机过采样

原理:复制少数类样本,重复采样,把少数类样本扩充,数量对齐多数类。

例子:少数类 100,多数类 900。对少数类重复复制,扩充到 900,新数据集正负各 900,共 1800 样本。

流程:

  1. 保留全部多数类样本
  2. 在少数类中,有放回重复采样,直到少数类样本数等于多数类
  3. 合并得到平衡训练集,训练逻辑回归

优点:不丢失原始样本信息

缺点:只是简单复制,没有新增信息,少数类重复样本多,极易过拟合。逻辑回归本身容易过拟合,随机过采样会加重过拟合。

3.2 SMOTE

随机过采样只是复制样本,SMOTE 生成新合成样本,而不是直接复制。 

SMOTE 算法步骤
  1. 获取全部少数类样本
  2. 对每一个少数样本,计算它在特征空间中的 K 近邻(默认 k=5)
  3. 在该样本和其中一个近邻之间,做线性插值,生成新人造少数样本 \(x_{new}=x_i+\text{rand}(0,1)\times(x_{knn}-x_i)\)
  4. 不断生成合成样本,直到少数类样本数量和多数类平衡
  5. 使用平衡数据集训练逻辑回归

优点:不是原样复制,缓解直接复制带来的严重过拟合

缺点:

  1. 会在重叠区域生成噪声样本,正负样本重叠时效果变差
  2. 对异常点敏感;没有考虑多数类分布

3.3 代码案例

四、过采样和下采样的比对

五、总结

  • 过采样、下采样是解决类别不平衡的数据层面手段,逻辑回归本身无法处理不平衡数据集。
  • 下采样删除多数样本,容易丢失信息;随机过采样复制样本容易过拟合,SMOTE 插值合成样本是改进版过采样
  • 最重要规则:先划分训练测试集,只对训练集采样,测试集保持真实分布

更多推荐