不平衡数据集是指类别(category)分布不均的数据集。例如,在二分类问题中,95% 的样本可能属于 A 类,而只有 5% 属于 B 类。这种不平衡导致模型优先预测多数类,从而在少数类上的性能表现不佳。现实世界中常见的场景包括欺诈检测(大多数交易是合法的)、医学诊断(罕见疾病)或制造业中的缺陷检测。在这种情况下,标准的准确率指标会产生误导——一个总是预测多数类的模型可能看起来准确率很高,但未能解决你试图解决的问题。
为了解决不平衡问题,开发者可以采用几种实用策略。重采样(Resampling)是一种常用方法。
- 欠采样(Undersampling)减少多数类样本(例如,随机删除合法交易记录),使其数量与少数类匹配。然而,这有丢失重要数据的风险。
- 过采样(Oversampling)复制或生成新的少数类样本。SMOTE(合成少数类过采样技术)等工具通过在现有少数类样本之间进行插值来创建合成样本,避免简单复制。
- 算法调整(Algorithmic adjustments)包括使用能够原生处理不平衡的模型。例如,在 scikit-learn 的逻辑回归或 SVM 中设置
class_weight='balanced'
会更严重地惩罚对少数类样本的错误分类。随机森林等基于树的模型可以配置为在训练期间采样平衡的子集。
另一种方法是数据生成(data generation)(例如,使用 GANs)或在少数类代表罕见事件时使用异常检测(anomaly detection)技术。此外,应使用评估指标(evaluation metrics)如精确率、召回率、F1 分数或 AUC-ROC 来取代准确率,以更好地衡量少数类的性能。结合多种方法通常效果最佳——例如,将 SMOTE 与加权损失函数结合使用。像 imbalanced-learn
(Python)这样的库提供了这些技术的现成实现。
最后,考虑不平衡是否真的需要修正。在某些情况下,例如类别极度稀少时,收集更多数据或重新定义问题(例如,将相关的少数类分组)可能更好。始终通过交叉验证和实际测试来验证解决方案——过采样有时会创建过拟合的模型,在新数据上表现不佳。选择取决于用例:欺诈检测可能优先考虑高召回率(捕捉所有欺诈),而垃圾邮件过滤则可能强调精确率(避免误报)。