机器学习面试题中有这么一道题:如果正样本有10000,负样本有1000,该怎么训练? 这个问题属于机器学习样本训练中的样本不均衡问题。经过资料的查找,大概分为如下几类:
1. 产生新数据型:过采样小样本(SMOTE),欠采样大样本。
过采样是通过增加样本中小类样本的数据量来实现样本均衡。其中较为简单的方式是直接复制小类样本,形成数量上的均衡。这种方法实现简单,但会由于数据较为单一而容易造成过拟合。 SMOTE过采样算法: 针对少数类样本的xi,求出其k近邻。随机选取k紧邻中一个样本记为xn。生成一个0到1之间的随机数r,然后根据Xnew = xi + r * (xn - xi)生成新数据。也可通过经过改进的抽样的方法,在少数类中加入随机噪声等生成数据。
欠采样大样本是通过减少多数类样本的样本数量来实现样本均衡。其中比较简单直接的方法就是随机去掉一些数据来减少多数类样本的规模,但这种方法可能会丢失一些重要的信息。还有一种方法就是,假设少数类样本数量为N,那就将多数类样本分为N个簇,取每个簇的中心点作为多数类的新样本,再加上少数类的所有样本进行训练。这样就可以保证了多数类样本在特征空间的分布特性。
2. 对原数据的权值进行改变
通过改变多数类样本和少数类样本数据在训练时的权重来解决样本不均衡的问题,是指在训练分类器时,为少数类样本赋予更大的权值,为多数类样本赋予较小的权值。例如scikit-learn中的SVM算法,也称作penalized-SVM,可以手动设置权重。若选择balanced,则算法会设定样本权重与其对应的样本数量成反比。
3. 通过组合集成方法解决
通过训练多个模型的方式解决数据不均衡的问题,是指将多数类数据随机分成少数类数据的量N份,每一份与全部的少数类数据一起训练成为一个分类器,这样反复训练会生成很多的分类器。最后再用组合的方式(bagging或者boosting)对分类器进行组合,得到更好的预测效果。简单来说若是分类问题可采用投票法,预测问题可以采用平均值。这个解决方式需要很强的计算能力以及时间,但效果较好,相当于结合了组合分类器的优势。
4. 通过特征选择
在样本数据较为不均衡,某一类别数据较少的情况下,通常会出现特征分布很不均衡的情况。例如文本分类中,有大量的特征可以选择。因此我们可以选择具有显著区分能力的特征进行训练,也能在一定程度上提高模型的泛化效果。