不平衡数据集是机器学习中需要解决的常见问题之一。常见的机器学习模型,在处理不平衡数据集时,如果单纯使用精确度来评估模型,往往会对最终结果产生误导。因而,在训练集极度不平衡的情况下,比如原始样本正负样本数量比为10000:1,我们往往可以采用如下几种方法来处理:
1. 尽量使用多个指标评估模型
在处理分类问题时,单纯使用模型精确度会对结果产生误导。因而可以使用混淆矩阵(confusion matrix)、精度(precision)、召回率(recall)和F1来评估模型。
2. 重采样(Re-sampling)
重采样是从训练集入手,生成均衡的数据集。常见的方法有过采样(oversampling)和欠采样(undersampling)。
过采样就是增加比重较小的负样本的数量,往往分为两种。一种是不生成合成数据的,比如对负样本进行随机的重复采样,直到负样本的数量与正样本的数量相匹配。另一种是生成合成数据的,类似于数据增强技术,通过采样负样本的邻居来生成新的负样本数据(如SMOTE算法)。过采样的缺点在于会重复负样本,使得部分数据过于被强调而导致过拟合(overfitting)。
欠采样就是减少比重较大的正样本的数量,往往是随机的对正样本进行采样,使得正样本的数量与负样本的数量相匹配。欠采样的缺点在于会丢弃大量正样本,使得模型易于欠拟合(underfitting)。
3. 调整损失函数
机器学习模型的优化是通过最小化损失函数来实现的。因而在处理不平衡数据集的时候,可以调整损失函数使得模型对少量样本更为敏感,从而使得最终的模型可以更好地识别出少量样本。通用做法是对少量样本的错判增加一个惩罚项,类似于正则化。或者在损失函数中,提高少量样本损失项的权重,这个权重可以通过计算训练集中多量样本和少量样本的比重来得到。比如正负样本的比重为1000:1,那么正样本损失项的权重为1/1001而负样本损失的权重为1000/1001。
4. 一类分类算法(one class classification)
如果负样本的数量极为稀少或者难于获得,那么可以考虑一类分类算法。一类分类算法常常用于异常检测(anomaly detection),即只在单类别的训练集上(比如正样本)进行训练,使得模型能够学习正样本的分布,从而自然而然地检测出与正样本分布不同的负样本。一类分类常见的算法有:
• 一类支持向量机(one class SVM)
• 隔离森林(isolation forest)
• 局部异常因子检测算法(local outlier factor)
• 基于神经网络的自动编码器(autoencoder)
奇手(Qeexo)公司最近推出了基于嵌入式系统的Qeexo AutoML平台,可以一键式训练采集的传感器数据并将训练的机器学习模型部署到边缘设备中。在传感器数据的处理中,AutoML集成了不同的算法以考虑训练集的不平衡性。详情请见:Qeexo AutoML | Qeexo AutoMLautoml.qeexochina.cn
参考文献: