机器学习中样本不平衡的处理方法

在现实收集的样本中,正负类别不均衡是现实数据中很常见的问题。一个分类器往往 Accuracy 将近90%,但是对少数样本的判别的 Recall 却只有10%左右。这对于我们正确找出少数类样本非常不利。

 

举例来说:在一波新手推荐的活动中,预测用户是否会注册的背景下,不注册的用户往往是居多的,这个正负比例通常回事1:99甚至更大。一般而言,正负样本比例超过1:3,分类器就已经会倾向于负样本的判断(表现在负样本Recall过高,而正样本 Recall 低,而整体的 Accuracy依然会有很好的表现)。在这种情况下,我们可以说这个分类器是失败的,因为它没法实现我们对正类人群的定位。

 

为什么样本不平衡会对结果造成影响

在一个极度不平衡的样本中,由于机器学习会每个数据进行学习,那么多数数据样本带有的信息量比少数样本信息量大,会对分类器学习过程中造成困扰。举例来说,假如有100个样本,其中只有1个是正样本,其余99个全为负样本,那么学习器只要制定一个简单的方法:所有样本均判别为负样本,就能轻松达到99%的准确率。而这个分类器的决策很明显并非是我们想要的判定标准。

样本不平衡的处理方法

以下样本平衡方案虽然很容易想到,但是实际操作的过程中总是很难实现,因为无论是任何缩放,都会影响“训练集是样本总体的无偏采样”这个假设前提,即我们不能基于训练数据的观察来推测真实情况中的真实几率。现采用的方法有以下3种:

欠采样

欠采样(undersampling)法是去除训练集内一些多数样本,使得两类数据量级接近,然后在正常进行学习

这种方法的缺点是就是放弃了很多反例,这会导致平衡后的训练集小于初始训练集。而且如果采样随机丢弃反例,会损失已经收集的信息,往往还会丢失重要信息。

欠采样改进方法1

但是我们可以更改抽样方法来改进欠抽样方法,比如把多数样本分成核心样本和非核心样本,非核心样本为对预测目标较低概率达成的样本,可以考虑从非核心样本中删除而非随机欠抽样,这样保证了需要机器学习判断的核心样本数据不会丢失。
举例来说依然是预测用户注册这个目标,我们可以将跳出率为100%的用户名下的所有会话都可以划分为非核心样本,因为跳出用户包含的信息量非常少(其他行为特征为空),将此部分用户样本排除可以最大可能的保留更多原始数据信息。

欠采样改进方法2

另外一种欠采样的改进方法是 EasyEnsemble 提出的继承学习制度,它将多数样本划分成若 N个集合,然后将划分过后的集合与少数样本组合,这样就形成了N个训练集合,而且每个训练结合都进行了欠采样,但从全局来看却没有信息丢失。

 

过采样

过采样(oversampling)是对训练集内的少数样本进行扩充,既增加少数样本使得两类数据数目接近,然后再进行学习。

简单粗暴的方法是复制少数样本,缺点是虽然引入了额外的训练数据,但没有给少数类样本增加任何新的信息,非常容易造成过拟合。

过采样改进方法1

通过抽样方法在少数类样本中加入白噪声(比如高斯噪声)变成新样本一定程度上可以缓解这个问题。如年龄,原年龄=新年龄+random(0,1)

过采样代表算法:SMOTE 算法

SMOTE[Chawla et a., 2002]是通过对少数样本进行插值来获取新样本的。比如对于每个少数类样本a,从 a最邻近的样本中选取 样本b,然后在对 ab 中随机选择一点作为新样本。

 

阈值移动

这类方法的中心思想不是对样本集和做再平衡设置,而是对算法的决策过程进行改进。

举个简单的例子,通常我们对预测结果进行分类时,当预测[公式] ( [公式]代表正类可能性) 值>0.5时,判定预测结果为正,反之为负。规定决策规则

[公式]>1,则预测为正例

不难发现,只有当样本中正反比例为1:1时,阈值设置为0.5才是合理的。如果样本不平衡决策规则需要进行变更,另 [公式] 代表正例个数, [公式] 代表负例个数,改进决策规则:

若 [公式] ,则预测为正例

因为训练集是总体样本的无偏采样,观测几率就代表真实几率,决策规则中 [公式] 代表样本中正例的观测几率,只要分类器中的预测几率高于观测几率达到改进判定结果的目标。

猜你喜欢

转载自www.cnblogs.com/ceo-python/p/11814111.html