一、样本不平衡问题概述
在机器学习的分类任务中,样本不平衡是指不同类别训练样本数量存在显著差异的现象。这一差异会给模型训练和性能评估带来挑战,尤其在处理少数类样本时,模型可能难以有效学习其特征。
以二分类为例,理想情况下正负样本数量应相对平衡,如各 1000 个样本时,模型可较好学习两类特征。即便比例稍有偏差,如 1200:800,模型仍能维持一定学习效果。然而,当比例严重失衡,如 1900:100 时,模型可能倾向于预测多数类,忽略少数类,导致预测偏差。
在多分类问题中,如样本比例为 1000:800:600 时,模型通常能正常学习各特征。但当比例变为 1000:300:100 时,模型可能对样本多的类别过拟合,对少数类欠拟合,影响预测效果与泛化能力。
在实际应用中,样本不平衡较为常见。虽一定程度差异未必引发问题,但当差异过大影响模型性能时,就需采取措施应对。 特别地,以准确度作为评价指标在样本不平衡时可能产生误导。例如疾病预测中,若有 98 个正例和 2 个反例,简单将所有样本预测为正例,准确度可达 98%,但此模型无实际预测价值。
二、解决方案
(一)平衡数据集
解决样本不平衡首先考虑平衡数据集,有观点认为“更多的数据往往战胜更好的算法”。例如,若正负类样本比例为 1000:100,可搜集 2000 个数据使比例变为 2800:300,再从正类样本丢弃部分,调整为 500:300 后训练。 一些经验法则如下:
- 对大类样本(超 1 万、十万甚至更多)可欠采样,即删除部分样本。
- 对小类样本(不足 1 万甚至更少)可过采样,添加样本副本。
- 尝试随机与非随机采样方法。
- 考虑不同采样比例,不一定追求 1:1,因可能与实际情况不符。
- 可同时采用过采样与欠采样。
(二)尝试其他评价指标
准确度在类别不均衡分类任务中可能失效甚至误导。因此,需采用更具说服力的指标评估分类器。 常规分类评价指标可能在样本不平衡时失效,如将样本全分类为大类,准确率、精确率等会虚高。此时,AUC 是较好的评价指标。此外,还可考虑:
- F1 分数:综合精确率与召回率,能有效评估分类器性能。
- AUC - ROC 曲线:可评估分类器性能,尤其在正负样本分布不均时。
- 精确率和召回率:分别衡量分类器对正类和负类的识别能力。
(三)产生人工数据样本
为解决样本不平衡,可生成人工数据样本。一种方法是在少数类属性特征取值空间随机选取值构造新样本,可基于经验或假设属性独立采样,但可能无法保证属性间关系。 更系统的方法是 SMOTE 算法。它是过采样算法,构造新的小类样本而非复制已有样本。其原理是基于距离度量选小类中相似样本,选一样本并随机选邻居样本对其属性增加噪声,每次处理一个属性以构造新数据。
使用命令pip install imblearn
可安装 SMOTE 算法包实现样本平衡,具体用法可参考原始论文或官方文档。
(四)调整现有算法以应对样本不平衡
- 若大类样本数量是极小类的 L 倍,在随机梯度下降(SGD)算法中,遇极小类样本训练 L 次。
- 将大类样本划分到 L 个聚类中,训练 L 个分类器,每个分类器用大类一个簇与所有小类样本训练,预测时对离散类别采用多数投票,连续值采用平均值。
- 若小类有 N 个样本,将大类聚类成 N 个簇,用簇中心组成大类的 N 个样本与小类所有样本训练。
上述方法可能改变原始数据分布,为避免损害,可用全部训练集训练多个分类器,离散类别采用投票,连续值采用平均值。相关研究表明,改变数据分布可能提高分类器性能,虽与类别不平衡问题不直接相关,但提供了新思路。
(五)应用集成学习解决样本不平衡问题
集成学习是处理非平衡数据的有效方法,由 Robert E. Schapire 于 1990 年提出相关理论。该方法采用 boostrapping 算法,递归训练多个弱学习器并组合成强学习器。 具体步骤如下:
- 用原始数据集训练第一个学习器 L1。
- 从 L1 中选 50%分类正确和 50%分类错误的样本训练 L2。
- 用 L1 与 L2 分类不一致的样本训练 L3
- 采用投票方式确定最终输出。
在二分类不平衡问题中应用如下:
- 假设多数样本为 true 类,让 L1 输出始终为 true。
- 用 L1 分类正确和错误样本各 50%训练 L2,使 L2 训练样本平衡。
- 用 L1 与 L2 分类不一致样本训练 L3。
- 结合三个分类器投票决定最终结果,仅当 L2 与 L3 都为 false 时,最终结果才为 false,否则为 true。
三、总结
。解决该问题需综合考虑多方面因素:
- 据处理方法上,通过过采样、欠采样或生成合成样本等调整数据集分布,提高模型公平性与准确性。
- 评价指标选择时,采用 AUC - ROC、F1 分数等敏感指标全面评估模型对各类别分类效果。
- 算法调整方面,依据任务和数据特性调整算法参数或结构,增强对少数类别的识别能力。
综合运用这些策略,可提升模型泛化能力与实际应用价值,确保模型在不同类别样本下准确预测,提高分类任务的准确性与可靠性。面对具体机器学习问题,需根据数据特点和业务需求定制合适策略。